内置函数将curand的curandStatus_t作为字符串

时间:2016-11-20 12:43:55

标签: c random cuda

对于安全(或错误检查)的CUDA调用(对cudaMemcpycudaMalloccudaFree等函数),我们可以定义wrapper,如下所示:< / p>

#define cuSafe(ans) { gpuCuSafe((ans), __FILE__, __LINE__); }
inline void gpuCuSafe(cudaError_t code, const char *file, int line) {
    if (code != cudaSuccess) {
        fprintf(stderr,
                "GPU ERROR: '%s' in file %s (line %d)\n",
                cudaGetErrorString(code),  /* <----< */
                file,
                line);
        exit(EXIT_FAILURE);
    }
}

这些CUDA函数调用返回类型cudaError_t的值。我们可以调用cudaGetErrorString(cudaError_t c)来获取可能向程序的用户和开发人员提供信息的错误字符串(解释错误的错误字符串优于错误代码)。

cuRAND API Documentation中,他们使用类似的方法来包装curand函数调用。 curand个函数返回curandStatus_t类型的值。

我正在寻找一个返回表示返回的curandStatus_t值的字符串could be CURAND_STATUS_INITIALIZATION_FAILEDCURAND_STATUS_NOT_INITIALIZED等)的函数,但是,我无法在文档中找到任何类似的功能。

为了清楚起见,我希望能够做的是创建一个curandSafe包装器(类似于上面的cuSafe示例)

#define curandSafe(ans) { gpuCuRandSafe((ans), __FILE__, __LINE__);}
inline void gpuCuRandSafe(curandStatus_t status, const char *file, int line) {
    if (status != CURAND_STATUS_SUCCESS) {
        fprintf(stderr,
                "GPU curand ERROR in file %s (line %d)\n",
                /*curandGetStatusString(status)*/  // OR SOMETHING LIKE THAT
                file,
                line);
        exit(EXIT_FAILURE);
    }
}

我正在考虑使用switch-case手动实现它,但想知道它是否有内置函数,因此它会处理可能的新状态代码。

1 个答案:

答案 0 :(得分:1)

哦,我想我找到了similar question。在NVIDIA样本cuda_helper.c中,您可以看到处理enum的{​​{1}}值的函数。

curand

然而,对于这个问题,内置的,因此版本无关的解决方案会很好。