我想计算受特定电位影响的粒子轨迹,这是典型的N体问题。我一直在研究利用GPU(例如CUDA)的方法,它们似乎有利于大N(20000)的模拟。这是有道理的,因为最昂贵的计算通常是找到力量。
然而,我的系统将具有“低”N(小于20),许多不同的电位/因子和许多时间步长。将此系统移植到GPU是否值得?
基于Fast N-Body Simulation with CUDA文章,似乎有效地为不同的计算(例如加速度和力)提供不同的内核。对于具有低N的系统,似乎复制到设备或从设备复制的成本实际上是显着的,因为对于每个时间步骤,必须从设备复制和检索用于EACH内核的数据。
任何想法都会非常感激。
答案 0 :(得分:3)
如果您需要并行模拟的实体少于20个,我只需在普通的多核CPU上使用并行处理,而不必担心使用GPU。
使用多核CPU将更容易编程,并避免将所有操作转换为GPU操作的步骤。
此外,正如您已经建议的那样,使用GPU的性能提升很小(甚至是负数),只需少量流程。
答案 1 :(得分:1)
无需将设备中的结果复制到主机并在时间步之间返回。只需在GPU上运行整个模拟,只有在计算了几个时间步后才能复制结果。
您需要运行模拟多少个不同的潜力?足够只使用N体示例中的结构并仍然加载整个GPU?
如果没有,并且假设潜在的计算是昂贵的,我认为最好为每个对粒子使用一个线程,以使问题充分平行。如果每个潜在设置使用一个块,则可以将力写入共享内存__syncthreads(),并使用块的线程子集(每个粒子一个)来对力进行求和。再次__syncthreads(),并继续下一步。
如果潜在的计算并不昂贵,那么首先可能值得探讨模拟的主要成本。