Loading...
Searching...
No Matches
error.hpp File Reference
#include <cuproj/assert.cuh>
#include <cuda_runtime_api.h>
#include <stdexcept>
#include <string>

Go to the source code of this file.

Classes

struct  cuproj::logic_error
 Exception thrown when logical precondition is violated. More...
 
struct  cuproj::cuda_error
 Exception thrown when a CUDA error is encountered. More...
 

Macros

#define CUPROJ_STRINGIFY_DETAIL(x)   #x
 
#define CUPROJ_STRINGIFY(x)   CUPROJ_STRINGIFY_DETAIL(x)
 
#define CUPROJ_EXPECTS(cond, reason)
 Macro for checking (pre-)conditions that throws an exception when a condition is violated.
 
#define CUPROJ_HOST_DEVICE_EXPECTS(cond, reason)   CUPROJ_EXPECTS(cond, reason)
 Macro for checking (pre-)conditions that throws an exception when a condition is violated.
 
#define CUPROJ_FAIL(reason)
 Indicates that an erroneous code path has been taken.
 
#define CUPROJ_CUDA_TRY(call)
 Error checking macro for CUDA runtime API functions.
 
#define CUPROJ_CHECK_CUDA(stream)
 Debug macro to check for CUDA errors.
 

Functions

void cuproj::detail::throw_cuda_error (cudaError_t error, const char *file, unsigned int line)
 

Macro Definition Documentation

◆ CUPROJ_CHECK_CUDA

#define CUPROJ_CHECK_CUDA ( stream)
Value:
do { \
CUPROJ_CUDA_TRY(cudaStreamSynchronize(stream)); \
CUPROJ_CUDA_TRY(cudaPeekAtLastError()); \
} while (0);

Debug macro to check for CUDA errors.

In a non-release build, this macro will synchronize the specified stream before error checking. In both release and non-release builds, this macro checks for any pending CUDA errors from previous calls. If an error is reported, an exception is thrown detailing the CUDA error that occurred.

The intent of this macro is to provide a mechanism for synchronous and deterministic execution for debugging asynchronous CUDA execution. It should be used after any asynchronous CUDA call, e.g., cudaMemcpyAsync, or an asynchronous kernel launch.

Definition at line 166 of file error.hpp.

◆ CUPROJ_CUDA_TRY

#define CUPROJ_CUDA_TRY ( call)
Value:
do { \
cudaError_t const status = (call); \
if (cudaSuccess != status) { \
cudaGetLastError(); \
cuproj::detail::throw_cuda_error(status, __FILE__, __LINE__); \
} \
} while (0);

Error checking macro for CUDA runtime API functions.

Invokes a CUDA runtime API function call, if the call does not return cudaSuccess, invokes cudaGetLastError() to clear the error and throws an exception detailing the CUDA error that occurred

Definition at line 143 of file error.hpp.

◆ CUPROJ_EXPECTS

#define CUPROJ_EXPECTS ( cond,
reason )
Value:
(!!(cond)) ? static_cast<void>(0) \
: throw cuproj::logic_error("cuProj failure at: " __FILE__ \
":" CUPROJ_STRINGIFY(__LINE__) ": " reason)

Macro for checking (pre-)conditions that throws an exception when a condition is violated.

Example usage:

CUPROJ_EXPECTS(lhs->dtype == rhs->dtype, "Column type mismatch");
#define CUPROJ_EXPECTS(cond, reason)
Macro for checking (pre-)conditions that throws an exception when a condition is violated.
Definition error.hpp:76
Parameters
[in]condExpression that evaluates to true or false
[in]reasonString literal description of the reason that cond is expected to be true
Exceptions
cuproj::logic_errorif the condition evaluates to false.

Definition at line 76 of file error.hpp.

◆ CUPROJ_FAIL

#define CUPROJ_FAIL ( reason)
Value:
throw cuproj::logic_error("cuProj failure at: " __FILE__ ":" CUPROJ_STRINGIFY( \
__LINE__) ":" \
" " reason)
Exception thrown when logical precondition is violated.
Definition error.hpp:40

Indicates that an erroneous code path has been taken.

In host code, throws a cuproj::logic_error.

Example usage:

CUPROJ_FAIL("Non-arithmetic operation is not supported");
#define CUPROJ_FAIL(reason)
Indicates that an erroneous code path has been taken.
Definition error.hpp:118
Parameters
[in]reasonString literal description of the reason

Definition at line 118 of file error.hpp.

◆ CUPROJ_HOST_DEVICE_EXPECTS

#define CUPROJ_HOST_DEVICE_EXPECTS ( cond,
reason )   CUPROJ_EXPECTS(cond, reason)

Macro for checking (pre-)conditions that throws an exception when a condition is violated.

Example usage:

CUPROJ_HOST_DEVICE_EXPECTS(lhs->dtype == rhs->dtype, "Column type
*mismatch");
#define CUPROJ_HOST_DEVICE_EXPECTS(cond, reason)
Macro for checking (pre-)conditions that throws an exception when a condition is violated.
Definition error.hpp:100
Parameters
[in]condExpression that evaluates to true or false
[in]reasonString literal description of the reason that cond is expected to be true

(if on host)

Exceptions
cuproj::logic_errorif the condition evaluates to false. (if on device) program terminates and assertion error message is printed to stderr.

Definition at line 100 of file error.hpp.

◆ CUPROJ_STRINGIFY

#define CUPROJ_STRINGIFY ( x)    CUPROJ_STRINGIFY_DETAIL(x)

Definition at line 59 of file error.hpp.

◆ CUPROJ_STRINGIFY_DETAIL

#define CUPROJ_STRINGIFY_DETAIL ( x)    #x

Definition at line 58 of file error.hpp.

Function Documentation

◆ throw_cuda_error()

void cuproj::detail::throw_cuda_error ( cudaError_t error,
const char * file,
unsigned int line )
inline

Definition at line 126 of file error.hpp.