|
#pragma once |
|
|
|
#include <c10/cuda/CUDAMacros.h> |
|
#include <c10/cuda/CUDAMiscFunctions.h> |
|
#include <c10/macros/Macros.h> |
|
#include <c10/util/Exception.h> |
|
#include <cuda.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace c10 { |
|
class C10_CUDA_API CUDAError : public c10::Error { |
|
using Error::Error; |
|
}; |
|
} |
|
|
|
#define C10_CUDA_CHECK(EXPR) \ |
|
do { \ |
|
const cudaError_t __err = EXPR; \ |
|
if (C10_UNLIKELY(__err != cudaSuccess)) { \ |
|
c10::cuda::c10_cuda_check_implementation( \ |
|
__FILE__, \ |
|
__func__, |
|
\ |
|
static_cast<uint32_t>(__LINE__), \ |
|
true); \ |
|
} \ |
|
} while (0) |
|
|
|
#define C10_CUDA_CHECK_WARN(EXPR) \ |
|
do { \ |
|
const cudaError_t __err = EXPR; \ |
|
if (C10_UNLIKELY(__err != cudaSuccess)) { \ |
|
auto error_unused C10_UNUSED = cudaGetLastError(); \ |
|
(void)error_unused; \ |
|
TORCH_WARN("CUDA warning: ", cudaGetErrorString(__err)); \ |
|
} \ |
|
} while (0) |
|
|
|
|
|
#define C10_CUDA_ERROR_HANDLED(EXPR) EXPR |
|
|
|
|
|
#define C10_CUDA_IGNORE_ERROR(EXPR) \ |
|
do { \ |
|
const cudaError_t __err = EXPR; \ |
|
if (C10_UNLIKELY(__err != cudaSuccess)) { \ |
|
cudaError_t error_unused C10_UNUSED = cudaGetLastError(); \ |
|
(void)error_unused; \ |
|
} \ |
|
} while (0) |
|
|
|
|
|
#define C10_CUDA_CLEAR_ERROR() \ |
|
do { \ |
|
cudaError_t error_unused C10_UNUSED = cudaGetLastError(); \ |
|
(void)error_unused; \ |
|
} while (0) |
|
|
|
|
|
|
|
|
|
#define C10_CUDA_KERNEL_LAUNCH_CHECK() C10_CUDA_CHECK(cudaGetLastError()) |
|
|
|
namespace c10 { |
|
namespace cuda { |
|
|
|
|
|
|
|
C10_CUDA_API void c10_cuda_check_implementation( |
|
const std::string& filename, |
|
const std::string& function_name, |
|
const int line_number, |
|
const bool include_device_assertions); |
|
|
|
} |
|
} |
|
|