У меня есть ядро CUDA в файле .cu и другое ядро CUDA в другом файле .cu. Я знаю, что с динамическим параллелизмом я могу вызвать другое ядро CUDA из родительского ядра, но я хотел бы знать, есть ли способ сделать это с дочерним ядром, находящимся в другом файле .cu.
Связать ядра вместе
Ответы (1)
Да, ты можешь.
Ключевым моментом является использование раздельной компиляции со связыванием кода устройства, что доступно с nvcc. Поскольку это уже требуется для использования динамического параллелизм, здесь действительно нет ничего нового.
Вот простой пример:
ch_kernel.cu:
#include <stdio.h>
__global__ void ch_kernel(){
printf("hello from child kernel\n");
}
main.cu:
#include <stdio.h>
extern __global__ void ch_kernel();
__global__ void kernel(){
ch_kernel<<<1,1>>>();
}
int main(){
kernel<<<1,1>>>();
cudaDeviceSynchronize();
}
скомпилировать с:
nvcc -arch=sm_35 -rdc=true -o test ch_kernel.cu main.cu -lcudadevrt
person
Robert Crovella
schedule
17.12.2013
Спасибо Роберт! Еще одна деталь, если позволите: могу ли я использовать файл PTX, в котором содержится функция внешнего устройства? Может ли объектный файл быть сгенерирован им?
- person Marco A.; 17.12.2013
Это не мелочь и не мелочь. Я предлагаю представить это как новый вопрос SO, если это вас интересует.
- person Robert Crovella; 17.12.2013
Сделаю! Имеет смысл: stackoverflow .com/questions/20657004/
- person Marco A.; 18.12.2013