Changeset 0db7dbd in sasmodels for sasmodels/kernel_header.c
- Timestamp:
- Feb 16, 2018 7:10:04 PM (6 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 47fb816
- Parents:
- aa90015
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernel_header.c
r108e70e r0db7dbd 1 1 #ifdef __OPENCL_VERSION__ 2 2 # define USE_OPENCL 3 #elif defined(__CUDACC__) 4 # define USE_CUDA 3 5 #elif defined(_OPENMP) 4 6 # define USE_OPENMP … … 8 10 // Note: if using a C++ compiler, then define kernel as extern "C" 9 11 #ifdef USE_OPENCL 12 13 #define USE_GPU 10 14 typedef int int32_t; 11 # if defined(USE_SINCOS) 12 # define SINCOS(angle,svar,cvar) svar=sincos(angle,&cvar) 13 # else 14 # define SINCOS(angle,svar,cvar) do {const double _t_=angle; svar=sin(_t_);cvar=cos(_t_);} while (0) 15 # endif 15 #define global_par global 16 #define local_par local 17 #define constant_par constant 18 #define global_var global 19 #define local_var local 20 #define constant_var constant 21 #define __device__ 22 23 #if defined(USE_SINCOS) 24 # define SINCOS(angle,svar,cvar) svar=sincos(angle,&cvar) 25 #else 26 # define SINCOS(angle,svar,cvar) do {const double _t_=angle; svar=sin(_t_);cvar=cos(_t_);} while (0) 27 #endif 16 28 // Intel CPU on Mac gives strange values for erf(); on the verified 17 29 // platforms (intel, nvidia, amd), the cephes erf() is significantly … … 24 36 # define erfcf erfc 25 37 #endif 26 #else // !USE_OPENCL 27 // Use SAS_DOUBLE to force the use of double even for float kernels 28 # define SAS_DOUBLE dou ## ble 29 # ifdef __cplusplus 38 39 #elif defined(USE_CUDA) 40 41 #define USE_GPU 42 #define global_par 43 #define local_par 44 #define constant_par const 45 #define global_var 46 #define local_var __shared__ 47 #define constant_var __constant__ 48 49 #define kernel extern "C" __global__ 50 51 // OpenCL powr(a,b) = C99 pow(a,b), b >= 0 52 // OpenCL pown(a,b) = C99 pow(a,b), b integer 53 #define powr(a,b) pow(a,b) 54 #define pown(a,b) pow(a,b) 55 //typedef int int32_t; 56 #if defined(USE_SINCOS) 57 # define SINCOS(angle,svar,cvar) sincos(angle,&svar,&cvar) 58 #else 59 # define SINCOS(angle,svar,cvar) do {const double _t_=angle; svar=sin(_t_);cvar=cos(_t_);} while (0) 60 #endif 61 62 #else // !USE_OPENCL && !USE_CUDA 63 64 #define global_par 65 #define local_par 66 #define constant_par const 67 #define global_var 68 #define local_var 69 #define constant_var const 70 #define __device__ 71 72 #ifdef __cplusplus 30 73 #include <cstdio> 31 74 #include <cmath> … … 51 94 #endif 52 95 inline void SINCOS(double angle, double &svar, double &cvar) { svar=sin(angle); cvar=cos(angle); } 53 #else // !__cplusplus96 #else // !__cplusplus 54 97 #include <inttypes.h> // C99 guarantees that int32_t types is here 55 98 #include <stdio.h> … … 76 119 #define kernel 77 120 #define SINCOS(angle,svar,cvar) do {const double _t_=angle; svar=sin(_t_);cvar=cos(_t_);} while (0) 78 # endif // !__cplusplus 79 # define global 80 # define local 81 # define constant const 82 // OpenCL powr(a,b) = C99 pow(a,b), b >= 0 83 // OpenCL pown(a,b) = C99 pow(a,b), b integer 84 # define powr(a,b) pow(a,b) 85 # define pown(a,b) pow(a,b) 121 #endif // !__cplusplus 122 // OpenCL powr(a,b) = C99 pow(a,b), b >= 0 123 // OpenCL pown(a,b) = C99 pow(a,b), b integer 124 #define powr(a,b) pow(a,b) 125 #define pown(a,b) pow(a,b) 126 86 127 #endif // !USE_OPENCL 128 129 // Use SAS_DOUBLE to force the use of double even for float kernels 130 #define SAS_DOUBLE dou ## ble 87 131 88 132 #if defined(NEED_EXPM1) … … 147 191 # define M_4PI_3 4.18879020478639 148 192 #endif 193 __device__ 149 194 inline double square(double x) { return x*x; } 195 __device__ 150 196 inline double cube(double x) { return x*x*x; } 197 __device__ 151 198 inline double sas_sinx_x(double x) { return x==0 ? 1.0 : sin(x)/x; } 152 199
Note: See TracChangeset
for help on using the changeset viewer.