我可以导入版本4为“cublas”而导入版本-5为“cudart”库同时?

时间:2013-02-12 20:45:21

标签: cuda cublas

这可能听起来很奇怪,但情况是,在将CUDA4升级到CUDA5之后,我发现我自己的内核运行得更快,但是cublas函数(例如cublasDgemm)变慢了。此外,cublasDgemm似乎在版本5中调用了一些岩浆。

所以,我想知道我是否可以为“cublas”导入版本-4,而为“cudart”库导入版本-5。作为一个简单的试验,我有一个代码(mycode.cc):

#include <iostream>
#include <stdio.h>
#include <cublas.h>
#include <cublas_v2.h>

using namespace std;

int main()
{
    int ver;
    cudaRuntimeGetVersion(&ver);
    cout<<"cudart version: "<<ver<<endl;

    cublasHandle_t hdl;
    cublasCreate(&hdl);
    cublasGetVersion(hdl, &ver);
    cout<<"cublas version: "<<ver<<endl;
}

并尝试:

g++ -I /opt/cuda/include/ -L /opt/cuda/lib64/ -lcudart -I /opt/cuda-5.0/include/ -L /opt/cuda-5.0/lib64/ -lcublas mycode.cc 

我的系统有一个“模块”设置,我尝试了“模块加载cuda4”和“模块加载cuda5”。有趣的是,它在“模块加载cuda4”时编译,然后报告:

cudart version: 4010
cublas version: 4010

这不是我想要的cudart。此外,当我“模块加载cuda5”时,它仍然编译,但运行excutable失败:

./a.out: error while loading shared libraries: libcudart.so.4: cannot open shared object file: No such file or directory

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

运行时中存在verisoning,您不能混合运行时版本,也不能混合使用不同运行时版本构建的库。所以,不,这不起作用,因为CUBLAS 4.2需要CUDA 4.2运行时库,不能与CUDA 5.0一起使用。

[这个答案在评论中添加为社区维基的答案,以便从未答复的列表中获取问题]