簡體   English   中英

在Cuda / C ++代碼中使用Template類

[英]Using Template classes in cuda / c++ code

我是使用cuda進行編碼的新手(並且在c ++中沒有豐富的經驗),所以我一直在閱讀以嘗試找到解決此問題的方法,但是通常不了解人們嘗試解釋的內容,並且尚未了解它工作。

基本上,我有一個.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庫中編譯,我使用nvcc -c step.cu編譯.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*)’

而且我不知道該怎么辦才能解決它...

有人有什么想法嗎? 如果我沒有足夠好地解釋,請告訴我,我將嘗試包括更多信息,我真的不知道重要的是什么。

干杯林德利

您需要在使用該模板的源文件中包含模板,以便編譯器將其實例化。

請注意,C ++ 11引入了“ extern”,但並非所有編譯器都支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM