Обработка ошибок CUFFT
используя следующий макрос для обработки ошибок CUFFT:
#define cufftSafeCall(err) __cufftSafeCall(err, __FILE__, __LINE__)
inline void __cufftSafeCall(cufftResult err, const char *file, const int line)
{
if( CUFFT_SUCCESS != err) {
fprintf(stderr, "cufftSafeCall() CUFFT error in file , line %i.\n",
file, line);
getch(); exit(-1);
}
}
Этот макрос не возвращает строку сообщения из кода ошибки. Книга "Программирование CUDA: разработчикРуководство по параллельным вычислениям с графическими процессорами » предлагает использовать следующий макрос
#define CUDA_CALL(call) { const cudaError_t err = (call); \
if(err != cudaSuccess) \
{ \
fprintf(stderr, "CUDA error in file '%s', line %d\n %s\nerror %d: %s\nterminating!\n",__FILE__, __LINE__,err, \
cudaGetErrorString(err)); \
cudaDeviceReset(); assert(0); \
} }
(примечание: он был несколько настроен без изменения функциональности). Книга говорит: «Этот метод работает для всех вызовов CUDA, за исключением вызова ядер ». Однако при использованииCUDA_CALL
при вызове процедуры CUFFT компилятор возвращает
a value of type "cufftResult" cannot be used to initialize an entity of type "const cudaError_t".
Кажется, чтоcufftResult
а такжеcudaError_t
не сразу совместимы.
Расследуя немного больше, из этогоБиблиотека NVIDIA CUDA ссылка, кажется, чтоcudaGetErrorString
требуетcudaError_t
тип ввода.
Мои вопросы следующие:
Есть ли способ сделатьcufftResult
а такжеcudaError_t
быть совместимым, чтобы я мог использоватьCUDA_CALL
на процедуры CUFFT и получить строку сообщения из кода ошибки?Есть ли какая-либо техническая причина, по которой следует реализовывать другую ошибку для библиотеки CUFFT? :-)Благодарю.
РЕДАКТИРОВАТЬ СЛЕДУЮЩУЮ РОБЕРТА КРОВЕЛЛАS ОТВЕТ
Я изменил процедуру CufftSafeCall как}
inline void __cufftSafeCall(cufftResult err, const char *file, const int line)
{
if( CUFFT_SUCCESS != err) {
fprintf(stderr, "CUFFT error in file '%s', line %d\n %s\nerror %d: %s\nterminating!\n",__FILE__, __LINE__,err, \
_cudaGetErrorEnum(err)); \
cudaDeviceReset(); assert(0); \
}
также вернуть строку типа ошибки.