milupHPC documentation
  • include
  • cuda_utils
cuda_utilities.cuh
Go to the documentation of this file.
1
18#ifndef MILUPHPC_CUDAUTILITIES_CUH
19#define MILUPHPC_CUDAUTILITIES_CUH
20
21#include <iostream>
22#include <cuda.h>
23#include <cuda_runtime.h>
24#include "../parameter.h"
25#include <assert.h>
26
27#ifdef __CUDACC__
28#define CUDA_CALLABLE_MEMBER __host__ __device__
29#else
30#define CUDA_CALLABLE_MEMBER
31#endif
32
36#define safeCudaCall(call) checkCudaCall(call, #call, __FILE__, __LINE__)
37
41#define gpuErrorcheck(ans) { gpuAssert((ans), __FILE__, __LINE__); }
42
47#if SAFETY_LEVEL == 0
48#define cudaAssert(...)
49#elif SAFETY_LEVEL == 1
50#define cudaAssert(...) { \
51 printf(__VA_ARGS__); \
52}
53#elif SAFETY_LEVEL == 2
54#define cudaAssert(...) { \
55 printf(__VA_ARGS__); \
56 assert(0); \
57}
58#elif SAFETY_LEVEL == 3
59#define cudaAssert(...) { \
60 printf(__VA_ARGS__); \
61 assert(0); \
62}
63#else
64#define cudaAssert(...)
65#endif
66
70#define cudaTerminate(...) { \
71 printf(__VA_ARGS__); \
72 assert(0); \
73}
74
75#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600
76#else
77__device__ double atomicAdd(double* address, double val);
78#endif
79
88void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true);
89
98void checkCudaCall(cudaError_t command, const char * commandName, const char * fileName, int line);
99
100namespace CudaUtils {
101 namespace Kernel {
102
103 __global__ void collectValues(integer *indices, real *entries, real *collector, integer count);
104
105 __global__ void checkValues(integer *indices, real *entry1, real *entry2, real *entry3, integer count);
106
107 template<typename T>
108 __global__ void findDuplicates(T *array, integer *duplicateCounter, int length);
109
110 template<typename T>
111 __global__ void findDuplicateEntries(T *array1, T *array2, integer *duplicateCounter, int length);
112
113 template<typename T>
114 __global__ void findDuplicateEntries(T *array1, T *array2, T *array3, integer *duplicateCounter, int length);
115
116 template<typename T, typename U>
117 __global__ void findDuplicates(T *array, U *entry1, U *entry2, integer *duplicateCounter, int length);
118
119 template<typename T>
120 __global__ void markDuplicates(T *array, integer *duplicateCounter, int length);
121
122 //template<typename T, typename U>
123 //__global__ void markDuplicates(T *array, U *entry1, U *entry2, integer *duplicateCounter, int length);
124
125 template<typename T, typename U>
126 __global__ void markDuplicates(T *array, U *entry1, U *entry2, U *entry3, integer *duplicateCounter, integer *child, int length);
127
128 template<typename T>
129 __global__ void removeDuplicates(T *array, T *removedArray, integer *duplicateCounter, int length);
130
131 namespace Launch {
132 real collectValues(integer *indices, real *entries, real *collector, integer count);
133
134 real checkValues(integer *indices, real *entry1, real *entry2, real *entry3, integer count);
135
136 template<typename T>
137 real findDuplicates(T *array, integer *duplicateCounter, int length);
138
139 template<typename T>
140 real findDuplicateEntries(T *array1, T *array2, integer *duplicateCounter, int length);
141
142 template<typename T>
143 real findDuplicateEntries(T *array1, T *array2, T *array3, integer *duplicateCounter, int length);
144
145 template<typename T, typename U>
146 real findDuplicates(T *array, U *entry1, U *entry2, integer *duplicateCounter, int length);
147
148 template<typename T>
149 real markDuplicates(T *array, integer *duplicateCounter, int length);
150
151 //template<typename T, typename U>
152 //real markDuplicates(T *array, U *entry1, U *entry2, integer *duplicateCounter, int length);
153
154 template<typename T, typename U>
155 real markDuplicates(T *array, U *entry1, U *entry2, U *entry3, integer *duplicateCounter, integer *child, int length);
156
157 template<typename T>
158 real removeDuplicates(T *array, T *removedArray, integer *duplicateCounter, int length);
159
160 }
161 }
162
163}
164
165namespace cuda {
172 namespace math {
180 __device__ real min(real a, real b);
181
190 __device__ real min(real a, real b, real c);
191
199 __device__ real max(real a, real b);
200
209 __device__ real max(real a, real b, real c);
210
217 __device__ real abs(real a);
218
225 __device__ real sqrt(real a);
226
233 __device__ real rsqrt(real a);
234 }
235}
236
237#endif //MILUPHPC_CUDAUTILITIES_CUH
cuda_runtime.h
CUDA runtime functionalities and wrappers.
gpuAssert
void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true)
Check CUDA error codes.
Definition: cuda_utilities.cu:21
checkCudaCall
void checkCudaCall(cudaError_t command, const char *commandName, const char *fileName, int line)
Check CUDA call.
Definition: cuda_utilities.cu:30
CudaUtils::Kernel::Launch::findDuplicateEntries
real findDuplicateEntries(T *array1, T *array2, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:344
CudaUtils::Kernel::Launch::markDuplicates
real markDuplicates(T *array, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:369
CudaUtils::Kernel::Launch::findDuplicates
real findDuplicates(T *array, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:333
CudaUtils::Kernel::Launch::collectValues
real collectValues(integer *indices, real *entries, real *collector, integer count)
Definition: cuda_utilities.cu:320
CudaUtils::Kernel::Launch::removeDuplicates
real removeDuplicates(T *array, T *removedArray, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:397
CudaUtils::Kernel::Launch::checkValues
real checkValues(integer *indices, real *entry1, real *entry2, real *entry3, integer count)
Definition: cuda_utilities.cu:326
CudaUtils::Kernel::removeDuplicates
__global__ void removeDuplicates(T *array, T *removedArray, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:300
CudaUtils::Kernel::collectValues
__global__ void collectValues(integer *indices, real *entries, real *collector, integer count)
Definition: cuda_utilities.cu:44
CudaUtils::Kernel::checkValues
__global__ void checkValues(integer *indices, real *entry1, real *entry2, real *entry3, integer count)
Definition: cuda_utilities.cu:56
CudaUtils::Kernel::findDuplicateEntries
__global__ void findDuplicateEntries(T *array1, T *array2, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:95
CudaUtils::Kernel::findDuplicates
__global__ void findDuplicates(T *array, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:76
CudaUtils::Kernel::markDuplicates
__global__ void markDuplicates(T *array, integer *duplicateCounter, int length)
Definition: cuda_utilities.cu:163
CudaUtils
Definition: cuda_utilities.cuh:100
Kernel
Definition: device_rhs.cuh:7
cuda::math::min
__device__ real min(real a, real b)
Minimum value out of two floating point values.
Definition: cuda_utilities.cu:414
cuda::math::rsqrt
__device__ real rsqrt(real a)
Inverse square root of a floating point value.
Definition: cuda_utilities.cu:464
cuda::math::sqrt
__device__ real sqrt(real a)
Square root of a floating point value.
Definition: cuda_utilities.cu:456
cuda::math::abs
__device__ real abs(real a)
Absolute value of a floating point value.
Definition: cuda_utilities.cu:448
cuda::math::max
__device__ real max(real a, real b)
Maximum value out of two floating point values.
Definition: cuda_utilities.cu:431
cuda
Definition: cuda_launcher.cuh:101
real
double real
Definition: parameter.h:15
integer
int integer
Definition: parameter.h:17

milupHPC - include/cuda_utils/cuda_utilities.cuh Source File
Generated on Wed Aug 31 2022 12:16:52 by Doxygen 1.9.3