Вызов функции CUDA из другого файла - PullRequest
2 голосов
/ 06 июня 2011

У меня есть два файла cuda, скажем, A и B. Мне нужно вызвать функцию от A до B, как ..

__device__ int add(int a, int b) //this is a function in A
{
   return a+b;
}



__device__ void fun1(int a, int b) //this is a function in B
{
    int c = A.add(a,b);
}

Как я могу это сделать?

Могу ли я использовать статическое ключевое слово? Пожалуйста, дайте мне пример ..

Ответы [ 2 ]

4 голосов
/ 06 июня 2011

Короткий ответ: ты не можешь. 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 .

1 голос
/ 20 октября 2015

Я думаю, что пока что есть возможность решить эту проблему: Связывание с внешним классом CUDA и нерешенная внешняя функция в файле ptxas

Вы можете включить «Создать код перемещаемого устройства» в свойствах проекта VS-> CUDA C / C ++ -> Общий или использовать параметр компилятора -rdc = true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...