2013-05-18 141 views
-1

所以我有一个执行矩阵乘法的代码,但问题是当我使用库-lcublas和编译器nvcc时,它只返回零值;然而,当我使用编译器时,代码运行良好,只需对函数名进行一些调整,g ++与库-lblas即可。您可以使用cublasDdot()在非GPU内存中使用blas操作吗?

您可以使用-lcublas库从不在GPU上的内存执行矩阵乘法吗?

下面是返回0的代码:

extern "C" //external reference to function so the code compiles 
{ 
    double cublasDdot(int *n, double *A, int *incA, double *B, int *incB); 
} 

//stuff happens 

    cout << "Calculating/printing the contents of Matrix C for ddot...\n"; 
      C[i][t]=cublasDdot(&n, partA, &incA, partB, &incB); //This thing isn't working for some reason (although it compiles just fine) 

我使用这个命令编译:nvcc program -lcublas

这确实然而工作:

extern "C" //external reference to function so the code compiles 
{ 
    double ddot_(int *n, double *A, int *incA, double *B, int *incB); 
} 

//stuff happens 

C[i][t]=ddot_(&n, partA, &incA, partB, &incB); 

g++ program -lblas

+0

我现在非常自信,答案是“不”。稍后再给我一点时间,我会在后面回复。 – Mechy

回答

1

编译cublas需要正确运行的CUDA GPU。

也许你没有做错误检查。请阅读如何在cublas manual中进行错误检查。并看看一些error checking sample code

cublas的普通用法需要将数据传输到GPU并将结果传回。

+0

在最后一句话中,可以在固定的映射主机内存上运行CUBLAS。虽然我可以争辩说,即使在这种情况下,数据被传输到GPU并且结果被传回,但它并没有在主机源代码中明确地完成,但这确实起作用, – talonmies

+0

确实如此。数据可能已经在GPU上生成,并且结果可能会被后续操作在GPU上消耗,在这种情况下,不需要任何类型的明确数据传输,至少对于有问题的cublas操作是必需的。 –

相关问题