私はcudaでコーディングするのは初めてです(そしてc ++で大規模な経験はありません)ので、この問題の解決策を見つけようと読んでいますが、人々が試みて説明することを一般的に理解しておらず、まだ理解していません働く。
基本的に、次の 2 つを含む .cu ファイルがあります。
template <class ModelType>
__global__ void Stepkernel(ModelType *particles)
と:
template <class ModelType>
void runTest(ModelType *particles)
次に、ヘッダー ファイル SamplerI.h を書きませんでしたが、上記の void 関数への呼び出しを含めようとしているので、すべての #includes の下に:
template <class ModelType>
void runTest(ModelType *particles);
その後、ヘッダーの後半に、上記の呼び出しを含めた関数があります。
ヘッダーと関連ファイルはライブラリ libdnest にコンパイルされます。.cu ファイルを nvcc -c step.cu でコンパイルし、次のようにリンクします。
g++ -o main main.cpp step.o -ldnest
ここで、テンプレートが存在しない場合 (つまり、ModelType について言及されていない void 関数がある場合)、これはすべてうまくいき、コンパイルして実行されますが、テンプレートをインクルードしようとするとすぐに、次のコンパイル エラーが発生します。
../../include/SamplerImpl.h: In member function ‘bool DNest3::Sampler<ModelType>::step() [with ModelType = Banana]’:
../../include/SamplerImpl.h:121: instantiated from ‘void DNest3::Sampler<ModelType>::run() [with ModelType = Banana]’
main.cpp:37: instantiated from here
../../include/SamplerImpl.h:159: error: no matching function for call to ‘runTest(Banana*)’
そして、それを修正するために何をすべきかわかりません...
誰にもアイデアはありますか?十分に説明していない場合はお知らせください。さらに情報を含めてみますが、何が重要なのか本当にわかりません。
乾杯リンドリー