是否有任何通用物理引擎可以对刚体进行大量模拟?我使用的是 Nvidia 的 PhysX,但这个引擎的重点是游戏开发、软体。我想知道是否存在运行在 PS3 单元处理器或 CUDA 内核之上的物理引擎,允许进行大规模的科学物理模拟。
2 回答
没有“通用”物理库。例如,您能想象一个考虑相对论效应的有用的手术软组织模拟吗?你可以想象更多的例子。
你谈论科学和刚体模拟,所以不清楚你想有多现实。刚体是一种近似:没有什么是绝对刚性的。但是,如果在您的模拟中没有发生太大的变形,并且您可以使用一堆不切实际的摩擦和快速运动近似值(所有视频游戏常见),并且您想要开箱即用的解决方案,我怀疑运行 Havok现代 CPU 将为您提供最佳性能。
PS/3 目前是最后一代。虽然我很喜欢为它写物理学,但我必须承认,现代的 6 核 i7 在理论上和实践上都比一个 Cell 提供了更多的性能。
CUDA 目前是未经证实的物理学技术。我没有写任何东西,但我是非常感兴趣的读者 :) 如果你想接近现代 CPU 的 IPC(每周期指令比),那么编写基于 CUDA 的物理的挑战非常重要,而且我不知道有谁成功地做到了这一点。如果你不接近基于 CPU 的物理的 IPC,那么 CUDA 物理就没有意义,因为它需要更多的努力。
算一下吧:500 美元的 Kepler GPU 有 1536 个内核 @1GHz = 1.5 petaflops。590 美元的 Sandy Bridge CPU 有 6 个内核/12 个超线程 AVX(8 宽)@3.8GHz = 0.36 petaflop。现在,如果您能够实现 5 比 1 奇偶校验(1 个 CPU 周期平均使用 5 个 GPU 周期),您的理论 CUDA 物理将以与 CPU 物理相同的速度运行。现在,高效地使用 12 个超线程和 AVX(8 宽 SIMD)并不容易。但是,跨 1536 个(!)CUDA 线程并行化物理任务,这些线程必须非常一致并且以更加可控的方式使用内存,这也不是一件小事。我并不是说这是不可能的(我很想尝试一下,但我有一份日常工作和其他宠物项目:))但是物理社区需要一些时间才能提出可以跨数千个线程扩展的东西。
最后速度提升只有 5 倍左右...:)
无论如何,如果您自己编写 sim,并且您不想要一般的刚体模拟,那么 CUDA 可能是您的朋友。例如,如果你想用相对论来模拟银河系中所有恒星的运动,但没有超新星和其他离散效应……很清楚如何将其传播到 1536 个(以及更多)线程中。但是,如果你想拥有一堆刚体,并以与游戏目前相同的方式进行模拟,那么你就不走运了
Simbody 多体动力学库用于包含数千个分子(刚体)的分子模拟。在 Simbody 的 GitHub 存储库中查看 GIF:http: //github.com/simbody/simbody。
该库还被生物力学界大量用于模拟人体运动。在这种情况下,人类被建模为一个刚体系统。
如果您正在寻找科学图书馆,那么您应该查看 Simbody。但是,它尚未用于 PS3 单元处理器或 CUDA 内核。