Fermat
Public Methods | Public Members | List of all members
cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY > Struct Template Reference

Detailed description

template<typename KeyT, typename HashT, KeyT INVALID_KEY = 0xFFFFFFFF>
struct cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >

This class implements a device-side Hash Set, 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 HashSet, the array of hash slots has to be initialized to INVALID_KEY.

The class provides two methods:

- HashSet::insert
- HashSet::has

It's important to notice that calls to the two methods cannot be mixed without interposing a global synchronization between them.

#include <hash.h>

Inheritance diagram for cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >:
cugar::cuda::BlockHashSet< KeyT, HashT, CTA_SIZE, TABLE_SIZE, INVALID_KEY >

Public Methods

CUGAR_DEVICE HashSet ()
 
CUGAR_DEVICE HashSet (const uint32 _table_size, KeyT *_hash, KeyT *_unique, uint32 *_count)
 
CUGAR_DEVICE void insert (const KeyT key, const HashT hash_code)
 
CUGAR_DEVICE uint32 size () const
 
CUGAR_DEVICE KeyT get_unique (const uint32 i) const
 

Public Members

uint32 table_size
 
KeyT * hash
 
KeyT * unique
 
uint32 * count
 

Constructor & Destructor Documentation

◆ HashSet() [1/2]

template<typename KeyT , typename HashT , KeyT INVALID_KEY = 0xFFFFFFFF>
CUGAR_DEVICE cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >::HashSet ( )
inline

empty constructor

◆ HashSet() [2/2]

template<typename KeyT , typename HashT , KeyT INVALID_KEY = 0xFFFFFFFF>
CUGAR_DEVICE cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >::HashSet ( const uint32  _table_size,
KeyT *  _hash,
KeyT *  _unique,
uint32 *  _count 
)
inline

HashSet constructor

Parameters
_table_sizethe size of the hash table (needs to be a power of 2)
_hasha pointer to the array of _table_size hashed keys - needs to be initialized to INVALID_KEY before first use
_uniquea pointer to the array where inserted entries will be stored - needs to be appropriately sized to contain all unique entries
_counta pointer to a single counter, used to keep track of how many unique entries have been inserted

Member Function Documentation

◆ get_unique()

template<typename KeyT , typename HashT , KeyT INVALID_KEY = 0xFFFFFFFF>
CUGAR_DEVICE KeyT cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >::get_unique ( const uint32  i) const
inline

return the i-th unique element in the set

◆ insert()

template<typename KeyT , typename HashT , KeyT INVALID_KEY = 0xFFFFFFFF>
CUGAR_DEVICE void cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >::insert ( const KeyT  key,
const HashT  hash_code 
)
inline

insert an element with its hashing value

Parameters
keythe element to insert
hash_codethe hashing value

◆ size()

template<typename KeyT , typename HashT , KeyT INVALID_KEY = 0xFFFFFFFF>
CUGAR_DEVICE uint32 cugar::cuda::HashSet< KeyT, HashT, INVALID_KEY >::size ( ) const
inline

return the size of the hash set


The documentation for this struct was generated from the following file: