巨大的计算需求的粒子系统使用什么技术?
作者:互联网
我有一个带有X个粒子的粒子系统.
每个粒子测试与其他粒子的碰撞.这样每帧进行X * X = X ^ 2个碰撞测试.对于60f / s,这相当于每秒60 * X ^ 2碰撞检测.
这些密集计算的最佳技术方法是什么?我应该使用F#,C,C或C#,还是其他?
以下是约束
>代码使用最新的XNA用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.
标签:xna,game-physics,c 来源: https://codeday.me/bug/20191023/1915344.html