18#ifndef ITSTRACKINGGPU_LAUNCHGEOMETRY_H_
19#define ITSTRACKINGGPU_LAUNCHGEOMETRY_H_
24#if defined(GPUCA_GPUTYPE_VEGA)
27#elif defined(GPUCA_GPUTYPE_MI100)
30#elif defined(GPUCA_GPUTYPE_MI210)
33#elif defined(GPUCA_GPUTYPE_MI300)
36#elif defined(GPUCA_GPUTYPE_RDNA)
39#elif defined(GPUCA_GPUTYPE_BLACKWELL)
42#elif defined(GPUCA_GPUTYPE_HOPPER)
45#elif defined(GPUCA_GPUTYPE_ADA)
48#elif defined(GPUCA_GPUTYPE_AMPERE)
51#elif defined(GPUCA_GPUTYPE_TURING)
76 constexpr int min()
const
82 const int ab{
a <
b ?
a :
b};
83 const int cd{
c < d ?
c : d};
84 return ab < cd ? ab : cd;
88 constexpr int max()
const
94 const int ab{
a >
b ?
a :
b};
95 const int cd{
c > d ?
c : d};
96 return ab > cd ? ab : cd;
104 .computeLayerCells = minBlocks,
105 .computeLayerCellNeighbours = minBlocks,
106 .processNeighboursCellSeed = minBlocks,
107 .processNeighboursTrackSeed = minBlocks,
108 .fitTrackSeeds = minBlocks,
109 .fitTrackSeedsExtended = minBlocks,
110 .compileLookupTable = minBlocks};
113#if defined(GPUCA_GPUTYPE_VEGA)
118 .computeLayerCells = 3,
119 .computeLayerCellNeighbours = 3,
120 .processNeighboursCellSeed = 3,
121 .processNeighboursTrackSeed = 3,
123 .fitTrackSeedsExtended = 3,
124 .compileLookupTable = 1,
130 .computeLayerCells = 3,
131 .computeLayerCellNeighbours = 3,
132 .processNeighboursCellSeed = 3,
133 .processNeighboursTrackSeed = 3,
135 .fitTrackSeedsExtended = 3,
136 .compileLookupTable = 4,
139#elif defined(__HIPCC__) || defined(__HIP_PLATFORM_AMD__)
162 "an occupancy floor below one resident block is meaningless");
165 "the occupancy floor cannot exceed the blocks a CU can hold");
168 "every kernel must have at least one resident block per CU");
171 "resident blocks per CU cannot exceed what a CU can hold");
186static_assert(
residentCoversFloor(),
"a kernel's grid is narrower than the occupancy its __launch_bounds__ floor demands");
188static_assert(
GPUThreads %
WarpSize == 0,
"block size must be a whole number of warps/waves");
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
constexpr int MaxBlocksPerComputeUnit
constexpr KernelOccupancy MinBlocks
NVIDIA: unmeasured.
constexpr KernelOccupancy uniformOccupancy(int minBlocks)
Use the same occupancy floor for every kernel when no per-kernel measurements are available.
constexpr bool residentCoversFloor()
The grid must provide at least as many blocks per CU as the corresponding occupancy floor.
constexpr KernelOccupancy ResidentBlocks
constexpr int DefaultBlocksPerComputeUnit
constexpr int gridThreads(int residentBlocksPerComputeUnit)
Number of threads covered by a grid whose depth is residentBlocksPerComputeUnit blocks per CU.
constexpr int gridBlocks(int residentBlocksPerComputeUnit)
Number of blocks in a grid whose depth is residentBlocksPerComputeUnit blocks per CU.
constexpr int ComputeUnits
Minimum resident blocks per compute unit to request when no per-kernel measurement exists.
int processNeighboursTrackSeed
int processNeighboursCellSeed
int computeLayerCellNeighbours
int computeLayerTracklets
constexpr int max() const
Return the largest occupancy value in the table.
constexpr int min() const
Return the smallest occupancy value in the table.
int fitTrackSeedsExtended