STORMM Source Documentation
Loading...
Searching...
No Matches
static_exclusionmask.h
1// -*-c++-*-
2#ifndef STORMM_SIMPLE_EXCLUSIONMASK_H
3#define STORMM_SIMPLE_EXCLUSIONMASK_H
4
5#include <vector>
6#include "copyright.h"
7#include "Accelerator/hybrid.h"
8#include "DataTypes/common_types.h"
9#include "Topology/atomgraph.h"
10
11namespace stormm {
12namespace energy {
13
14using card::Hybrid;
15using card::HybridTargetLevel;
16using topology::AtomGraph;
17
20constexpr int max_supertile_count = 46300;
21
23constexpr int max_unique_tiles = 67108864;
24
26constexpr int supertile_length = 256;
27
30constexpr int tile_length = 16;
31constexpr int half_tile_length = tile_length / 2;
32constexpr int three_halves_tile_length = (tile_length * 3) / 2;
33constexpr int tile_length_bits_mask = tile_length - 1;
34constexpr int tile_length_bits = 4;
36
38constexpr int tile_lengths_per_supertile = supertile_length / tile_length;
39
41constexpr int tiles_per_supertile = tile_lengths_per_supertile * tile_lengths_per_supertile;
42
46
48 StaticExclusionMaskReader(int natom_in, int supertile_stride_count_in,
49 const int* supertile_map_idx_in, const int* tile_map_idx_in,
50 const uint* mask_data_in);
51
52 const int natom;
54 const int* supertile_map_idx;
57 const int* tile_map_idx;
60 const uint* mask_data;
61};
62
82public:
83
89 StaticExclusionMask(const AtomGraph *ag_in = nullptr);
90 StaticExclusionMask(const AtomGraph &ag_in);
92
96 StaticExclusionMask(const StaticExclusionMask &original) = default;
97 StaticExclusionMask(StaticExclusionMask &&original) = default;
98 StaticExclusionMask& operator=(const StaticExclusionMask &other) = default;
99 StaticExclusionMask& operator=(StaticExclusionMask &&other) = default;
101
103 int getAtomCount() const;
104
107 int getSuperTileStrideCount() const;
108
111 int getTileStrideCount() const;
112
114 int getUniqueSuperTileCount() const;
115
125 int getUniqueTileCount() const;
126 int getUniqueTileCount(int supertile_i_index, int supertile_j_index) const;
128
137 std::vector<uint> getTileExclusions(int supertile_i_index, int supertile_j_index,
138 int tile_i_index, int tile_j_index) const;
139
141 const AtomGraph* getTopologyPointer() const;
142
144 const StaticExclusionMaskReader data(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
145
147 const StaticExclusionMask* getSelfPointer() const;
148
149#ifdef STORMM_USE_HPC
151 void upload();
152
154 void download();
155#endif
156
161 bool testExclusion(int atom_i, int atom_j) const;
162
163private:
164 int atom_count;
165 int supertile_stride_count;
167 int tile_stride_count;
169 int unique_supertile_count;
172 int unique_tile_count;
180
181 // A collection of the mask groups, arranged in a concatenated fashion
182 Hybrid<uint> all_masks;
186 Hybrid<int> supertile_map_indices;
190 Hybrid<int> tile_map_indices;
193 AtomGraph *ag_pointer;
194};
195
196} // namespace energy
197} // namespace stormm
198
199#endif
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
StaticExclusionMask(const StaticExclusionMask &original)=default
The default copy and move constructors as well as the copy assignment operator will suffice for this ...
int getUniqueTileCount() const
Get the total number of unique tiles within a given super-tile.
Definition static_exclusionmask.cpp:297
int getAtomCount() const
Get the total atom count.
Definition static_exclusionmask.cpp:277
const StaticExclusionMaskReader data(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the abstract for this exclusion mask object.
Definition static_exclusionmask.cpp:342
bool testExclusion(int atom_i, int atom_j) const
Test whether some atom pair is an exclusion.
Definition static_exclusionmask.cpp:370
int getUniqueSuperTileCount() const
Get the total number of unique mask super-tiles.
Definition static_exclusionmask.cpp:292
StaticExclusionMask(const AtomGraph *ag_in=nullptr)
The constructor requires a topology, which will have lists of exclusions.
Definition static_exclusionmask.cpp:21
const StaticExclusionMask * getSelfPointer() const
Get a pointer ot the object itself (useful when passing the object by const reference)
Definition static_exclusionmask.cpp:349
std::vector< uint > getTileExclusions(int supertile_i_index, int supertile_j_index, int tile_i_index, int tile_j_index) const
Get the exclusion masks for sending atoms in a particular tile.
Definition static_exclusionmask.cpp:327
const AtomGraph * getTopologyPointer() const
Return a pointer to the topology that built this exclusion mask.
Definition static_exclusionmask.cpp:337
int getSuperTileStrideCount() const
Get the number of supertile strides that the system contains (how many groups of up to 256 atoms will...
Definition static_exclusionmask.cpp:282
int getTileStrideCount() const
Get the number of supertile strides that the system contains (how many groups of up to 16 atoms will ...
Definition static_exclusionmask.cpp:287
A struct to hold information relating to an Amber topology. This struct's member functions are limite...
Definition atomgraph.h:50
The abstract for a StaticExclusionMask object, read-only due to the const-ness of the data() member f...
Definition static_exclusionmask.h:45
const int * tile_map_idx
Definition static_exclusionmask.h:57
StaticExclusionMaskReader(int natom_in, int supertile_stride_count_in, const int *supertile_map_idx_in, const int *tile_map_idx_in, const uint *mask_data_in)
Constructor works as any other abstract, taking a list of relevant constants and pointers.
Definition static_exclusionmask.cpp:11
const int supertile_stride_count
Number of supertiles in the system.
Definition static_exclusionmask.h:53
const int * supertile_map_idx
Definition static_exclusionmask.h:54
const uint * mask_data
The actual exclusion mask data.
Definition static_exclusionmask.h:60
const int natom
Number of atoms in the system.
Definition static_exclusionmask.h:52