From 7dd171cdcc008c341c8e1cbc96143c25ffb01357 Mon Sep 17 00:00:00 2001 From: krasimir Date: Thu, 4 May 2017 08:29:51 +0000 Subject: [PATCH] optimize memory allocation in the lookup by using worker pools --- src/runtime/c/pgf/lookup.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/runtime/c/pgf/lookup.c b/src/runtime/c/pgf/lookup.c index 5f2b3aff3..70d936f08 100644 --- a/src/runtime/c/pgf/lookup.c +++ b/src/runtime/c/pgf/lookup.c @@ -318,9 +318,9 @@ static GuBuf* pgf_lookup_merge(PgfMetaId cat_id1, GuBuf* spine1, PgfMetaId cat_id2, GuBuf* spine2, PgfMetaId* cat_id, - GuPool* pool) + GuPool* pool, GuPool* out_pool) { - GuBuf* spine = gu_new_buf(GuBuf*, pool); + GuBuf* spine = gu_new_buf(GuBuf*, out_pool); gu_buf_push(spine, GuBuf*, NULL); GuMap* pairs = gu_new_map(PgfPair, pgf_pair_hasher, PgfMetaId, &gu_null_struct, pool); @@ -329,7 +329,7 @@ pgf_lookup_merge(PgfMetaId cat_id1, GuBuf* spine1, pgf_lookup_merge_cats(spine, pairs, cat_id1, spine1, cat_id2, spine2, - pool); + out_pool); return spine; } @@ -369,8 +369,10 @@ pgf_lookup_sentence(PgfConcr* concr, PgfType* typ, GuString sentence, GuPool* po } /////////////////////////////// + GuPool *work_pool = gu_new_pool(); + PgfMetaId cat_id1 = 0; - GuBuf* join = gu_new_buf(GuBuf*, pool); + GuBuf* join = gu_new_buf(GuBuf*, work_pool); gu_buf_push(join, GuBuf*, NULL); GuUCS c = ' '; @@ -389,7 +391,7 @@ pgf_lookup_sentence(PgfConcr* concr, PgfType* typ, GuString sentence, GuPool* po const uint8_t* end = p-1; size_t len = end-start; - GuString tok = gu_malloc(pool, len+1); + GuString tok = gu_malloc(work_pool, len+1); memcpy((uint8_t*) tok, start, len); ((uint8_t*) tok)[len] = 0; @@ -397,9 +399,15 @@ pgf_lookup_sentence(PgfConcr* concr, PgfType* typ, GuString sentence, GuPool* po GuBuf* spine = pgf_lookup_build_spine(lexicon_idx, function_idx, tok, typ, &cat_id2, - pool); + work_pool); - join = pgf_lookup_merge(cat_id1, join, cat_id2, spine, &cat_id1, pool); + GuPool *work_pool2 = gu_new_pool(); + + join = pgf_lookup_merge(cat_id1, join, cat_id2, spine, &cat_id1, work_pool, work_pool2); + + gu_pool_free(work_pool); + + work_pool = work_pool2; } #ifdef PGF_LOOKUP_DEBUG @@ -411,5 +419,7 @@ pgf_lookup_sentence(PgfConcr* concr, PgfType* typ, GuString sentence, GuPool* po gu_pool_free(tmp_pool); #endif + gu_pool_free(work_pool); + return NULL; }