Короткий ответ: ты не можешь. CUDA поддерживает только внутреннюю связь, поэтому все, что нужно для компиляции ядра, должно быть определено в одной и той же единице перевода.
То, что вы могли бы сделать, это поместить функции в файл заголовка следующим образом:
// Both functions in func.cuh
#pragma once
__device__ inline int add(int a, int b)
{
return a+b;
}
__device__ inline void fun1(int a, int b)
{
int c = add(a,b);
}
и включите этот заголовочный файл в каждый файл .cu, который вам нужен для использования функций. Кажется, что созданная цепочка CUDA соблюдает ключевое слово inline
, и такого рода объявления не будут генерировать дубликаты символов ни на одной из платформ CUDA, которые я использую (не включая Windows). Я не уверен, предназначен ли он для работы или нет, поэтому cavaet emptor .