したがって、マトリックスの内積をさまざまな方法で計算すると思われるこのコードがありますが (そのうちの 1 つは C++ で blas を使用することです)、nvcc を使用してコードをコンパイルしようとすると、機能しません。 ddot への未定義の参照があると言っています。ここで参照されている cublas の呼び出し表記法を使用していると確信しているため、これは奇妙です: http://www.sdsc.edu/us/training/assets/docs/NVIDIA-03-Toolkit.pdf
誰でも私を助けることができますか?ここに私が問題を抱えているコードの抜粋があります:
#include <cublas.h> //just some included files here. No problems with these
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
extern "C" //This is where I mention the cublas functions are external.
//I think this is necessary since I also have cuda pieces of code
{
double cublasDDOT_(int *n, double *A, int *incA, double *B, int *incB);
void cublasDAXPY_(int *n, double *a, double *A, int *incA, double *B, int *incB);
}
//Stuff happens here
C[i][t]=cublasDDOT_(&n, partA, &incA, partB, &incB); //This is a piece of my function and where the compiler chokes up
これは私には奇妙です。また、「_」を削除しようとしましたが、うまくいきませんでした。
私が使用するコンパイルコマンドは次のとおりです。nvcc program
どういうわけか、コンパイル中に cublas ライブラリについて言及する必要がありますか? cudaツールキットをインストールしましたが、ライブラリを参照する方法がわかりません
#include <cublas.h>
新しいアップデート
cublas.h ヘッダーを含めても含めなくても、同じ出力が得られることがわかりました。
-lcublas と入力しても入力しなくても、同じ出力が得られます。
これは、すべてのコンパイルのガベージである出力です(cublas.hの有無と-lcublasの有無)
nvcc project4.cu -lcublas
/tmp/tmpxft_000051cb_00000000-14_project4.o: In function `ddot(int&, int&, int&, double**&, double**&, double**&, double*&, double*&, int&, int&, double&, double&, double*)':
tmpxft_000051cb_00000000-3_project4.cudafe1.cpp:(.text+0xda1): undefined reference to `cublasDDOT'
/tmp/tmpxft_000051cb_00000000-14_project4.o: In function `daxpy(int&, int&, int&, double**&, double**&, double**&, double**&, double*&, double*&, int&, int&, double&, double&, double*)':
tmpxft_000051cb_00000000-3_project4.cudafe1.cpp:(.text+0xff3): undefined reference to `cublasDAXPY'
collect2: ld returned 1 exit status