重複の可能性:
C++ で cuda 関数呼び出しを呼び出すことはできますか?
私は機能を持っています
__global__ void Function(int *A, int *B, int N) {
calculations...
}
void Function_Wrapper(int* a_h, int* b_h) {
dimGrid, dimBlock;
Function<<<dimGrid, dimBlock>>>(a_d,b_d,n);
}
.cu ファイルと関数内
int main() {
Create data and other crap...
Function_Wrapper (a_h, b_h);
}
しかし、すべてをコンパイルしようとすると、次のようになります。
cmain.cpp:39: エラー: 'Function_Wrapper' はこのスコープで宣言されていません
私は次のようにコンパイルしています:
all: program
program: cudacode.o
g++ -o ctp -L /usr/local/cuda/lib64 -lcuda -lcudart cmain.cpp cudacode.o
cudacode.o:
nvcc -c -arch=sm_20 cmain.cu
clean: rm -rf *.o
私は何を間違っていますか?
編集:メインファイルの外部関数宣言で欠落している関数の問題を修正しましたが、まだいくつかの問題があります。新しいメイクファイル:
all: program
program: cudacode.o
g++ -o ctp -L /Developer/NVIDIA/CUDA-5.0/lib -lcudart cmain.cpp cudacode.o
cudacode.o:
nvcc -c -arch=sm_20 cmain.cu -o cudacode.o
clean: rm -rf *.o
新しいエラー メッセージ:
g++ -o ctp -L /開発者/NVIDIA/CUDA-5.0/lib -lcudart cmain.cpp cudacode.o
ld: 警告: ファイル cudacode.o を無視します。ファイルは、リンクされているアーキテクチャではない i386 用にビルドされました (x86_64): cudacode.o
アーキテクチャ x86_64 の未定義のシンボル:
「Function_Wrapper(int*, int*)」、以下から参照:
ccjLlw82.o の _main
ld: アーキテクチャ x86_64 のシンボルが見つかりません
collect2: ld が 1 つの終了ステータスを返しました
make: *** [プログラム] エラー 1
PS: macosx の使用