Cuda 物理引擎需要的建议
我最近开始了一个项目,建立一个物理引擎。 我希望你能给我一些关于这方面的文档和/或最佳技术的建议 首先,我知道这是对手头任务的强烈推荐,我想知道你是否可以给我第二个意见。我应该得到它吗? 另外,在浏览亚马逊时,我偶然发现了一个问题,因为我想为游戏构建我的物理引擎,我想这可能也是一本不错的书 第二,我知道模拟物理是高度计算密集型的,所以我想使用CUDA或OpenCL。现在我倾向于OpenCL,因为它可以在NVIDIA和ATI芯片组上工作。你们有什么建议Cuda 物理引擎需要的建议,cuda,opencl,game-physics,physics-engine,Cuda,Opencl,Game Physics,Physics Engine,我最近开始了一个项目,建立一个物理引擎。 我希望你能给我一些关于这方面的文档和/或最佳技术的建议 首先,我知道这是对手头任务的强烈推荐,我想知道你是否可以给我第二个意见。我应该得到它吗? 另外,在浏览亚马逊时,我偶然发现了一个问题,因为我想为游戏构建我的物理引擎,我想这可能也是一本不错的书 第二,我知道模拟物理是高度计算密集型的,所以我想使用CUDA或OpenCL。现在我倾向于OpenCL,因为它可以在NVIDIA和ATI芯片组上工作。你们有什么建议 PS:我将在Linux上实现C++。 谢谢
PS:我将在Linux上实现C++。
谢谢。以下是关于选择CUDA或OpenCL的答案。我没有推荐书 如果您想在NVIDIA和ATI芯片组上运行您的程序,那么OpenCL将使这项工作更容易。但是,您需要编写每个内核的不同版本,以在每个芯片组上获得良好的性能。例如,在ATI卡上,您可能希望使用float4/int4数据类型手动矢量化代码(或接受近4倍的性能损失),而NVIDIA使用标量数据类型的效果更好
如果您只针对NVIDIA,那么CUDA编程会更方便。以下是关于CUDA或OpenCL选择的答案。我没有推荐书 如果您想在NVIDIA和ATI芯片组上运行您的程序,那么OpenCL将使这项工作更容易。但是,您需要编写每个内核的不同版本,以在每个芯片组上获得良好的性能。例如,在ATI卡上,您可能希望使用float4/int4数据类型手动矢量化代码(或接受近4倍的性能损失),而NVIDIA使用标量数据类型的效果更好
如果您只针对NVIDIA,那么CUDA编程就更方便了。我建议首先规划一个简单的游戏作为您引擎的测试用例。拥有一个基本的游戏将推动功能和API的开发。在没有明确目标的情况下编写引擎会增加项目的风险。虽然我同意出于性能原因,nVidia和ATi应被视为单独的目标,但我建议您从两者开始
我亲自写了一个物理引擎:德雷克的财富——PS3游戏,我在C++中做了一个操作,当它工作时,通过一个优化来优化它,然后把它放在SPU上。请注意,由于时间的限制,我只做了最初想做的一小部分。在那之后,我进行了一次迭代,将数据阶段分离出来,并形成一个数据转换管道。这一点很重要,因为无论是CPU、GPU还是SPU,运行非平凡代码的现代处理器大部分时间都在等待缓存。您必须特别注意数据结构和管道,以便在任何阶段都有一个小的工作数据集。例如,首先我做broadphase,所以我不需要形状,但我需要世界空间边界框。因此,我将边界框拆分为单独的数组,并在另一个过程中一起计算它们,以最佳方式写出它们。作为bbox计算的输入,我需要形状变换和它们的一些边界,但不一定是整个形状。在broadphase之后,我计算/更新sim岛,同时执行窄相位,我确实需要这些形状。等等——我在一篇文章中用图片描述了这一点
我想我想说的是以下几点:提出建议很容易。如果你想做点什么,就去做吧,我们坐下来评论:)我建议首先计划一个简单的游戏作为你引擎的测试用例。拥有一个基本的游戏将推动功能和API的开发。在没有明确目标的情况下编写引擎会增加项目的风险。虽然我同意出于性能原因,nVidia和ATi应被视为单独的目标,但我建议您从两者开始
我亲自写了一个物理引擎:德雷克的财富——PS3游戏,我在C++中做了一个操作,当它工作时,通过一个优化来优化它,然后把它放在SPU上。请注意,由于时间的限制,我只做了最初想做的一小部分。在那之后,我进行了一次迭代,将数据阶段分离出来,并形成一个数据转换管道。这一点很重要,因为无论是CPU、GPU还是SPU,运行非平凡代码的现代处理器大部分时间都在等待缓存。您必须特别注意数据结构