Обработка ошибок 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); \
}

также вернуть строку типа ошибки.

Ответы на вопрос(2)

Ваш ответ на вопрос