Я разрабатываю приложение CUDA 4.0, работающее на карте Fermi. Согласно спецификациям, Fermi имеет вычислительные возможности 2. 0 и, следовательно, должен поддерживать не встроенные вызовы функций.
Я компилирую каждый имеющийся у меня класс с nvcc 4.0 в отдельный файл obj. Затем я связываю их все с g ++ - 4.4.
Рассмотрим следующий код:
[Файл A.cuh]
#include <cuda_runtime.h>
struct A
{
__device__ __host__ void functionA();
};
[Файл B.cuh]
#include <cuda_runtime.h>
struct B
{
__device__ __host__ void functionB();
};
[Файл A.cu]
#include "A.cuh"
#include "B.cuh"
void A::functionA()
{
B b;
b.functionB();
}
Попытка скомпилировать A.cu с nvcc -o Ao -c A.cu -arch = sm_20
output Ошибка: внешние вызовы не поддерживаются ( обнаружил невстроенный вызов _ZN1B9functionBEv)
.
Я должен делать что-то не так, но что?