mirror of
https://github.com/jwinterm/xmr-stak.git
synced 2026-10-18 05:51:45 +02:00
- add macro `CUDA_CHECK_MSG_KERNEL` and `CUDA_CHECK_MSG` - add suggestion of typicle errors can be solved
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
|
|
#pragma once
|
|
|
|
#include <cuda_runtime.h>
|
|
#include <stdexcept>
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
/** execute and check a CUDA api command
|
|
*
|
|
* @param id gpu id (thread id)
|
|
* @param msg message string which should be added to the error message
|
|
* @param ... CUDA api command
|
|
*/
|
|
#define CUDA_CHECK_MSG(id, msg, ...) { \
|
|
cudaError_t error = __VA_ARGS__; \
|
|
if(error!=cudaSuccess){ \
|
|
std::cerr << "[CUDA] Error gpu " << id << ": <" << __FILE__ << ">:" << __LINE__; \
|
|
std::cerr << msg << std::endl; \
|
|
throw std::runtime_error(std::string("[CUDA] Error: ") + std::string(cudaGetErrorString(error))); \
|
|
} \
|
|
} \
|
|
( (void) 0 )
|
|
|
|
/** execute and check a CUDA api command
|
|
*
|
|
* @param id gpu id (thread id)
|
|
* @param ... CUDA api command
|
|
*/
|
|
#define CUDA_CHECK(id, ...) CUDA_CHECK_MSG(id, "", __VA_ARGS__)
|
|
|
|
/** execute and check a CUDA kernel
|
|
*
|
|
* @param id gpu id (thread id)
|
|
* @param ... CUDA kernel call
|
|
*/
|
|
#define CUDA_CHECK_KERNEL(id, ...) \
|
|
__VA_ARGS__; \
|
|
CUDA_CHECK(id, cudaGetLastError())
|
|
|
|
/** execute and check a CUDA kernel
|
|
*
|
|
* @param id gpu id (thread id)
|
|
* @param msg message string which should be added to the error message
|
|
* @param ... CUDA kernel call
|
|
*/
|
|
#define CUDA_CHECK_MSG_KERNEL(id, msg, ...) \
|
|
__VA_ARGS__; \
|
|
CUDA_CHECK_MSG(id, msg, cudaGetLastError())
|