我有一些.cpp文件,这些文件实现了“平滑粒子”流体动力学,这是一种用于对流体流动进行建模的粒子方法。

这些粒子技术中最耗时的组件之一是在模拟的每个时间步中为每个粒子找到最近的邻居(K近邻或Range搜索)。

现在,我只想使用GPU和CUDA来加速邻居搜索例程,从而替换我当前基于CPU的邻居搜索例程。只有邻居搜索将在GPU上运行,而其余的模拟则在CPU上进行。

我的问题是,我应该如何编译整个代码?更具体地说,假设我在文件nsearch.cu中编写了邻居搜索内核函数。

然后,我应该将以前的所有.cpp文件的重命名为.cu文件,并使用nvcc重新编译整个集合(以及nsearch.cu)吗?至少对于简单的示例,nvcc 无法编译扩展名为.cpp的CUDA代码,即nvcc foo.cu可以编译,而nvcc hello.cpp不能。

简而言之,这个CUDA插件的结构应该是什么,我应该如何进行编译?

我正在使用 Ubuntu Linux 10.10,CUDA 4.0,NVIDIA GTX 570 (计算能力2.0)和 gcc 编译器进行工作

最佳答案

您需要编写nsearch.cu文件,并使用“nvcc -c -o nsearch.o”进行编译,然后将nsearch.o与主应用程序链接。必须有一个nsearch.h文件,该文件可以导出实际内核周围的包装器。

in nsearch.h :
void kern();

in nsearch.cu:
void __global__ kern__() {
}
void kern() {
  kern__<<<...>>>();
}

09-06 19:43