| … | … | @@ -4360,10 +4360,10 @@ const char *HashFactory_source = |
| 4360 | 4360 | "#define HASH_SEARCH_CODE_MISMATCH /**/ 1\n" |
| 4361 | 4361 | "#define HASH_SEARCH_CODE_EMPTY /*****/ 2\n" |
| 4362 | 4362 | "//\n" |
| 4363 | "#define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /**/ 8\n" | |
| 4364 | "#define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /**/ 4\n" | |
| 4365 | "#define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 2\n" | |
| 4366 | "#define IDENTITY_PERFECT_CL_HASH_ID /*******/ 1\n" | |
| 4363 | "#define IDENTITY_PERFECT_CL_HASH_ID /****************/ 16\n" | |
| 4364 | "#define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 32\n" | |
| 4365 | "#define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /*********/ 64\n" | |
| 4366 | "#define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /******/ 128\n" | |
| 4367 | 4367 | "//\n" |
| 4368 | 4368 | "#define HASH_BUCKET_STATUS_EMPTY /**/ -1\n" |
| 4369 | 4369 | "#define HASH_BUCKET_STATUS_FULL /***/ -2\n" |
| … | … | @@ -245,10 +245,10 @@ int intintHash_InsertSingleNoOverwrite(__global char *tableData, int key, |
| 245 | 245 | #define HASH_SEARCH_CODE_MISMATCH /**/ 1 |
| 246 | 246 | #define HASH_SEARCH_CODE_EMPTY /*****/ 2 |
| 247 | 247 | // |
| 248 | #define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /**/ 8 | |
| 249 | #define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /**/ 4 | |
| 250 | #define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 2 | |
| 251 | #define IDENTITY_PERFECT_CL_HASH_ID /*******/ 1 | |
| 248 | #define IDENTITY_PERFECT_CL_HASH_ID /****************/ 16 | |
| 249 | #define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 32 | |
| 250 | #define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /*********/ 64 | |
| 251 | #define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /******/ 128 | |
| 252 | 252 | // |
| 253 | 253 | #define HASH_BUCKET_STATUS_EMPTY /**/ -1 |
| 254 | 254 | #define HASH_BUCKET_STATUS_FULL /***/ -2 |
| … | … | @@ -219,10 +219,10 @@ DELAY(#define HASH_SEARCH_CODE_MATCH /*****/ 0) |
| 219 | 219 | DELAY(#define HASH_SEARCH_CODE_MISMATCH /**/ 1) |
| 220 | 220 | DELAY(#define HASH_SEARCH_CODE_EMPTY /*****/ 2) |
| 221 | 221 | // |
| 222 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /**/ 8) | |
| 223 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /**/ 4) | |
| 224 | DELAY(#define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 2) | |
| 225 | DELAY(#define IDENTITY_PERFECT_CL_HASH_ID /*******/ 1) | |
| 222 | DELAY(#define IDENTITY_PERFECT_CL_HASH_ID /****************/ 16) | |
| 223 | DELAY(#define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 32) | |
| 224 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /*********/ 64) | |
| 225 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /******/ 128) | |
| 226 | 226 | // |
| 227 | 227 | DELAY(#define HASH_BUCKET_STATUS_EMPTY /**/ -1) |
| 228 | 228 | DELAY(#define HASH_BUCKET_STATUS_FULL /***/ -2) |
| … | … | @@ -37,8 +37,8 @@ |
| 37 | 37 | */ |
| 38 | 38 | // |
| 39 | 39 | |
| 40 | #ifndef HASH_H | |
| 41 | #define HASH_H | |
| 40 | #ifndef HASHFACTORY_H | |
| 41 | #define HASHFACTORY_H | |
| 42 | 42 | // |
| 43 | 43 | #include <stdlib.h> |
| 44 | 44 | #include <stdio.h> |
| … | … | @@ -116,38 +116,50 @@ int clFinish(int command_queue); |
| 116 | 116 | #define HASH_SEARCH_CODE_MISMATCH /**/ 1 |
| 117 | 117 | #define HASH_SEARCH_CODE_EMPTY /*****/ 2 |
| 118 | 118 | // |
| 119 | #define HASH_NUM_HASHES /**/ 8 | |
| 120 | #define HASH_NUM_CL_HASHES /**/ 4 | |
| 119 | #define HASH_NUM_HASHES /********/ 12 | |
| 120 | #define HASH_NUM_C_HASHES /*******/ 4 | |
| 121 | #define HASH_NUM_CL_HASHES /******/ 4 | |
| 122 | #define HASH_NUM_OPENMP_HASHES /**/ 4 | |
| 121 | 123 | // |
| 122 | #define LCG_QUADRATIC_OPEN_COMPACT_HASH_ID 128 | |
| 123 | #define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID 8 | |
| 124 | #define LCG_LINEAR_OPEN_COMPACT_HASH_ID 64 | |
| 125 | #define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID 4 | |
| 126 | #define IDENTITY_SENTINEL_PERFECT_HASH_ID 32 | |
| 127 | #define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID 2 | |
| 128 | #define IDENTITY_PERFECT_HASH_ID 16 | |
| 129 | #define IDENTITY_PERFECT_CL_HASH_ID 1 | |
| 124 | #define IDENTITY_PERFECT_HASH_ID /*******************/ 1 | |
| 125 | #define IDENTITY_SENTINEL_PERFECT_HASH_ID /**********/ 2 | |
| 126 | #define LCG_LINEAR_OPEN_COMPACT_HASH_ID /************/ 4 | |
| 127 | #define LCG_QUADRATIC_OPEN_COMPACT_HASH_ID /*********/ 8 | |
| 130 | 128 | // |
| 129 | #define IDENTITY_PERFECT_CL_HASH_ID /****************/ 16 | |
| 130 | #define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 32 | |
| 131 | #define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /*********/ 64 | |
| 132 | #define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /******/ 128 | |
| 133 | // | |
| 134 | #define IDENTITY_PERFECT_OPENMP_HASH_ID /***********/ 256 | |
| 135 | #define IDENTITY_SENTINEL_PERFECT_OPENMP_HASH_ID /***/ 512 | |
| 136 | #define LCG_LINEAR_OPEN_COMPACT_OPENMP_HASH_ID /*****/ 1024 | |
| 137 | #define LCG_QUADRATIC_OPEN_COMPACT_OPENMP_HASH_ID /**/ 2048 | |
| 138 | // | |
| 139 | /** | |
| 140 | * HASH_ALL_C_HASHES hash table types that run on the host. | |
| 141 | */ | |
| 142 | #define HASH_ALL_C_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_HASH_ID) | |
| 131 | 143 | /** |
| 132 | 144 | * HASH_ALL_CL_HASHES hash table types that run in an OpenCL context. |
| 133 | 145 | */ |
| 134 | 146 | #define HASH_ALL_CL_HASHES (IDENTITY_PERFECT_CL_HASH_ID | IDENTITY_SENTINEL_PERFECT_CL_HASH_ID | LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID) |
| 135 | 147 | /** |
| 136 | * HASH_ALL_C_HASHES hash table types that run on the host. | |
| 148 | * HASH_ALL_OPENMP_HASHES hash table types that run with OpenMP. | |
| 137 | 149 | */ |
| 138 | #define HASH_ALL_C_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_HASH_ID) | |
| 150 | #define HASH_ALL_OPENMP_HASHES (IDENTITY_PERFECT_OPENMP_HASH_ID | IDENTITY_SENTINEL_PERFECT_OPENMP_HASH_ID | LCG_LINEAR_OPEN_COMPACT_OPENMP_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_OPENMP_HASH_ID) | |
| 139 | 151 | /** |
| 140 | 152 | * HASH_ALL_HASHES all hash table types. |
| 141 | 153 | */ |
| 142 | #define HASH_ALL_HASHES (HASH_ALL_CL_HASHES | HASH_ALL_C_HASHES) | |
| 154 | #define HASH_ALL_HASHES (HASH_ALL_C_HASHES | HASH_ALL_CL_HASHES | HASH_ALL_OPENMP_HASHES) | |
| 143 | 155 | /** |
| 144 | 156 | * HASH_NOSENTINEL_PERFECT_HASHES perfect hash table types that do not use a sentinel value to mark empty buckets. |
| 145 | 157 | */ |
| 146 | #define HASH_NOSENTINEL_PERFECT_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_PERFECT_CL_HASH_ID) | |
| 158 | #define HASH_NOSENTINEL_PERFECT_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_PERFECT_CL_HASH_ID | IDENTITY_PERFECT_OPENMP_HASH_ID) | |
| 147 | 159 | /** |
| 148 | 160 | * HASH_SENTINEL_PERFECT_HASHES perfect hash table types that use a sentinel value to mark empty buckets. |
| 149 | 161 | */ |
| 150 | #define HASH_SENTINEL_PERFECT_HASHES (IDENTITY_SENTINEL_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_CL_HASH_ID) | |
| 162 | #define HASH_SENTINEL_PERFECT_HASHES (IDENTITY_SENTINEL_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_CL_HASH_ID | IDENTITY_SENTINEL_PERFECT_OPENMP_HASH_ID) | |
| 151 | 163 | /** |
| 152 | 164 | * HASH_PERFECT_HASHES perfect hash table types. |
| 153 | 165 | */ |
| … | … | @@ -155,11 +167,11 @@ int clFinish(int command_queue); |
| 155 | 167 | /** |
| 156 | 168 | * HASH_QUADRATIC_COMPACT_HASHES compact hash table types that use a quadratic probe sequence. |
| 157 | 169 | */ |
| 158 | #define HASH_QUADRATIC_COMPACT_HASHES (LCG_QUADRATIC_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID) | |
| 170 | #define HASH_QUADRATIC_COMPACT_HASHES (LCG_QUADRATIC_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_OPENMP_HASH_ID) | |
| 159 | 171 | /** |
| 160 | 172 | * HASH_LINEAR_COMPACT_HASHES compact hash table types that use a linear probe sequence. |
| 161 | 173 | */ |
| 162 | #define HASH_LINEAR_COMPACT_HASHES (LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID) | |
| 174 | #define HASH_LINEAR_COMPACT_HASHES (LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID | LCG_LINEAR_OPEN_COMPACT_OPENMP_HASH_ID) | |
| 163 | 175 | /** |
| 164 | 176 | * HASH_COMPACT_HASHES compact hash table types that use a linear probe sequence. |
| 165 | 177 | */ |
| … | … | @@ -583,4 +595,8 @@ int intintLCGQuadraticOpenCompactCLHash_BufferInsertNoOverwrite(intintHash_Table |
| 583 | 595 | cl_mem |
| 584 | 596 | valuesBuffer); |
| 585 | 597 | |
| 586 | #endif | |
| 598 | #ifdef __cplusplus | |
| 599 | } | |
| 600 | #endif /* __cplusplus */ | |
| 601 | ||
| 602 | #endif /* HASHFACTORY_H */ |
| … | … | @@ -47,8 +47,8 @@ |
| 47 | 47 | #define DELAY(x) x |
| 48 | 48 | #define STRINGIFY_(x) #x |
| 49 | 49 | #define STRINGIFY(x) STRINGIFY_(x) |
| 50 | DELAY(#ifndef HASH_H) | |
| 51 | DELAY(#define HASH_H) | |
| 50 | DELAY(#ifndef HASHFACTORY_H) | |
| 51 | DELAY(#define HASHFACTORY_H) | |
| 52 | 52 | // |
| 53 | 53 | DELAY(#include <stdlib.h>) |
| 54 | 54 | DELAY(#include <stdio.h>) |
| … | … | @@ -118,38 +118,50 @@ DELAY(#define HASH_SEARCH_CODE_MATCH /*****/ 0) |
| 118 | 118 | DELAY(#define HASH_SEARCH_CODE_MISMATCH /**/ 1) |
| 119 | 119 | DELAY(#define HASH_SEARCH_CODE_EMPTY /*****/ 2) |
| 120 | 120 | // |
| 121 | DELAY(#define HASH_NUM_HASHES /**/ 8) | |
| 122 | DELAY(#define HASH_NUM_CL_HASHES /**/ 4) | |
| 121 | DELAY(#define HASH_NUM_HASHES /********/ 12) | |
| 122 | DELAY(#define HASH_NUM_C_HASHES /*******/ 4) | |
| 123 | DELAY(#define HASH_NUM_CL_HASHES /******/ 4) | |
| 124 | DELAY(#define HASH_NUM_OPENMP_HASHES /**/ 4) | |
| 123 | 125 | // |
| 124 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_HASH_ID 128) | |
| 125 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID 8) | |
| 126 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_HASH_ID 64) | |
| 127 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID 4) | |
| 128 | DELAY(#define IDENTITY_SENTINEL_PERFECT_HASH_ID 32) | |
| 129 | DELAY(#define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID 2) | |
| 130 | DELAY(#define IDENTITY_PERFECT_HASH_ID 16) | |
| 131 | DELAY(#define IDENTITY_PERFECT_CL_HASH_ID 1) | |
| 126 | DELAY(#define IDENTITY_PERFECT_HASH_ID /*******************/ 1) | |
| 127 | DELAY(#define IDENTITY_SENTINEL_PERFECT_HASH_ID /**********/ 2) | |
| 128 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_HASH_ID /************/ 4) | |
| 129 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_HASH_ID /*********/ 8) | |
| 132 | 130 | // |
| 131 | DELAY(#define IDENTITY_PERFECT_CL_HASH_ID /****************/ 16) | |
| 132 | DELAY(#define IDENTITY_SENTINEL_PERFECT_CL_HASH_ID /*******/ 32) | |
| 133 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID /*********/ 64) | |
| 134 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID /******/ 128) | |
| 135 | // | |
| 136 | DELAY(#define IDENTITY_PERFECT_OPENMP_HASH_ID /***********/ 256) | |
| 137 | DELAY(#define IDENTITY_SENTINEL_PERFECT_OPENMP_HASH_ID /***/ 512) | |
| 138 | DELAY(#define LCG_LINEAR_OPEN_COMPACT_OPENMP_HASH_ID /*****/ 1024) | |
| 139 | DELAY(#define LCG_QUADRATIC_OPEN_COMPACT_OPENMP_HASH_ID /**/ 2048) | |
| 140 | // | |
| 141 | /** | |
| 142 | * HASH_ALL_C_HASHES hash table types that run on the host. | |
| 143 | */ | |
| 144 | DELAY(#define HASH_ALL_C_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_HASH_ID)) | |
| 133 | 145 | /** |
| 134 | 146 | * HASH_ALL_CL_HASHES hash table types that run in an OpenCL context. |
| 135 | 147 | */ |
| 136 | 148 | DELAY(#define HASH_ALL_CL_HASHES (IDENTITY_PERFECT_CL_HASH_ID | IDENTITY_SENTINEL_PERFECT_CL_HASH_ID | LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID)) |
| 137 | 149 | /** |
| 138 | * HASH_ALL_C_HASHES hash table types that run on the host. | |
| 150 | * HASH_ALL_OPENMP_HASHES hash table types that run with OpenMP. | |
| 139 | 151 | */ |
| 140 | DELAY(#define HASH_ALL_C_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_HASH_ID)) | |
| 152 | DELAY(#define HASH_ALL_OPENMP_HASHES (IDENTITY_PERFECT_OPENMP_HASH_ID | IDENTITY_SENTINEL_PERFECT_OPENMP_HASH_ID | LCG_LINEAR_OPEN_COMPACT_OPENMP_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_OPENMP_HASH_ID)) | |
| 141 | 153 | /** |
| 142 | 154 | * HASH_ALL_HASHES all hash table types. |
| 143 | 155 | */ |
| 144 | DELAY(#define HASH_ALL_HASHES (HASH_ALL_CL_HASHES | HASH_ALL_C_HASHES)) | |
| 156 | DELAY(#define HASH_ALL_HASHES (HASH_ALL_C_HASHES | HASH_ALL_CL_HASHES | HASH_ALL_OPENMP_HASHES)) | |
| 145 | 157 | /** |
| 146 | 158 | * HASH_NOSENTINEL_PERFECT_HASHES perfect hash table types that do not use a sentinel value to mark empty buckets. |
| 147 | 159 | */ |
| 148 | DELAY(#define HASH_NOSENTINEL_PERFECT_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_PERFECT_CL_HASH_ID)) | |
| 160 | DELAY(#define HASH_NOSENTINEL_PERFECT_HASHES (IDENTITY_PERFECT_HASH_ID | IDENTITY_PERFECT_CL_HASH_ID | IDENTITY_PERFECT_OPENMP_HASH_ID)) | |
| 149 | 161 | /** |
| 150 | 162 | * HASH_SENTINEL_PERFECT_HASHES perfect hash table types that use a sentinel value to mark empty buckets. |
| 151 | 163 | */ |
| 152 | DELAY(#define HASH_SENTINEL_PERFECT_HASHES (IDENTITY_SENTINEL_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_CL_HASH_ID)) | |
| 164 | DELAY(#define HASH_SENTINEL_PERFECT_HASHES (IDENTITY_SENTINEL_PERFECT_HASH_ID | IDENTITY_SENTINEL_PERFECT_CL_HASH_ID | IDENTITY_SENTINEL_PERFECT_OPENMP_HASH_ID)) | |
| 153 | 165 | /** |
| 154 | 166 | * HASH_PERFECT_HASHES perfect hash table types. |
| 155 | 167 | */ |
| … | … | @@ -157,11 +169,11 @@ DELAY(#define HASH_PERFECT_HASHES (HASH_NOSENTINEL_PERFECT_HASHES | HASH_SENTIN |
| 157 | 169 | /** |
| 158 | 170 | * HASH_QUADRATIC_COMPACT_HASHES compact hash table types that use a quadratic probe sequence. |
| 159 | 171 | */ |
| 160 | DELAY(#define HASH_QUADRATIC_COMPACT_HASHES (LCG_QUADRATIC_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID)) | |
| 172 | DELAY(#define HASH_QUADRATIC_COMPACT_HASHES (LCG_QUADRATIC_OPEN_COMPACT_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_CL_HASH_ID | LCG_QUADRATIC_OPEN_COMPACT_OPENMP_HASH_ID)) | |
| 161 | 173 | /** |
| 162 | 174 | * HASH_LINEAR_COMPACT_HASHES compact hash table types that use a linear probe sequence. |
| 163 | 175 | */ |
| 164 | DELAY(#define HASH_LINEAR_COMPACT_HASHES (LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID)) | |
| 176 | DELAY(#define HASH_LINEAR_COMPACT_HASHES (LCG_LINEAR_OPEN_COMPACT_HASH_ID | LCG_LINEAR_OPEN_COMPACT_CL_HASH_ID | LCG_LINEAR_OPEN_COMPACT_OPENMP_HASH_ID)) | |
| 165 | 177 | /** |
| 166 | 178 | * HASH_COMPACT_HASHES compact hash table types that use a linear probe sequence. |
| 167 | 179 | */ |
| … | … | @@ -232,7 +244,8 @@ int largestProthPrimeUnder(int N); |
| 232 | 244 | |
| 233 | 245 | HASH_DECLARE(intint, int, int) |
| 234 | 246 | |
| 235 | #ifdef __cplusplus | |
| 247 | DELAY(#ifdef __cplusplus) | |
| 236 | 248 | } |
| 237 | #endif | |
| 238 | DELAY(#endif) | |
| 249 | DELAY(#endif /* __cplusplus */) | |
| 250 | ||
| 251 | DELAY(#endif /* HASHFACTORY_H */) |