首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复CUBLAS_STATUS_ARCH_MISMATCH?

如何修复CUBLAS_STATUS_ARCH_MISMATCH?
EN

Stack Overflow用户
提问于 2014-02-05 02:22:29
回答 1查看 1.4K关注 0票数 0

我试图使用CUBLAS来执行一个简单的矩阵乘法。我使用以下函数

代码语言:javascript
复制
#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 #Definereal_t double

该函数的调用如下:

代码语言:javascript
复制
gpu_blas_mmul(cublas[i], streams[P/2-i-1], A, B, C, N, N, N);

ABC是设备内存位置,我试图乘两个NxN矩阵(都以列-主要格式存储)。 Streams 是CUDA流的P/2长度数组, CUBLAS 是CUBLAS句柄的数组,i计数从0上升到P/21-1。两个数组分别包含有效句柄和流(创建它们时没有错误)。我正在编译sm2.0的代码。所以双精度不应该是个问题。

当从一个文件调用代码时,代码工作良好。本节有自己的cublasCreate和cublasDestroy调用。从另一个位置调用相同的函数会抛出错误"CUBLAS_STATUS_ARCH_MISMATCH“。

有什么不对的?

谢谢,

托马斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 06:32:42

原来我使用的是无效的CUDA流和/或CUBLAS句柄。我超出了数组边界(存储CUDA流和CUBLAS句柄的数组)

神秘的错误信息使我不知道发生了什么。然而,再次从一个基本的例子出发,并努力工作,使我找到了这个问题。

希望有人觉得这有帮助!:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21567458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档