OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-CompactHash commits / 6fd763b

Adding atomics in OpenMP code
6fd763b54b0eeb709a8dba5a0523ab6694b0fba2
by brobey <brobey@lanl.gov> · 2015-11-08T02:48:59.000Z

Changed files (4) +81 -63

HashFactory/HashFactory.c +54 -60
……@@ -4242,10 +4242,12 @@ int intintLCGLinearOpenCompactOpenMPHash_InnerQuerySingle(char *tableData,
42424242 c) %
42434243 ((intintLCGLinearOpenCompactOpenMPHash_TableData *)
42444244 tableData)->numBuckets);
4245 if ((buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
4245 int old_key =
4246 __sync_val_compare_and_swap(&buckets[index].key, -1, key);
4247 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
42464248 exitCode = HASH_SEARCH_CODE_EMPTY;
42474249 break;
4248 } else if (key == buckets[index].key) {
4250 } else if (old_key == key) {
42494251 exitCode = HASH_SEARCH_CODE_MATCH;
42504252 break;
42514253 } else if ((index == c && iteration > 0)) {
……@@ -4294,10 +4296,13 @@ int intintLCGLinearOpenCompactOpenMPHash_InnerQuery(char *tableData,
42944296 c) %
42954297 ((intintLCGLinearOpenCompactOpenMPHash_TableData *)
42964298 tableData)->numBuckets);
4297 if ((buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
4299 int old_key =
4300 __sync_val_compare_and_swap(&buckets[index].key, -1,
4301 key);
4302 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
42984303 exitCode = HASH_SEARCH_CODE_EMPTY;
42994304 break;
4300 } else if (key == buckets[index].key) {
4305 } else if (old_key == key) {
43014306 exitCode = HASH_SEARCH_CODE_MATCH;
43024307 break;
43034308 } else if ((index == c && iteration > 0)) {
……@@ -4339,14 +4344,12 @@ int intintLCGLinearOpenCompactOpenMPHash_InnerInsertSingle(char *tableData,
43394344 c) %
43404345 ((intintLCGLinearOpenCompactOpenMPHash_TableData *)
43414346 tableData)->numBuckets);
4342 if (((buckets[index].key ==
4343 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
4344 key,
4345 HASH_BUCKET_STATUS_EMPTY) :
4346 buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
4347 int old_key =
4348 __sync_val_compare_and_swap(&buckets[index].key, -1, key);
4349 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
43474350 exitCode = HASH_SEARCH_CODE_EMPTY;
43484351 break;
4349 } else if (key == buckets[index].key) {
4352 } else if (old_key == key) {
43504353 exitCode = HASH_SEARCH_CODE_MATCH;
43514354 break;
43524355 } else if ((index == c && iteration > 0)) {
……@@ -4393,15 +4396,13 @@ int intintLCGLinearOpenCompactOpenMPHash_InnerInsert(char *tableData,
43934396 c) %
43944397 ((intintLCGLinearOpenCompactOpenMPHash_TableData *)
43954398 tableData)->numBuckets);
4396 if (((buckets[index].key ==
4397 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
4398 key,
4399 HASH_BUCKET_STATUS_EMPTY)
4400 : buckets[index].key) ==
4401 HASH_BUCKET_STATUS_EMPTY) {
4399 int old_key =
4400 __sync_val_compare_and_swap(&buckets[index].key, -1,
4401 key);
4402 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
44024403 exitCode = HASH_SEARCH_CODE_EMPTY;
44034404 break;
4404 } else if (key == buckets[index].key) {
4405 } else if (old_key == key) {
44054406 exitCode = HASH_SEARCH_CODE_MATCH;
44064407 break;
44074408 } else if ((index == c && iteration > 0)) {
……@@ -4445,14 +4446,12 @@ int intintLCGLinearOpenCompactOpenMPHash_InnerInsertSingleNoOverwrite(char
44454446 c) %
44464447 ((intintLCGLinearOpenCompactOpenMPHash_TableData *)
44474448 tableData)->numBuckets);
4448 if (((buckets[index].key ==
4449 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
4450 key,
4451 HASH_BUCKET_STATUS_EMPTY) :
4452 buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
4449 int old_key =
4450 __sync_val_compare_and_swap(&buckets[index].key, -1, key);
4451 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
44534452 exitCode = HASH_SEARCH_CODE_EMPTY;
44544453 break;
4455 } else if (key == buckets[index].key) {
4454 } else if (old_key == key) {
44564455 exitCode = HASH_SEARCH_CODE_MATCH;
44574456 break;
44584457 } else if ((index == c && iteration > 0)) {
……@@ -4500,15 +4499,13 @@ int intintLCGLinearOpenCompactOpenMPHash_InnerInsertNoOverwrite(char *tableData,
45004499 c) %
45014500 ((intintLCGLinearOpenCompactOpenMPHash_TableData *)
45024501 tableData)->numBuckets);
4503 if (((buckets[index].key ==
4504 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
4505 key,
4506 HASH_BUCKET_STATUS_EMPTY)
4507 : buckets[index].key) ==
4508 HASH_BUCKET_STATUS_EMPTY) {
4502 int old_key =
4503 __sync_val_compare_and_swap(&buckets[index].key, -1,
4504 key);
4505 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
45094506 exitCode = HASH_SEARCH_CODE_EMPTY;
45104507 break;
4511 } else if (key == buckets[index].key) {
4508 } else if (old_key == key) {
45124509 exitCode = HASH_SEARCH_CODE_MATCH;
45134510 break;
45144511 } else if ((index == c && iteration > 0)) {
……@@ -5650,10 +5647,12 @@ int intintLCGQuadraticOpenCompactOpenMPHash_InnerQuerySingle(char *tableData,
56505647 c) %
56515648 ((intintLCGQuadraticOpenCompactOpenMPHash_TableData *)
56525649 tableData)->numBuckets);
5653 if ((buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
5650 int old_key =
5651 __sync_val_compare_and_swap(&buckets[index].key, -1, key);
5652 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
56545653 exitCode = HASH_SEARCH_CODE_EMPTY;
56555654 break;
5656 } else if (key == buckets[index].key) {
5655 } else if (old_key == key) {
56575656 exitCode = HASH_SEARCH_CODE_MATCH;
56585657 break;
56595658 } else
……@@ -5706,10 +5705,13 @@ int intintLCGQuadraticOpenCompactOpenMPHash_InnerQuery(char *tableData,
57065705 c) %
57075706 ((intintLCGQuadraticOpenCompactOpenMPHash_TableData
57085707 *) tableData)->numBuckets);
5709 if ((buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
5708 int old_key =
5709 __sync_val_compare_and_swap(&buckets[index].key, -1,
5710 key);
5711 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
57105712 exitCode = HASH_SEARCH_CODE_EMPTY;
57115713 break;
5712 } else if (key == buckets[index].key) {
5714 } else if (old_key == key) {
57135715 exitCode = HASH_SEARCH_CODE_MATCH;
57145716 break;
57155717 } else
……@@ -5755,14 +5757,12 @@ int intintLCGQuadraticOpenCompactOpenMPHash_InnerInsertSingle(char *tableData,
57555757 c) %
57565758 ((intintLCGQuadraticOpenCompactOpenMPHash_TableData *)
57575759 tableData)->numBuckets);
5758 if (((buckets[index].key ==
5759 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
5760 key,
5761 HASH_BUCKET_STATUS_EMPTY) :
5762 buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
5760 int old_key =
5761 __sync_val_compare_and_swap(&buckets[index].key, -1, key);
5762 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
57635763 exitCode = HASH_SEARCH_CODE_EMPTY;
57645764 break;
5765 } else if (key == buckets[index].key) {
5765 } else if (old_key == key) {
57665766 exitCode = HASH_SEARCH_CODE_MATCH;
57675767 break;
57685768 } else
……@@ -5814,15 +5814,13 @@ int intintLCGQuadraticOpenCompactOpenMPHash_InnerInsert(char *tableData,
58145814 c) %
58155815 ((intintLCGQuadraticOpenCompactOpenMPHash_TableData
58165816 *) tableData)->numBuckets);
5817 if (((buckets[index].key ==
5818 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
5819 key,
5820 HASH_BUCKET_STATUS_EMPTY)
5821 : buckets[index].key) ==
5822 HASH_BUCKET_STATUS_EMPTY) {
5817 int old_key =
5818 __sync_val_compare_and_swap(&buckets[index].key, -1,
5819 key);
5820 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
58235821 exitCode = HASH_SEARCH_CODE_EMPTY;
58245822 break;
5825 } else if (key == buckets[index].key) {
5823 } else if (old_key == key) {
58265824 exitCode = HASH_SEARCH_CODE_MATCH;
58275825 break;
58285826 } else
……@@ -5871,14 +5869,12 @@ int intintLCGQuadraticOpenCompactOpenMPHash_InnerInsertSingleNoOverwrite(char
58715869 c) %
58725870 ((intintLCGQuadraticOpenCompactOpenMPHash_TableData *)
58735871 tableData)->numBuckets);
5874 if (((buckets[index].key ==
5875 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
5876 key,
5877 HASH_BUCKET_STATUS_EMPTY) :
5878 buckets[index].key) == HASH_BUCKET_STATUS_EMPTY) {
5872 int old_key =
5873 __sync_val_compare_and_swap(&buckets[index].key, -1, key);
5874 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
58795875 exitCode = HASH_SEARCH_CODE_EMPTY;
58805876 break;
5881 } else if (key == buckets[index].key) {
5877 } else if (old_key == key) {
58825878 exitCode = HASH_SEARCH_CODE_MATCH;
58835879 break;
58845880 } else
……@@ -5932,15 +5928,13 @@ int intintLCGQuadraticOpenCompactOpenMPHash_InnerInsertNoOverwrite(char
59325928 c) %
59335929 ((intintLCGQuadraticOpenCompactOpenMPHash_TableData
59345930 *) tableData)->numBuckets);
5935 if (((buckets[index].key ==
5936 HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key =
5937 key,
5938 HASH_BUCKET_STATUS_EMPTY)
5939 : buckets[index].key) ==
5940 HASH_BUCKET_STATUS_EMPTY) {
5931 int old_key =
5932 __sync_val_compare_and_swap(&buckets[index].key, -1,
5933 key);
5934 if (old_key == HASH_BUCKET_STATUS_EMPTY) {
59415935 exitCode = HASH_SEARCH_CODE_EMPTY;
59425936 break;
5943 } else if (key == buckets[index].key) {
5937 } else if (old_key == key) {
59445938 exitCode = HASH_SEARCH_CODE_MATCH;
59455939 break;
59465940 } else
HashFactory/Makefile.am +2 -1
……@@ -24,7 +24,8 @@ HashFactory.h: HashFactory.hp HashFactory.hm perfectHash.hm compactHash.hm
2424 ${CPREPROCESSOR} -CC -x c -imacros HashFactory.hm HashFactory.hp | ${INDENT} -linux -brf -o HashFactory.h
2525
2626HashFactory.c: HashFactory.cp HashFactory.cm HashFactory.cl perfectHash.cm compactHash.cm HashFactory.h
27 ${CPREPROCESSOR} -CC -x c -imacros HashFactory.cm HashFactory.cp | ${INDENT} -linux -brf | sed -e '/OMP_PRAGMA_PARALLEL_FOR/s/[[:space:]]*OMP_PRAGMA_PARALLEL_FOR;/#pragma omp parallel for/' > HashFactory.c
27 ${CPREPROCESSOR} -CC -x c -imacros HashFactory.cm HashFactory.cp | ${INDENT} -linux -brf | \
28 sed -e '/OMP_PRAGMA_PARALLEL_FOR/s/[[:space:]]*OMP_PRAGMA_PARALLEL_FOR;/#pragma omp parallel for/' > HashFactory.c
2829 ./embed_source.pl HashFactory.cl >> HashFactory.c
2930
3031HashFactory.cl: HashFactory.clp HashFactory.cm perfectHash.cm compactHash.cm
HashFactory/Makefile.in +2 -1
……@@ -770,7 +770,8 @@ HashFactory.h: HashFactory.hp HashFactory.hm perfectHash.hm compactHash.hm
770770 ${CPREPROCESSOR} -CC -x c -imacros HashFactory.hm HashFactory.hp | ${INDENT} -linux -brf -o HashFactory.h
771771
772772HashFactory.c: HashFactory.cp HashFactory.cm HashFactory.cl perfectHash.cm compactHash.cm HashFactory.h
773 ${CPREPROCESSOR} -CC -x c -imacros HashFactory.cm HashFactory.cp | ${INDENT} -linux -brf | sed -e '/OMP_PRAGMA_PARALLEL_FOR/s/[[:space:]]*OMP_PRAGMA_PARALLEL_FOR;/#pragma omp parallel for/' > HashFactory.c
773 ${CPREPROCESSOR} -CC -x c -imacros HashFactory.cm HashFactory.cp | ${INDENT} -linux -brf | \
774 sed -e '/OMP_PRAGMA_PARALLEL_FOR/s/[[:space:]]*OMP_PRAGMA_PARALLEL_FOR;/#pragma omp parallel for/' > HashFactory.c
774775 ./embed_source.pl HashFactory.cl >> HashFactory.c
775776
776777HashFactory.cl: HashFactory.clp HashFactory.cm perfectHash.cm compactHash.cm
HashFactory/compactHash.cm +23 -1
……@@ -91,6 +91,28 @@ unsigned int c = COMPRESS_FUNC(((CL_GLOBAL NAME##MODIFIER##Hash_TableData*)table
9191 }\
9292\
9393
94#define OPEN_COMPACT_OPENMP_HASH_SEARCH_EXP(NAME, MODIFIER, COMPRESS_FUNC, COMPRESS_FUNC_DATA, READ_KEY_EXP, CL_GLOBAL, JUMP_EXP, CYCLE_EXP) \
95 GLOBAL NAME##MODIFIER##Hash_TableData* mytableData = (GLOBAL NAME##MODIFIER##Hash_TableData*)tableData;\
96 NAME##Hash_CompressLCGData compressFuncData = mytableData->compressFuncData;\
97 unsigned int c = COMPRESS_FUNC(compressFuncData, key);\
98 unsigned long int iteration = 0;\
99 for(;;){\
100 index = JUMP_EXP;\
101 int old_key = __sync_val_compare_and_swap(&buckets[index].key, -1, key);\
102 if(old_key == HASH_BUCKET_STATUS_EMPTY){\
103 exitCode = HASH_SEARCH_CODE_EMPTY;\
104 break;\
105 }else if(old_key == key){\
106 exitCode = HASH_SEARCH_CODE_MATCH;\
107 break;\
108 }else if(CYCLE_EXP){\
109 exitCode = HASH_EXIT_CODE_CYCLE;\
110 break;\
111 }\
112 iteration++;\
113 }\
114\
115
94116#define OPEN_COMPACT_HASH_DEFINE(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, INIT_EXP, ...)\
95117 \
96118 COMPACT_HASH_DEFINE(NAME, MODIFIER##Open, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, OPEN_COMPACT_HASH_INIT_EXP(NAME, MODIFIER##OpenCompact, INIT_EXP), OPEN_COMPACT_HASH_SEARCH_EXP, ##__VA_ARGS__)\
……@@ -107,7 +129,7 @@ unsigned int c = COMPRESS_FUNC(((CL_GLOBAL NAME##MODIFIER##Hash_TableData*)table
107129
108130#define OPEN_COMPACT_OPENMP_HASH_DEFINE(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, INIT_EXP, ...)\
109131 \
110 COMPACT_OPENMP_HASH_DEFINE(NAME, MODIFIER##Open, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, OPEN_COMPACT_HASH_INIT_EXP(NAME, MODIFIER##OpenCompactOpenMP, INIT_EXP), OPEN_COMPACT_HASH_SEARCH_EXP, ##__VA_ARGS__)\
132 COMPACT_OPENMP_HASH_DEFINE(NAME, MODIFIER##Open, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, OPEN_COMPACT_HASH_INIT_EXP(NAME, MODIFIER##OpenCompactOpenMP, INIT_EXP), OPEN_COMPACT_OPENMP_HASH_SEARCH_EXP, ##__VA_ARGS__)\
111133
112134#define LINEAR_OPEN_COMPACT_HASH_JUMP_EXP(NAME, MODIFIER, B, CL_GLOBAL) ((B * iteration + c) % ((CL_GLOBAL NAME##MODIFIER##Hash_TableData*)tableData)->numBuckets)
113135