C++ ソース コードと CUDA の両方を使用するサンプル プログラムを使用しています。これは、私の 4 つのソース ファイルの重要な内容です。
matrixmul.cu (メインの CUDA ソース コード):
#include <stdlib.h>
#include <cutil.h>
#include "assist.h"
#include "matrixmul.h"
int main (int argc, char ** argv)
{
...
computeGold(reference, hostM, hostN, Mh, Mw, Nw); //reference to .cpp file
...
}
matrixmul_gold.cpp (C++ ソース コード、単一関数、メイン メソッドなし):
void computeGold(float * P, const float * M, const float * N, int Mh, int Mw, int Nw)
{
...
}
matrixmul.h (matrixmul_gold.cpp ファイルのヘッダー)
#ifndef matrixmul_h
#define matrixmul_h
extern "C"
void computeGold(float * P, const float * M, const float * N, int Mh, int Mw, int Nw);
#endif
assist.h (ヘルパー関数)
これらのファイルをコンパイルしてリンクして、うまく機能するようにしています。これまでのところ、次を使用してコンパイルされた matrixmul_gold.cpp を取得できます。
g++ -c matrixmul_gold.cpp
そして、次を使用して、エラーなしで CUDA ソース コードをコンパイルできます。
nvcc -I/home/sbu/NVIDIA_GPU_Computing_SDK/C/common/inc -L/home/sbu/NVIDIA_GPU_Computing_SDK/C/lib matrixmul.cu -c -lcutil_x86_64
しかし、2 つの .O ファイルができてしまいます。2 つの .O ファイルをリンクするさまざまな方法を試しましたが、今のところうまくいきません。適切なアプローチは何ですか?
更新: 要求に応じて、次の出力があります。
nm matrixmul_gold.o matrixmul.o | grep computeGold
nm: 'matrixmul.o': No such file
0000000000000000 T _Z11computeGoldPfPKfS1_iii
「matrixmul.o」が見つからないというエラーは、提案されたコンパイル コマンドを実行したときに実際にコンパイルが成功していないためだと思います。
nvcc -I/home/sbu/NVIDIA_GPU_Computing_SDK/C/common/inc -L/home/sbu/NVIDIA_GPU_Computing_SDK/C/lib -o matrixmul matrixmul.cu matrixmul_gold.o -lcutil_x86_64
更新 2: extern "C"
matrixmul_gold.cpp の最初から がありませんでした。私はそれを追加し、提案されたコンパイルコマンドはうまく機能します。ありがとうございました!