gpt4 book ai didi

c - 用于获取 curand 的 curandStatus_t 作为字符串的内置函数

转载 作者:行者123 更新时间:2023-11-30 15:03:33 26 4
gpt4 key购买 nike

对于安全(或错误检查)的 CUDA 调用(例如 cudaMemcpycudaMalloccudaFree 等函数),我们可以定义一个 wrapper ,像这样的东西:

#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 手动实现它,但想知道是否有内置函数,以便它处理可能的新状态代码。

最佳答案

哦,我想我找到了 similar question 。在 NVIDIA 示例中 cuda_helper.c ,您可以看到处理 curandenum 值的函数。

#ifdef CURAND_H_
// cuRAND API errors
static const char *curandGetErrorString(curandStatus_t error)
{
switch (error)
{
case CURAND_STATUS_SUCCESS:
return "CURAND_STATUS_SUCCESS";

case CURAND_STATUS_VERSION_MISMATCH:
return "CURAND_STATUS_VERSION_MISMATCH";

case CURAND_STATUS_NOT_INITIALIZED:
return "CURAND_STATUS_NOT_INITIALIZED";

case CURAND_STATUS_ALLOCATION_FAILED:
return "CURAND_STATUS_ALLOCATION_FAILED";

case CURAND_STATUS_TYPE_ERROR:
return "CURAND_STATUS_TYPE_ERROR";

case CURAND_STATUS_OUT_OF_RANGE:
return "CURAND_STATUS_OUT_OF_RANGE";

case CURAND_STATUS_LENGTH_NOT_MULTIPLE:
return "CURAND_STATUS_LENGTH_NOT_MULTIPLE";

case CURAND_STATUS_DOUBLE_PRECISION_REQUIRED:
return "CURAND_STATUS_DOUBLE_PRECISION_REQUIRED";

case CURAND_STATUS_LAUNCH_FAILURE:
return "CURAND_STATUS_LAUNCH_FAILURE";

case CURAND_STATUS_PREEXISTING_FAILURE:
return "CURAND_STATUS_PREEXISTING_FAILURE";

case CURAND_STATUS_INITIALIZATION_FAILED:
return "CURAND_STATUS_INITIALIZATION_FAILED";

case CURAND_STATUS_ARCH_MISMATCH:
return "CURAND_STATUS_ARCH_MISMATCH";

case CURAND_STATUS_INTERNAL_ERROR:
return "CURAND_STATUS_INTERNAL_ERROR";
}

return "<unknown>";
}
#endif

但是,最好有一个内置的、与版本无关的解决方案来解决这个问题。

关于c - 用于获取 curand 的 curandStatus_t 作为字符串的内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40704147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com