1

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

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

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

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

那么我应该所有以前 .cpp的文件重命名为.cu文件并使用重新编译整个集合(连同 nsearch.cu)nvcc吗?至少对于简单的示例,nvcc无法编译带有扩展名的 CUDA 代码,.cppnvcc foo.cu编译但nvcc hello.cpp不能编译。

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

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

4

2 回答 2

2

您需要编写 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__<<<...>>>();
}
于 2011-11-22T19:34:22.423 回答
0

这是对您的问题的更广泛的回答,因为我经历了与您非常相似的思考过程 - 将我的流体动力学代码移到 GPU 上,同时将其他所有内容留在 CPU 上。虽然我认为这是您应该开始的地方,但我也认为您应该开始计划将所有其他代码也转移到 GPU 上。我发现虽然 GPU 非常擅长进行我的模拟所需的矩阵分解,但 GPU 和 CPU 内存之间的内存边界非常慢,以至于大约 80-90% 的 GPU 模拟时间都花在了 cudaMemcpyDeviceToHost/ cudaMemcpyHostToDevice。

于 2011-12-05T16:27:54.360 回答