3

我想计算受某些势能影响的粒子的轨迹,这是一个典型的 N 体问题。我一直在研究利用 GPU(例如 CUDA)的方法,它们似乎有利于大 N(20000)的模拟。这是有道理的,因为最昂贵的计算通常是找到力。

但是,我的系统将具有“低”N(小于 20)、许多不同的潜力/因素和许多时间步长。将此系统移植到 GPU 是否值得?

根据Fast N-Body Simulation with CUDA 一文,对于不同的计算(例如加速度和力)使用不同的内核似乎是有效的。对于具有低 N 的系统,似乎从设备复制到/从设备的成本实际上是巨大的,因为对于每个时间步,必须为每个内核从设备复制和检索数据。

任何想法将不胜感激。

4

2 回答 2

3

如果需要并行模拟的实体少于 20 个,我只会在普通的多核 CPU 上使用并行处理,而不用担心使用 GPU。

使用多核 CPU 将更容易编程,并且避免将所有操作转换为 GPU 操作的步骤。

此外,正如您已经建议的那样,使用 GPU 的性能增益将很小(甚至为负),而进程数量如此之少。

于 2012-09-26T11:53:15.730 回答
1

无需在时间步之间将结果从设备复制到主机并返回。只需在 GPU 上运行整个模拟,然后仅在计算了几个时间步后将结果复制回来。

运行模拟需要多少种不同的电位?仅使用 N 体示例中的结构并仍然加载整个 GPU 就足够了吗?

如果不是,并且假设潜在的计算很昂贵,我认为最好为每粒子使用一个线程,以使问题充分并行。如果每个潜在设置使用一个块,则可以将力写入共享内存 __syncthreads(),并使用块线程的子集(每个粒子一个)来对力求和。__syncthreads() 再次,并继续下一个时间步。

如果潜在的计算成本不高,则可能值得首先探索模拟的主要成本在哪里。

于 2012-09-26T09:29:06.930 回答