我有一个带有 X 粒子的粒子系统。
每个粒子测试与其他粒子的碰撞。这使每帧 X*X = X^2 碰撞测试。对于 60f/s,这对应于每秒 60*X^2 次碰撞检测。
这些密集计算的最佳技术方法是什么?我应该使用 F#、C、C++ 或 C#,还是其他?
以下是限制条件
最后一个约束可能很奇怪,所以让我解释一下。
不管约束 3,给定一个具有巨大计算要求的问题,解决该问题的最佳方法是什么。
一种算法减少了问题;仍然相同的算法可能会根据技术表现不同。考虑 CLR 与原生 C 的优缺点。
最佳答案
简单的答案是“衡量它”。但是看看这张图(我从 this question 借来的——值得你阅读)。
C++ 可能比 MS 的 C# 实现(对于这个特定计算)快 10%,并且比 Mono 的 C# 实现更快。但在现实世界中,C++ 并不比 C# 快多少。
如果您正在处理核心数字运算,您将需要使用 CPU 的 SIMD/SSE 单元。这是 C# 通常不支持的东西 - 但 Mono 正在通过 Mono.Simd
添加支持。您可以从图中看到,使用 SIMD 单元可以显着提升两种语言的性能。
(值得注意的是,虽然 C++ 仍然比 C#“快”,但与选择使用哪种硬件相比,语言的选择对性能的影响很小。正如评论中提到的 - 你选择的算法将有目前效果最好。)
最后,正如 Jerry Coffin 在 his answer 中提到的,您也可以在 GPU 上进行处理。我想它会比 SIMD 更快(但正如我所说 - 测量它)。使用 GPU 的额外好处是让 CPU 可以自由地执行其他任务。缺点是您的最终用户需要合理的 GPU。
关于c# - 对于计算需求巨大的粒子系统,该使用哪些技术?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4045915/