| #ifndef THC_DEVICE_UTILS_INC |
| #define THC_DEVICE_UTILS_INC |
| |
| /* The largest consecutive integer representable in float32 (2^24) */ |
| #define FLOAT32_MAX_CONSECUTIVE_INT 16777216.0f |
| |
| /** |
| Computes ceil(a / b) |
| */ |
| template <typename T> |
| __host__ __device__ __forceinline__ T THCCeilDiv(T a, T b) { |
| return (a + b - 1) / b; |
| } |
| |
| /** |
| Computes ceil(a / b) * b; i.e., rounds up `a` to the next highest |
| multiple of b |
| */ |
| template <typename T> |
| __host__ __device__ __forceinline__ T THCRoundUp(T a, T b) { |
| return THCCeilDiv(a, b) * b; |
| } |
| |
| /** |
| * For CC 3.5+, perform a load using __ldg |
| */ |
| template <typename T> |
| __device__ __forceinline__ T doLdg(const T* p) { |
| #if __CUDA_ARCH__ >= 350 |
| return __ldg(p); |
| #else |
| return *p; |
| #endif |
| } |
| |
| #endif // THC_DEVICE_UTILS_INC |