我有一个带有 X 粒子的粒子系统。
每个粒子测试与其他粒子的碰撞。这使每帧 X*X = X^2 碰撞测试。对于 60f/s,这对应于每秒 60*X^2 次碰撞检测。

这些密集计算的最佳技术方法是什么?我应该使用 F#、C、C++ 或 C#,还是其他?

以下是限制条件

  • 代码是用C#编写的,使用最新的XNA
  • 多线程可以考虑
  • 没有特殊算法来测试与最近邻居的碰撞或减少问题

  • 最后一个约束可能很奇怪,所以让我解释一下。
    不管约束 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/

    10-11 22:34
    查看更多