2013-12-17 42 views
0

我在.cu文件中有一个CUDA内核,而在另一个.cu文件中有另一个CUDA内核。我知道,通过动态并行性,我可以从父内核调用另一个CUDA内核,但是我想知道是否有任何方法可以使用驻留在另一个.cu文件中的子内核来执行此操作。将内核链接在一起

回答

2

是的,你可以。

关键是使用单独的编译与设备代码链接,这是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 
+0

感谢罗伯特!如果我可以更详细一点:我可以使用包含外部设备功能的PTX文件吗?它可以生成一个对象文件吗? –

+0

这不是一件小事或一个细节。如果这是您的兴趣,我建议将其作为一个新的SO问题。 –

+0

会做!有道理:http://stackoverflow.com/questions/20657004/cuda-linking-a-kernel-to-a-ptx-function –