opm-common
Toggle main menu visibility
Loading...
Searching...
No Matches
gpuDecorators.hpp
1
/*
2
Copyright 2024 SINTEF Digital
3
4
This file is part of the Open Porous Media project (OPM).
5
6
OPM is free software: you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation, either version 3 of the License, or
9
(at your option) any later version.
10
11
OPM is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
15
16
You should have received a copy of the GNU General Public License
17
along with OPM. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
/*
20
The point of this file is defining macros like OPM_HOST_DEVICE to be empty if
21
we do not compile for GPU architectures, otherwise we will
22
set it to "__device__ __host__" to decorate functions that can
23
be called from a hip/cuda kernel.
24
25
The file also provides some definitions that will probably become useful later,
26
such as OPM_IS_INSIDE_DEVICE_FUNCTION for specializing code that can be called
27
from both GPUs and CPUs.
28
*/
29
33
#ifndef OPM_GPUDECORATORS_HPP
34
#define OPM_GPUDECORATORS_HPP
35
36
// On CUDA we get some warnings that will yield compilation regardless, so we can ignore them
37
#ifdef __CUDACC__
38
#pragma nv_diag_suppress 20011,20014
39
#endif
40
41
//TODO Should probably include config.h if config.h becomes installable
42
43
// true if using nvcc/hipcc gpu compiler
44
#if defined(__NVCC__) || defined(__HIPCC__)
45
#define OPM_IS_COMPILING_WITH_GPU_COMPILER 1
46
#else
47
#define OPM_IS_COMPILING_WITH_GPU_COMPILER 0
48
#endif
49
50
// true inside device version of functions marked __device__
51
#if defined(__CUDA_ARCH__) || (defined(__HIP_DEVICE_COMPILE__) && __HIP_DEVICE_COMPILE__ > 0)
52
#define OPM_IS_INSIDE_DEVICE_FUNCTION 1
53
#define OPM_IS_INSIDE_HOST_FUNCTION 0
54
#else
55
#define OPM_IS_INSIDE_DEVICE_FUNCTION 0
56
#define OPM_IS_INSIDE_HOST_FUNCTION 1
57
#endif
58
59
#if HAVE_CUDA
// if we will compile with GPU support
60
61
//handle inclusion of correct gpu runtime headerfiles
62
#if USE_HIP
// use HIP if we compile for AMD architectures
63
#include <hip/hip_runtime.h>
64
#else
// otherwise include cuda
65
#include <cuda_runtime.h>
66
#endif
// END USE_HIP
67
68
#define OPM_HOST_DEVICE __device__ __host__
69
#define OPM_DEVICE __device__
70
#define OPM_HOST __host__
71
#define OPM_IS_USING_GPU 1
72
#else
73
#define OPM_HOST_DEVICE
74
#define OPM_DEVICE
75
#define OPM_HOST
76
#define OPM_IS_USING_GPU 0
77
#endif
// END ELSE
78
79
#endif
// END HEADER GUARD
opm
common
utility
gpuDecorators.hpp
Generated by
1.17.0