如何修复cublas_status_arch_mismatch
How to fix CUBLAS_STATUS_ARCH_MISMATCH?
我正在尝试使用Cublas执行简单的矩阵乘法。我正在使用以下功能
#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
void gpu_blas_mmul(cublasHandle_t &handle, cudaStream_t &stream, const real_t *A, const real_t *B, real_t *C, const int m, const int k, const int n) {
int lda=m,ldb=k,ldc=m;
const real_t alf = 1;
const real_t bet = 0;
const real_t *alpha = &alf;
const real_t *beta = &bet;
cublasSetStream(handle, stream);
// Do the actual multiplication
cublasStatus_t err = GEMM(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
if(err!=0)
{
std::cout<<"CUBLAS err : "<<_cudaGetErrorEnum(err)<<"n";
}
}
在标题文件中,GEMM定义为 #define gemm cublasdgemm #Define Real_t double
称为这样的功能:
gpu_blas_mmul(cublas[i], streams[P/2-i-1], A, B, C, N, N, N);
a , b 和 c 是设备存储器位置,我正在尝试乘以两个NXN矩阵(均以列格式存储)。 streams 是cuda流的P/2长度阵列, cublas 是Cublas Handles和 i 从0到p/2-1计数。两个阵列分别包含有效的把手和流(创建它们时没有错误)。我正在编译SM2.0的代码。因此,双重精神不应该是一个问题。
从一个文件调用时,代码正常工作。本节有其自己的CublasCreate和CublasDestroy电话。从另一个位置调用时,相同的函数会引发错误" cublas_status_arch_mismatch"。
可能是什么问题?
谢谢,
托马斯
事实证明,我正在使用无效的CUDA流和/或Cublas手柄。我超越了数组界(存储CUDA流和Cublas手柄的阵列)
隐秘错误消息给我不知道发生了什么。但是,从一个基本的示例开始并努力开始,我找到了这个问题。
希望有人能找到这一点!:)
相关文章:
- 无法在 Arch Linux 中启动虚幻引擎 4
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- "Operator mismatch" C++ 中的错误
- QQuickView new-delete-type-mismatch
- QnetWorkAccessManager在ARCH上给出了SSL错误
- Arch / Eclipse / C /放置库的位置
- 使用函数时出现"'<' signed/unsigned mismatch "错误
- C++11 枚举前向导致"underlying type mismatch"
- 是否有任何说明集支持MIMD Arch
- 如何在配置中禁用"compiler does not halt on function prototype mismatch"错误?
- Arch Linux C 读取USB小鼠定位数据
- 无法使用OpenCV和arch linux打开相机
- CUDA 在运行时检查 nvcc "-arch"-flag
- C++编译器问题:3>cl:命令行错误 D8016:'/clr'和'/arch:SSE2'命令行选项不兼容
- 启用arch:SSE2会使程序变慢
- 在Arch Linux中使用c++Boost正则表达式库
- 无法为arch armv7编译静态库
- 如何从Arch Linux构建基本64位Amazon Linux
- 无法在Arch Linux中安装Cairo包
- 为什么我不能第二次调用 std::mismatch 函数?