CUDA运行时有一个方便的函数cudaGetErrorString(cudaError_t error),它将错误枚举转换为可读的字符串。cudaGetErrorString在许多人用于CUDA错误处理的CUDA_SAFE_CALL(someCudaFunction())宏中使用。
我现在正在熟悉cuBLAS,我想创建一个类似于CUDA_SAFE_CALL for cuBLAS的宏。为了使宏的输出有用,我想要一些类似于cudaGetErrorString in cuBLAS的东西。
cudaGetErrorString() 在cuBLAS中有相当于的东西吗?或者,是否有任何cuBLAS用户编写了这样的函数?
发布于 2012-10-24 01:36:39
在CUDA 5.0中,假设您安装了示例,有一个文件./ samples /cuda.h/inc/helper_cuda.h具有以下内容:
#ifdef CUBLAS_API_H_
// cuBLAS API errors
static const char *_cudaGetErrorEnum(cublasStatus_t error)
{
switch (error)
{
case CUBLAS_STATUS_SUCCESS:
return "CUBLAS_STATUS_SUCCESS";
case CUBLAS_STATUS_NOT_INITIALIZED:
return "CUBLAS_STATUS_NOT_INITIALIZED";
case CUBLAS_STATUS_ALLOC_FAILED:
return "CUBLAS_STATUS_ALLOC_FAILED";
case CUBLAS_STATUS_INVALID_VALUE:
return "CUBLAS_STATUS_INVALID_VALUE";
case CUBLAS_STATUS_ARCH_MISMATCH:
return "CUBLAS_STATUS_ARCH_MISMATCH";
case CUBLAS_STATUS_MAPPING_ERROR:
return "CUBLAS_STATUS_MAPPING_ERROR";
case CUBLAS_STATUS_EXECUTION_FAILED:
return "CUBLAS_STATUS_EXECUTION_FAILED";
case CUBLAS_STATUS_INTERNAL_ERROR:
return "CUBLAS_STATUS_INTERNAL_ERROR";
}
return "<unknown>";
}
#endif在以前版本的CUDA SDK (示例)中可能有类似之处。如果你问这个问题,这不是回答一个“是内置的东西”的问题,而是在回答你的问题时,“有任何cuBLAS用户写了这样的函数吗?”
发布于 2012-10-24 01:31:15
我仍然很好奇在cuBLAS中是否存在内置的获取错误字符串的方法,但我现在编写了自己的。
根据cuBLAS指南的8.1节,cuBLAS中只有8种类型的cublasError_t值。我打印出来的..。
printf("CUBLAS_STATUS_SUCCESS = %d \n", CUBLAS_STATUS_SUCCESS);
printf("CUBLAS_STATUS_NOT_INITIALIZED = %d \n", CUBLAS_STATUS_NOT_INITIALIZED);
printf("CUBLAS_STATUS_ALLOC_FAILED = %d \n", CUBLAS_STATUS_ALLOC_FAILED);
printf("CUBLAS_STATUS_INVALID_VALUE = %d \n", CUBLAS_STATUS_INVALID_VALUE);
printf("CUBLAS_STATUS_ARCH_MISMATCH = %d \n", CUBLAS_STATUS_ARCH_MISMATCH);
printf("CUBLAS_STATUS_MAPPING_ERROR = %d \n", CUBLAS_STATUS_MAPPING_ERROR);
printf("CUBLAS_STATUS_EXECUTION_FAILED = %d \n", CUBLAS_STATUS_EXECUTION_FAILED);
printf("CUBLAS_STATUS_INTERNAL_ERROR = %d \n", CUBLAS_STATUS_INTERNAL_ERROR);打印出来:
CUBLAS_STATUS_SUCCESS = 0
CUBLAS_STATUS_NOT_INITIALIZED = 1
CUBLAS_STATUS_ALLOC_FAILED = 3
CUBLAS_STATUS_INVALID_VALUE = 7
CUBLAS_STATUS_ARCH_MISMATCH = 8
CUBLAS_STATUS_MAPPING_ERROR = 11
CUBLAS_STATUS_EXECUTION_FAILED = 13
CUBLAS_STATUS_INTERNAL_ERROR = 14获取cuBLAS错误字符串的函数:
const char* cublasGetErrorString(cublasStatus_t status)
{
switch(status)
{
case CUBLAS_STATUS_SUCCESS: return "CUBLAS_STATUS_SUCCESS";
case CUBLAS_STATUS_NOT_INITIALIZED: return "CUBLAS_STATUS_NOT_INITIALIZED";
case CUBLAS_STATUS_ALLOC_FAILED: return "CUBLAS_STATUS_ALLOC_FAILED";
case CUBLAS_STATUS_INVALID_VALUE: return "CUBLAS_STATUS_INVALID_VALUE";
case CUBLAS_STATUS_ARCH_MISMATCH: return "CUBLAS_STATUS_ARCH_MISMATCH";
case CUBLAS_STATUS_MAPPING_ERROR: return "CUBLAS_STATUS_MAPPING_ERROR";
case CUBLAS_STATUS_EXECUTION_FAILED: return "CUBLAS_STATUS_EXECUTION_FAILED";
case CUBLAS_STATUS_INTERNAL_ERROR: return "CUBLAS_STATUS_INTERNAL_ERROR";
}
return "unknown error";
}发布于 2022-07-12 01:43:55
自从CUDA 11.4.2 (2021年9月)以来,终于有了cublasGetStatusName和cublasGetStatusString分别返回cuBLAS错误状态的枚举名称和描述。例如:
cublasGetStatusName( CUBLAS_STATUS_NOT_INITIALIZED )返回"CUBLAS_STATUS_NOT_INITIALIZED“。
cublasGetStatusString( CUBLAS_STATUS_NOT_INITIALIZED )返回“库未初始化”。
https://docs.nvidia.com/cuda/cublas/index.html#cublasGetStatusName
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cublas-11.4.2
顺便说一句,rocBLAS提供rocblas_status_to_string,hipBLAS提供hipblasStatusToString。
https://stackoverflow.com/questions/13041399
复制相似问题