Fermat
|
This class implements a device-side Hash Map, allowing arbitrary threads from potentially different CTAs of a cuda kernel to add new entries at the same time.
The constructor of the class accepts pointers to the arrays representing the underlying data structure:
Before starting to use the SynchronousHashMap, the array of hash slots has to be initialized to INVALID_KEY.
The difference between this class and the HashMap is that this class allows to call both insert() and find() at the same time, without interposing a global synchronization between them: the price is higher overhead (due to the need to use volatile writes and add memory fences).
#include <hash.h>
Public Types | |
typedef vector_type< KeyT, 2 > | pair_vector |
typedef pair_vector::type | pair_type |
Public Methods | |
CUGAR_HOST_DEVICE | SyncFreeDoubleKeyHashMap () |
CUGAR_HOST_DEVICE | SyncFreeDoubleKeyHashMap (const uint32 _table_size, KeyT *_hash1, KeyT *_hash2, KeyT *_unique, uint32 *_slots, uint32 *_count) |
CUGAR_DEVICE void | insert (const KeyT key1, const KeyT key2, const HashT hash_code) |
CUGAR_DEVICE bool | insert (const KeyT key1, const KeyT key2, const HashT hash_code, uint32 *pos) |
CUGAR_DEVICE uint32 | find (const KeyT key1, const KeyT key2, const HashT hash_code) |
uint32 | size () const |
pair_type | get_unique (const uint32 i) const |
Public Members | |
KeyT * | hash1 |
KeyT * | hash2 |
volatile KeyT * | unique |
volatile uint32 * | slots |
uint32 * | count |
uint32 | table_size |
Static Public Members | |
static const uint32 | BUCKET_SIZE = 8 |
|
inline |
constructor
|
inline |
constructor
_table_size | the size of the hash table (needs to be a power of 2) |
_hash1 | a pointer to the array of _table_size hashing slots - needs to be initialized to INVALID_KEY before first use |
_hash2 | a pointer to the array of _table_size hashing slots - needs to be initialized to INVALID_KEY before first use |
_unique | a pointer to the array where inserted entries will be stored - needs to be appropriately sized to contain all unique entries |
_slots | a pointer to an array of _table_size entries keeping track of the unique position where each inserted key has been mapped |
_count | a pointer to a single counter, used to keep track of how many unique entries have been inserted |
|
inline |
find the unique slot associated to an inserted key
|
inline |
return the i-th unique element in the set
|
inline |
insert an element with its hashing value
key | the element to insert |
hash_code | the hashing value |
|
inline |
insert an element with its hashing value and immediately get the unique slot where it's been inserted
key | the element to insert |
hash_code | the hashing value |
|
inline |
return the size of the hash set