1 #include <thrust/device_vector.h>
3 #include <cuda/std/utility>
8 namespace set_kernels {
10 template<
int block_size,
typename map_t,
typename K>
11 __global__
void remove_(map_t map,
const K* keys,
bool* output,
size_t size) {
13 int tidx = threadIdx.x;
14 int bidx = blockIdx.x;
17 if(tidx + bidx * block_size < size) {
18 key = keys[tidx + bidx * block_size];
21 bool res = map.remove(key, tidx + bidx * block_size < size);
23 if(tidx + bidx * block_size < size) {
24 output[tidx + bidx * block_size] = res;
28 template<
int block_size,
typename map_t,
typename K>
29 __global__
void contains_(map_t map,
const K* keys,
bool* output,
size_t size) {
31 int tidx = threadIdx.x;
32 int bidx = blockIdx.x;
35 if(tidx + bidx * block_size < size) {
36 key = keys[tidx + bidx * block_size];
39 bool res = map.contains(key, tidx + bidx * block_size < size);
41 if(tidx + bidx * block_size < size) {
42 output[tidx + bidx * block_size] = res;
47 template<
int block_size,
typename map_t,
typename K>
48 __global__
void insert_(map_t map,
const K* keys,
bool* output,
size_t size) {
50 int tidx = threadIdx.x;
51 int bidx = blockIdx.x;
54 if(tidx + bidx * block_size < size) {
55 key = keys[tidx + bidx * block_size];
58 bool res = map.insert(key, tidx + bidx * block_size < size);
59 if(tidx + bidx * block_size < size) {
60 output[tidx + bidx * block_size] = res;