【发布时间】:2014-11-18 02:10:43
【问题描述】:
您好,我想将我的一些 CUDA 内核函数分离到一个单独的文件中,以便我可以重复使用它们。
假设我有两个文件:
-
A.cu包含可重用的 CUDA 内核。 -
B.cu包含一些内核以及主机函数,我想从我的 A.cu 文件中调用一些内核。
我该怎么做?
【问题讨论】:
您好,我想将我的一些 CUDA 内核函数分离到一个单独的文件中,以便我可以重复使用它们。
假设我有两个文件:
A.cu 包含可重用的 CUDA 内核。B.cu 包含一些内核以及主机函数,我想从我的 A.cu 文件中调用一些内核。我该怎么做?
【问题讨论】:
对于您所描述的情况,您可以以与在 C/C++ 中执行此操作的方式几乎相同的方式执行此操作。这是一个完整的示例:
$ cat B.cu
#include "myheader.h"
__global__ void kernel1(){
printf("Hello 1\n");
}
int main(){
kernel1<<<1,1>>>();
cudaDeviceSynchronize();
kernel2<<<1,1>>>();
cudaDeviceSynchronize();
return 0;
}
$ cat A.cu
#include "myheader.h"
__global__ void kernel2(){
printf("Hello 2\n");
}
$ cat myheader.h
#include <stdio.h>
__global__ void kernel2();
$ nvcc -arch=sm_20 -o test A.cu B.cu
$ cuda-memcheck ./test
========= CUDA-MEMCHECK
Hello 1
Hello 2
========= ERROR SUMMARY: 0 errors
$
【讨论】:
您可以做的是将您的内核原型放在一个 .cuh 文件中,然后将其包含在您的第二个文件中。 Here 是一种组织 CUDA 代码的方式。
【讨论】: