1 #ifndef DASH__MAP__HASH_POLICY_H__INCLUDED 2 #define DASH__MAP__HASH_POLICY_H__INCLUDED 7 template <
typename Key>
13 typedef Key argument_type;
32 , _nunits(team.
size())
37 result_type operator()(
const argument_type& key)
const {
return _myid; }
40 size_type _nunits = 0;
49 HashNodeBase() noexcept
53 HashNodeBase(HashNodeBase* other) noexcept
63 HashNode* next()
const noexcept {
return static_cast<HashNode *
>(this->_next); }
70 struct prime_number_hash_policy {
71 size_t index_for_hash(
size_t hash,
size_t )
const 73 switch (prime_index) {
105 return hash % 127llu;
107 return hash % 151llu;
109 return hash % 197llu;
111 return hash % 251llu;
113 return hash % 313llu;
115 return hash % 397llu;
117 return hash % 499llu;
119 return hash % 631llu;
121 return hash % 797llu;
123 return hash % 1009llu;
125 return hash % 1259llu;
127 return hash % 1597llu;
129 return hash % 2011llu;
131 return hash % 2539llu;
133 return hash % 3203llu;
135 return hash % 4027llu;
137 return hash % 5087llu;
139 return hash % 6421llu;
141 return hash % 8089llu;
143 return hash % 10193llu;
145 return hash % 12853llu;
147 return hash % 16193llu;
149 return hash % 20399llu;
151 return hash % 25717llu;
153 return hash % 32401llu;
155 return hash % 40823llu;
157 return hash % 51437llu;
159 return hash % 64811llu;
161 return hash % 81649llu;
163 return hash % 102877llu;
165 return hash % 129607llu;
167 return hash % 163307llu;
169 return hash % 205759llu;
171 return hash % 259229llu;
173 return hash % 326617llu;
175 return hash % 411527llu;
177 return hash % 518509llu;
179 return hash % 653267llu;
181 return hash % 823117llu;
183 return hash % 1037059llu;
185 return hash % 1306601llu;
187 return hash % 1646237llu;
189 return hash % 2074129llu;
191 return hash % 2613229llu;
193 return hash % 3292489llu;
195 return hash % 4148279llu;
197 return hash % 5226491llu;
199 return hash % 6584983llu;
201 return hash % 8296553llu;
203 return hash % 10453007llu;
205 return hash % 13169977llu;
207 return hash % 16593127llu;
209 return hash % 20906033llu;
211 return hash % 26339969llu;
213 return hash % 33186281llu;
215 return hash % 41812097llu;
217 return hash % 52679969llu;
219 return hash % 66372617llu;
221 return hash % 83624237llu;
223 return hash % 105359939llu;
225 return hash % 132745199llu;
227 return hash % 167248483llu;
229 return hash % 210719881llu;
231 return hash % 265490441llu;
233 return hash % 334496971llu;
235 return hash % 421439783llu;
237 return hash % 530980861llu;
239 return hash % 668993977llu;
241 return hash % 842879579llu;
243 return hash % 1061961721llu;
245 return hash % 1337987929llu;
247 return hash % 1685759167llu;
249 return hash % 2123923447llu;
251 return hash % 2675975881llu;
253 return hash % 3371518343llu;
255 return hash % 4247846927llu;
257 return hash % 5351951779llu;
259 return hash % 6743036717llu;
261 return hash % 8495693897llu;
263 return hash % 10703903591llu;
265 return hash % 13486073473llu;
267 return hash % 16991387857llu;
269 return hash % 21407807219llu;
271 return hash % 26972146961llu;
273 return hash % 33982775741llu;
275 return hash % 42815614441llu;
277 return hash % 53944293929llu;
279 return hash % 67965551447llu;
281 return hash % 85631228929llu;
283 return hash % 107888587883llu;
285 return hash % 135931102921llu;
287 return hash % 171262457903llu;
289 return hash % 215777175787llu;
291 return hash % 271862205833llu;
293 return hash % 342524915839llu;
295 return hash % 431554351609llu;
297 return hash % 543724411781llu;
299 return hash % 685049831731llu;
301 return hash % 863108703229llu;
303 return hash % 1087448823553llu;
305 return hash % 1370099663459llu;
307 return hash % 1726217406467llu;
309 return hash % 2174897647073llu;
311 return hash % 2740199326961llu;
313 return hash % 3452434812973llu;
315 return hash % 4349795294267llu;
317 return hash % 5480398654009llu;
319 return hash % 6904869625999llu;
321 return hash % 8699590588571llu;
323 return hash % 10960797308051llu;
325 return hash % 13809739252051llu;
327 return hash % 17399181177241llu;
329 return hash % 21921594616111llu;
331 return hash % 27619478504183llu;
333 return hash % 34798362354533llu;
335 return hash % 43843189232363llu;
337 return hash % 55238957008387llu;
339 return hash % 69596724709081llu;
341 return hash % 87686378464759llu;
343 return hash % 110477914016779llu;
345 return hash % 139193449418173llu;
347 return hash % 175372756929481llu;
349 return hash % 220955828033581llu;
351 return hash % 278386898836457llu;
353 return hash % 350745513859007llu;
355 return hash % 441911656067171llu;
357 return hash % 556773797672909llu;
359 return hash % 701491027718027llu;
361 return hash % 883823312134381llu;
363 return hash % 1113547595345903llu;
365 return hash % 1402982055436147llu;
367 return hash % 1767646624268779llu;
369 return hash % 2227095190691797llu;
371 return hash % 2805964110872297llu;
373 return hash % 3535293248537579llu;
375 return hash % 4454190381383713llu;
377 return hash % 5611928221744609llu;
379 return hash % 7070586497075177llu;
381 return hash % 8908380762767489llu;
383 return hash % 11223856443489329llu;
385 return hash % 14141172994150357llu;
387 return hash % 17816761525534927llu;
389 return hash % 22447712886978529llu;
391 return hash % 28282345988300791llu;
393 return hash % 35633523051069991llu;
395 return hash % 44895425773957261llu;
397 return hash % 56564691976601587llu;
399 return hash % 71267046102139967llu;
401 return hash % 89790851547914507llu;
403 return hash % 113129383953203213llu;
405 return hash % 142534092204280003llu;
407 return hash % 179581703095829107llu;
409 return hash % 226258767906406483llu;
411 return hash % 285068184408560057llu;
413 return hash % 359163406191658253llu;
415 return hash % 452517535812813007llu;
417 return hash % 570136368817120201llu;
419 return hash % 718326812383316683llu;
421 return hash % 905035071625626043llu;
423 return hash % 1140272737634240411llu;
425 return hash % 1436653624766633509llu;
427 return hash % 1810070143251252131llu;
429 return hash % 2280545475268481167llu;
431 return hash % 2873307249533267101llu;
433 return hash % 3620140286502504283llu;
435 return hash % 4561090950536962147llu;
437 return hash % 5746614499066534157llu;
439 return hash % 7240280573005008577llu;
441 return hash % 9122181901073924329llu;
443 return hash % 11493228998133068689llu;
445 return hash % 14480561146010017169llu;
447 return hash % 18446744073709551557llu;
452 uint8_t next_size_over(
size_t&
size)
const 466 static constexpr
const size_t prime_list[] =
468 2llu, 3llu, 5llu, 7llu, 11llu, 13llu, 17llu, 23llu, 29llu, 37llu, 47llu,
469 59llu, 73llu, 97llu, 127llu, 151llu, 197llu, 251llu, 313llu, 397llu,
470 499llu, 631llu, 797llu, 1009llu, 1259llu, 1597llu, 2011llu, 2539llu,
471 3203llu, 4027llu, 5087llu, 6421llu, 8089llu, 10193llu, 12853llu, 16193llu,
472 20399llu, 25717llu, 32401llu, 40823llu, 51437llu, 64811llu, 81649llu,
473 102877llu, 129607llu, 163307llu, 205759llu, 259229llu, 326617llu,
474 411527llu, 518509llu, 653267llu, 823117llu, 1037059llu, 1306601llu,
475 1646237llu, 2074129llu, 2613229llu, 3292489llu, 4148279llu, 5226491llu,
476 6584983llu, 8296553llu, 10453007llu, 13169977llu, 16593127llu, 20906033llu,
477 26339969llu, 33186281llu, 41812097llu, 52679969llu, 66372617llu,
478 83624237llu, 105359939llu, 132745199llu, 167248483llu, 210719881llu,
479 265490441llu, 334496971llu, 421439783llu, 530980861llu, 668993977llu,
480 842879579llu, 1061961721llu, 1337987929llu, 1685759167llu, 2123923447llu,
481 2675975881llu, 3371518343llu, 4247846927llu, 5351951779llu, 6743036717llu,
482 8495693897llu, 10703903591llu, 13486073473llu, 16991387857llu,
483 21407807219llu, 26972146961llu, 33982775741llu, 42815614441llu,
484 53944293929llu, 67965551447llu, 85631228929llu, 107888587883llu,
485 135931102921llu, 171262457903llu, 215777175787llu, 271862205833llu,
486 342524915839llu, 431554351609llu, 543724411781llu, 685049831731llu,
487 863108703229llu, 1087448823553llu, 1370099663459llu, 1726217406467llu,
488 2174897647073llu, 2740199326961llu, 3452434812973llu, 4349795294267llu,
489 5480398654009llu, 6904869625999llu, 8699590588571llu, 10960797308051llu,
490 13809739252051llu, 17399181177241llu, 21921594616111llu, 27619478504183llu,
491 34798362354533llu, 43843189232363llu, 55238957008387llu, 69596724709081llu,
492 87686378464759llu, 110477914016779llu, 139193449418173llu,
493 175372756929481llu, 220955828033581llu, 278386898836457llu,
494 350745513859007llu, 441911656067171llu, 556773797672909llu,
495 701491027718027llu, 883823312134381llu, 1113547595345903llu,
496 1402982055436147llu, 1767646624268779llu, 2227095190691797llu,
497 2805964110872297llu, 3535293248537579llu, 4454190381383713llu,
498 5611928221744609llu, 7070586497075177llu, 8908380762767489llu,
499 11223856443489329llu, 14141172994150357llu, 17816761525534927llu,
500 22447712886978529llu, 28282345988300791llu, 35633523051069991llu,
501 44895425773957261llu, 56564691976601587llu, 71267046102139967llu,
502 89790851547914507llu, 113129383953203213llu, 142534092204280003llu,
503 179581703095829107llu, 226258767906406483llu, 285068184408560057llu,
504 359163406191658253llu, 452517535812813007llu, 570136368817120201llu,
505 718326812383316683llu, 905035071625626043llu, 1140272737634240411llu,
506 1436653624766633509llu, 1810070143251252131llu, 2280545475268481167llu,
507 2873307249533267101llu, 3620140286502504283llu, 4561090950536962147llu,
508 5746614499066534157llu, 7240280573005008577llu, 9122181901073924329llu,
509 11493228998133068689llu, 14480561146010017169llu, 18446744073709551557llu
512 const size_t* found = std::lower_bound(
std::begin(prime_list),
515 return static_cast<uint8_t
>(1 + found - prime_list);
519 uint8_t prime_index = 0;
global_unit_t myid()
Shortcut to query the global unit ID of the calling unit.
internal::default_unsigned_index default_size_t
Unsigned integer type used as default for size values.
size_t size()
Return the number of units in the global team.
constexpr auto end(RangeType &&range) -> decltype(std::forward< RangeType >(range).end())
This class is a simple memory pool which holds allocates elements of size ValueType.
constexpr auto begin(RangeType &&range) -> decltype(std::forward< RangeType >(range).begin())
A Team instance specifies a subset of all available units.
HashLocal(dash::Team &team)
Constructor.
struct dash::unit_id< dash::local_unit, dart_team_unit_t > team_unit_t
Unit ID to use for team-local IDs.
#define DART_UNDEFINED_UNIT_ID
Undefined unit ID.
HashLocal()
Default constructor.