52 template <
typename Key>
55 const uint64 h0 = m_hash1( key );
56 const uint64 h1 = m_hash2( key );
58 #if defined(__CUDA_ARCH__)
63 const uint64 r = (h0 + i * h1) % m_size;
68 or_op( &m_storage[word], (1u << bit) );
78 template <
typename Key>
81 const uint64 h0 = m_hash1( key );
82 const uint64 h1 = m_hash2( key );
84 #if defined(__CUDA_ARCH__)
89 const uint64 r = (h0 + i * h1) % m_size;
94 if ((m_storage[word] & (1u << bit)) == 0u)
114 m_storage( storage ),
123 template <
typename Key>
126 const uint64 h0 = m_hash1( key );
127 const uint64 h1 = m_hash2( key );
132 #if defined(__CUDA_ARCH__)
135 for (
uint64 i = 1; i <= m_k; ++i)
139 const uint32 word = r / WORD_SIZE;
140 const uint32 bit = r & (WORD_SIZE-1);
144 or_op( block, word, pattern );
146 or_op( &m_storage[block_idx], block );
154 template <
typename Key>
157 const uint64 h0 = m_hash1( key );
158 const uint64 h1 = m_hash2( key );
161 const block_type block = m_storage[block_idx];
163 #if defined(__CUDA_ARCH__)
166 for (
uint64 i = 1; i <= m_k; ++i)
170 const uint32 word = r / WORD_SIZE;
171 const uint32 bit = r & (WORD_SIZE-1);
175 if ((
comp( block, word ) & pattern) == 0u)