Я перехожу в C ++ / Cuda и столкнулся с ошибкой компиляции «неразрешенный внешний символ threadIdx» в «MortalityTable.obj».
Я создал новый проект C ++ Runtime C ++, затем компилируется и работает нормально. Затем добавили класс MortalityTable.cu
и .h
, без кода Cuda, просто обычный C ++. Это компилируется и работает нормально.
Ошибка начинается, когда я пытаюсь добавить ядро Cuda (если я его закомментирую, все хорошо). У меня есть эти заголовки в MortalityTable.cu:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
И это мое ядро в том же файле
__global__
void DevPLE(double* devple, double* devQxt, int maxAge, int years) {
int i = threadIdx.x;
double surv = 0, ple = 0;
for (int age = 0; age < maxAge; age++) {
surv = surv * (1.0f - devQxt[age * years + i]);
ple += surv;
}
devple[i] = ple + 0.5;
}
Есть идеи, как я могу заставить это скомпилировать и запустить? У меня все еще есть пример кода в kernel.cu
, когда вы создаете новый Cuda Runtime Project, он имеет те же заголовки и работает. Таким образом, кажется, что настройка проекта в порядке, но по какой-то причине не работает для MortalityTable.cu ...