Fermat
src
hashmap.h
1
/*
2
* Fermat
3
*
4
* Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions are met:
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of the NVIDIA CORPORATION nor the
14
* names of its contributors may be used to endorse or promote products
15
* derived from this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
* DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
21
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
#pragma once
29
30
#include "buffers.h"
31
32
struct
DeviceHashTable
33
{
34
void
resize(
const
uint32 N)
35
{
36
m_keys.alloc(N);
37
m_slots.alloc(N);
38
m_unique.alloc(N);
39
m_size.alloc(1);
40
}
41
42
uint64 needed_bytes(
const
uint32 N)
const
43
{
44
return
(
sizeof
(uint64) * 2 +
sizeof
(uint32)) * N +
sizeof
(uint32);
45
}
46
47
void
clear()
48
{
49
// initialize the cache size
50
m_size.set(0, 0);
51
52
// initialize the cache keys
53
cudaMemset(m_keys.ptr(), 0xFFu, m_keys.sizeInBytes());
54
cudaMemset(m_slots.ptr(), 0xFFu, m_slots.sizeInBytes());
55
}
56
57
uint32 size()
const
58
{
59
return
m_size[0];
60
}
61
62
DomainBuffer<CUDA_BUFFER, uint64>
m_keys;
63
DomainBuffer<CUDA_BUFFER, uint64>
m_unique;
64
DomainBuffer<CUDA_BUFFER, uint32>
m_slots;
65
DomainBuffer<CUDA_BUFFER, uint32>
m_size;
66
};
DeviceHashTable
Definition:
hashmap.h:32
DomainBuffer< CUDA_BUFFER, uint64 >
Generated by
1.8.13