18 #include "cuda_runtime.h" 26 #define CUDA_CHECK_IF_DEBUG 28 #define CUDA_CHECK_IF_DEBUG { \ 31 CUDA_SAFE_CALL(cudaGetLastError()); \ 32 CUDA_SAFE_CALL(cudaDeviceSynchronize()); \ 33 CUDA_SAFE_CALL(cudaGetLastError()); \ 39 size_t numberOfYCells,
size_t numberOfZCells) {
40 const size_t blockSize = 1024;
41 return dim3(blockSize, numberOfYCells > 1 ? blockSize : 1,
42 numberOfZCells > 1 ? blockSize : 1);
46 size_t numberOfYCells,
size_t numberOfZCells, dim3 blockDimensions) {
47 return dim3((numberOfXCells + blockDimensions.x - 1) / blockDimensions.x,
48 (numberOfYCells + blockDimensions.y - 1) / blockDimensions.y,
49 (numberOfZCells + blockDimensions.z - 1) / blockDimensions.z);
59 size_t numberOfXCells,
size_t numberOfYCells,
60 size_t numberOfZCells,
ivec3 directionVector) {
61 const int index = threadIdx.
x + blockIdx.x * blockDim.x;
63 const size_t xInternalFormat = index % numberOfXCells;
64 const size_t yInternalFormat = (index / numberOfXCells) % numberOfYCells;
65 const size_t zInternalFormat = (index) / (numberOfXCells * numberOfYCells);
67 if (xInternalFormat >= numberOfXCells || yInternalFormat >= numberOfYCells
68 || zInternalFormat >= numberOfZCells) {
72 const int x = xInternalFormat + directionVector[0];
73 const int y = yInternalFormat + directionVector[1];
74 const int z = zInternalFormat + directionVector[2];
83 const ivec3 numberOfCellsPerDimension = end - start;
85 const size_t totalNumberOfCells = size_t(numberOfCellsPerDimension.
x) *
86 size_t(numberOfCellsPerDimension.
y) *
87 size_t(numberOfCellsPerDimension.
z);
89 const int gridSize = (totalNumberOfCells + blockSize - 1 ) / blockSize;
91 return std::make_tuple(gridSize, numberOfCellsPerDimension);
T z
Definition: vec3.hpp:28
#define __device__
Definition: types.hpp:45
std::tuple< int, ivec3 > makeKernelLaunchParameters(ivec3 start, ivec3 end, size_t blockSize)
Gets teh kernel launch paramemters.
Definition: cuda_utils.hpp:81
ivec3 __device__ getCoordinates(dim3 threadIdx, dim3 blockIdx, dim3 blockDim, size_t numberOfXCells, size_t numberOfYCells, size_t numberOfZCells, ivec3 directionVector)
Definition: cuda_utils.hpp:57
T y
Definition: vec3.hpp:27
dim3 calculateGridDimensions(size_t numberOfXCells, size_t numberOfYCells, size_t numberOfZCells, dim3 blockDimensions)
Definition: cuda_utils.hpp:45
Various utility functions to implement the tecno flux.
Definition: types.hpp:30
dim3 calculateBlockDimensions(size_t numberOfXCells, size_t numberOfYCells, size_t numberOfZCells)
Definition: cuda_utils.hpp:38
T x
Definition: vec3.hpp:26