2013-02-12 2 views
0

Это может показаться странным, но ситуация после обновления CUDA4 до CUDA5 я обнаружил, что мое собственное ядро ​​работает быстрее, но функции cublas (например, cublasDgemm) замедляются. Кроме того, cublasDgemm, похоже, вызывает некоторые вещи магмы в версии 5.Могу ли я импортировать версию-4 для «cublas», тогда как импортировать версию-5 для библиотеки «cudart» одновременно?

Итак, интересно, смогу ли я импортировать версию-4 для «cublas», а импортировать версию-5 для библиотеки «cudart». В качестве простого суда, у меня есть код (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 

Спасибо за любые предложения.

+0

Там будет verisoning во время выполнения, и вы не можете смешивать время автономной работы или библиотеки, построенные на время выполнения. Итак, нет, это не сработает. – talonmies

+0

Также включают * оба * 'cublas.h' и' cublas_v2.h'? Вы должны выбрать один API и использовать только его ... – talonmies

+0

@talonmies Спасибо за напоминание. Я помню, когда я первоначально ссылался на руководство cublas4.0, некоторые новые функции были включены в cutlas_v2.h, но нам все равно нужно включить cutlas.h для некоторых основных функций. В любом случае стоит дважды проверить. –

ответ

1

В процессе исполнения имеется проверка, и вы не можете смешивать версии во время исполнения, а также библиотеки, построенные на разных версиях времени исполнения. Таким образом, нет, это не сработает, потому что CUBLAS 4.2 требует библиотеки исполнения CUDA 4.2 и не может работать с CUDA 5.0.

[Этот ответ добавляемых комментариев как сообщества вики ответ, чтобы получить вопрос от безответного списка]