13#include "../global/global.h"
14#include "../global/global_cuda.h"
15#include "../utils/gpu.hpp"
17namespace cuda_utilities
29inline __host__ __device__
void compute3DIndices(
int const &
id,
int const &nx,
int const &ny,
int &xid,
int &yid,
33 yid = (
id - zid * nx * ny) / nx;
34 xid =
id - zid * nx * ny - yid * nx;
47inline __host__ __device__
int compute1DIndex(
int const &xid,
int const &yid,
int const &zid,
int const &nx,
50 return xid + yid * nx + zid * nx * ny;
53inline __host__ __device__
void Get_Real_Indices(
int const &n_ghost,
int const &nx,
int const &ny,
int const &nz,
54 int &is,
int &ie,
int &js,
int &je,
int &ks,
int &ke)
80inline void initGpuMemory(Real *ptr,
size_t N) { GPU_Error_Check(cudaMemset(ptr, 0, N)); }
107 cudaFuncAttributes kernel_attrs{};
108 GPU_Error_Check(cudaFuncGetAttributes(&kernel_attrs,
reinterpret_cast<const void *
>(&kernel)));
111 cudaOccupancyMaxPotentialBlockSize(&numBlocks, &threadsPerBlock, kernel, 0, kernel_attrs.maxThreadsPerBlock);
113 if (numElements > 0) {
117 threadsPerBlock = (threadsPerBlock == 0) ? TPB : threadsPerBlock;
120 numBlocks = (numElements + threadsPerBlock - 1) / threadsPerBlock;
146void Print_GPU_Memory_Usage(std::string
const &additional_text =
"");
Struct to determine the optimal number of blocks and threads per block to use when launching a kernel...
Definition cuda_utilities.h:91
int get_numBlocks() const
Getter for numBlocks.
Definition cuda_utilities.h:130
AutomaticLaunchParams(T &kernel, size_t numElements=0)
Construct a new AutomaticLaunchParams object. By default it generates values of numBlocks and threads...
Definition cuda_utilities.h:104
~AutomaticLaunchParams()=default
Defaulted Destructor.
int get_threadsPerBlock() const
Getter for threadsPerBlock.
Definition cuda_utilities.h:128