NAMD
CudaRecord.h
Go to the documentation of this file.
1
#ifndef CUDARECORD_H
2
#define CUDARECORD_H
3
4
#ifdef NAMD_CUDA
5
#include <cuda.h>
6
#include <cuda_runtime.h>
7
#endif
8
#ifdef NAMD_HIP
9
#include <hip/hip_runtime.h>
10
#endif
11
12
#include "
HipDefines.h
"
13
14
#if defined(NAMD_CUDA) || defined(NAMD_HIP)
15
struct
PatchRecord
{
16
int
atomStart
;
17
int
numAtoms
;
18
int
patchID
;
19
};
20
21
struct
CudaPeerRecord
{
22
int
deviceIndex
;
23
int
patchIndex
;
24
int
bufferOffset
;
25
int
bufferOffsetNBPad
;
// Buffer offset with nonbonded padding
26
};
27
// 16 bytes
28
29
// Cuda Local Record should be 128 bytes so it can be loaded in a single cache line
30
// inline_peers are used to avoid another level of redirection. However, we'll maintain
31
// the array of CudaPeerRecords anyways to handle cases when a HomePatch has more than
32
// 6 proxies. David Clark doesn't think this will happen, but a patch can technically have
33
// 13 proxies given we are only looking 1 patch away and taking adcantage of upstream/downstream
34
// logic
35
struct
CudaLocalRecord
{
36
static
constexpr
int
num_inline_peer
= 5;
37
int
patchID
;
38
int
bufferOffset
;
39
int
bufferOffsetNBPad
;
// Buffer offset with nonbonded padding
40
int
numAtoms
;
41
int
numAtomsNBPad
;
// Atom count including the nonbonded padding
42
int
isProxy
;
// Indicates if this local record represent a proxy or home patch
43
int
numPeerRecord
;
// The number of CudaPeerRecords corresponding to this patch
44
int
peerRecordStartIndex
;
45
// These four fields are used during GPU atom migration to keep track
46
int
bufferOffsetOld
;
47
int
numMigrationGroups
;
48
int
numAtomsNew
;
49
int
numAtomsLocal
;
50
// These are used to pad the CudaLocalRecord to 128 bytes and avoid a global memory lookup
51
CudaPeerRecord
inline_peers
[
num_inline_peer
];
52
};
53
54
static_assert(
sizeof
(
CudaLocalRecord
) == 128,
"CudaLocalRecord must be 128 bytes"
);
55
56
#endif // NAMD_CUDA
57
58
struct
CudaAtom
{
59
float
x
,
y
,
z
,
q
;
60
};
61
62
struct
CudaForce
{
63
float
x
,
y
,
z
;
64
};
65
66
#endif //CUDARECORD_H
CudaLocalRecord::numPeerRecord
int numPeerRecord
Definition:
CudaRecord.h:43
CudaAtom::q
float q
Definition:
CudaRecord.h:59
PatchRecord::numAtoms
int numAtoms
Definition:
CudaRecord.h:17
HipDefines.h
CudaAtom::z
float z
Definition:
CudaRecord.h:59
CudaLocalRecord::peerRecordStartIndex
int peerRecordStartIndex
Definition:
CudaRecord.h:44
CudaForce::x
float x
Definition:
CudaRecord.h:63
CudaForce
Definition:
CudaRecord.h:62
CudaPeerRecord::patchIndex
int patchIndex
Definition:
CudaRecord.h:23
CudaAtom::x
float x
Definition:
CudaRecord.h:59
PatchRecord
Definition:
CudaRecord.h:15
CudaLocalRecord
Definition:
CudaRecord.h:35
CudaLocalRecord::bufferOffsetOld
int bufferOffsetOld
Definition:
CudaRecord.h:46
CudaLocalRecord::numAtomsLocal
int numAtomsLocal
Definition:
CudaRecord.h:49
PatchRecord::patchID
int patchID
Definition:
CudaRecord.h:18
CudaLocalRecord::numAtoms
int numAtoms
Definition:
CudaRecord.h:40
CudaLocalRecord::numAtomsNew
int numAtomsNew
Definition:
CudaRecord.h:48
CudaLocalRecord::bufferOffset
int bufferOffset
Definition:
CudaRecord.h:38
CudaForce::z
float z
Definition:
CudaRecord.h:63
CudaAtom
Definition:
CudaRecord.h:58
CudaPeerRecord::bufferOffsetNBPad
int bufferOffsetNBPad
Definition:
CudaRecord.h:25
CudaLocalRecord::numMigrationGroups
int numMigrationGroups
Definition:
CudaRecord.h:47
CudaPeerRecord
Definition:
CudaRecord.h:21
CudaLocalRecord::numAtomsNBPad
int numAtomsNBPad
Definition:
CudaRecord.h:41
CudaAtom::y
float y
Definition:
CudaRecord.h:59
CudaLocalRecord::num_inline_peer
static constexpr int num_inline_peer
Definition:
CudaRecord.h:36
CudaLocalRecord::inline_peers
CudaPeerRecord inline_peers[num_inline_peer]
Definition:
CudaRecord.h:51
CudaLocalRecord::bufferOffsetNBPad
int bufferOffsetNBPad
Definition:
CudaRecord.h:39
CudaForce::y
float y
Definition:
CudaRecord.h:63
CudaLocalRecord::patchID
int patchID
Definition:
CudaRecord.h:37
CudaPeerRecord::deviceIndex
int deviceIndex
Definition:
CudaRecord.h:22
CudaPeerRecord::bufferOffset
int bufferOffset
Definition:
CudaRecord.h:24
PatchRecord::atomStart
int atomStart
Definition:
CudaRecord.h:16
CudaLocalRecord::isProxy
int isProxy
Definition:
CudaRecord.h:42
Generated by
1.8.14