4#ifndef ACCEL_CUDA_CUDA_CHECK_CUH_
5#define ACCEL_CUDA_CUDA_CHECK_CUH_
10#include <cuda_runtime.h>
20class CudaError :
public std::runtime_error {
22 CudaError(cudaError_t code,
const std::string& what)
23 : std::runtime_error(what), code_(code) {}
27 cudaError_t code() const noexcept {
return code_; }
35inline std::string FormatCudaError(cudaError_t code,
const char* expression,
36 const char* file,
int line) {
37 return std::string(file) +
':' + std::to_string(line) +
": " + expression +
38 " failed with " + cudaGetErrorName(code) +
" (" +
39 cudaGetErrorString(code) +
')';
44inline void CheckCudaStatus(cudaError_t code,
const char* expression,
45 const char* file,
int line) {
46 if (code != cudaSuccess) {
47 throw CudaError(code, FormatCudaError(code, expression, file, line));
57#define CUDA_CHECK(expression) \
58 ::accel::detail::CheckCudaStatus((expression), #expression, __FILE__, \
71#define CUDA_CHECK_LAUNCH() \
73 CUDA_CHECK(cudaGetLastError()); \
74 CUDA_CHECK(cudaDeviceSynchronize()); \