Я новичок в кодировании в cuda (и не очень опытный в C++), поэтому я читал, чтобы попытаться найти решение этой проблемы, но обычно не понимаю, что люди пытаются объяснить и еще не заработали.Использование классов шаблонов в коде cuda/C++
В принципе, у меня есть .CU файл, который содержит две вещи:
template <class ModelType>
__global__ void Stepkernel(ModelType *particles)
и:
template <class ModelType>
void runTest(ModelType *particles)
Я тогда заголовочный файл, SamplerI.h который я не писал, но я пытаюсь включить вызов функции ничтожной выше, поэтому ниже всех директив #includes я есть:
template <class ModelType>
void runTest(ModelType *particles);
и n позже в заголовке есть функция, в которой я включил вызов выше.
заголовок и связанные с ним файлы собраны в библиотеке libdnest, я скомпилировать файл .CU с NVCC -c step.cu, а затем связать с:
g++ -o main main.cpp step.o -ldnest
Теперь, если шаблон разве нет (то есть я просто иметь функцию пустоты без упоминания ModelType) все это идет большим, и он компилируется и работает, но как только я пытаюсь и включать в себя шаблон я получаю ошибку компиляции:
../../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++. Если вы больше комфортабельны в C#, вы можете проверить [CUDAfy.NET] (http://cudafy.codeplex.com/), инструментарий C# для программирования CUDA. –