将内核链接在一起

时间:2013-12-17 14:30:28

标签: cuda nvcc

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

1 个答案:

答案 0 :(得分: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