我想计算受某些势能约束的粒子的轨迹,这是一个典型的N体问题。我一直在研究利用GPU的方法(例如CUDA),它们似乎对大N (20000)的模拟有利。这是有道理的,因为最昂贵的计算通常是求力。
然而,我的系统将具有“低”N(小于20),许多不同的潜力/因素,以及许多时间步长。是否值得将此系统移植到GPU上?
根据Fast N-Body Simulation with CUDA的文章,对于不同的计算(如加速度和力),使用不同的内核似乎是有效的。对于低N的系统,似乎复制到设备/从设备复制的成本实际上是很大的,因为对于每个时间步,必须为每个内核从设备复制和检索数据。
任何想法都将不胜感激。
发布于 2012-09-26 19:53:16
如果你需要并行模拟的实体少于20个,我只会在普通的多核CPU上使用并行处理,而不会费心使用GPU。
使用多核CPU将更容易编程,并避免将所有操作转换为GPU操作的步骤。
此外,正如您已经建议的那样,使用GPU的性能增益将很小(甚至是负的),因为进程数量很少。
发布于 2012-09-26 17:29:07
不需要将结果从设备复制到主机,并在时间步长之间来回复制。只需在GPU上运行整个模拟,并仅在计算了几个时间步长后才将结果复制回来。
对于多少个不同的势,你需要运行模拟?是否足够使用N-body示例中的结构,并且仍然加载整个GPU?
如果不是,并且假设潜在的计算是昂贵的,我认为最好为每一对粒子使用一个线程,以便使问题足够并行。如果对每个潜在设置使用一个块,则可以将力写出到共享内存__syncthreads(),并使用块线程的子集(每个粒子一个)对力求和。__syncthreads(),然后继续下一个时间步。
如果潜在的计算并不昂贵,那么可能值得先探索一下模拟的主要成本在哪里。
https://stackoverflow.com/questions/12595009
复制相似问题