0
我在.cu文件中有一個CUDA內核,而在另一個.cu文件中有另一個CUDA內核。我知道,通過動態並行性,我可以從父內核調用另一個CUDA內核,但是我想知道是否有任何方法可以使用駐留在另一個.cu文件中的子內核來執行此操作。將內核鏈接在一起
我在.cu文件中有一個CUDA內核,而在另一個.cu文件中有另一個CUDA內核。我知道,通過動態並行性,我可以從父內核調用另一個CUDA內核,但是我想知道是否有任何方法可以使用駐留在另一個.cu文件中的子內核來執行此操作。將內核鏈接在一起
是的,你可以。
關鍵是使用單獨的編譯與設備代碼鏈接,這是available with nvcc。由於這已經是使用dynamic parallelism所必需的,這裏沒有什麼新東西。
這裏有一個簡單的例子:
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
感謝羅伯特!如果我可以更詳細一點:我可以使用包含外部設備功能的PTX文件嗎?它可以生成一個對象文件嗎? –
這不是一件小事或一個細節。如果這是您的興趣,我建議將其作爲一個新的SO問題。 –
會做!有道理:http://stackoverflow.com/questions/20657004/cuda-linking-a-kernel-to-a-ptx-function –