Я занимаюсь разработкой приложения CUDA 4.0, работающего на карте Fermi. Согласно спецификации, Fermi имеет Compute Capability 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 A.o -c A.cu -arch=sm_20
выходами Error: External calls are not supported (found non-inlined call to _ZN1B9functionBEv)
.
Я должен делать что-то не так, но что?