我正在寻找有关 Xbox 360 上 XNA 的一些见解,主要是是否可以在其 GPU 上运行基于矢量的浮点数学?
如果有办法,你能指出我正确的方向吗?
我并不声称自己是这方面的专家,但希望这可以为您指明一个有用的方向。
是否可以?是的。您可能已经知道 GPU 擅长此类计算(因此提出了问题),并且您确实可以使用 XNA 控制 GPU。它是否适合您的需求是另一回事。
要使用 GPU,您可能想要使用 HLSL 编写着色器。在Reimers的 XNA 环境中,您可能想通过它对 HLSL 进行了不错的介绍。值得注意的是,该教程侧重于让 GPU 进行与图形相关的运算,但您在着色器中编写的内容取决于您。如果您的基于矢量的浮点数学用于渲染(因此可以留在 GPU 域中),那么您很幸运,可以在这里停下来。
可能在屏幕上渲染不是您所追求的。现在,就进行数学运算而言,您在 HLSL 中拥有相当大的灵活性。然而,将结果输出到 CPU 并不是系统的设计方式。这对我来说变得越来越模糊,但 Shawn Hargreaves(XNA 开发人员)不止一次表示从 GPU 获取输出(除了在屏幕上渲染)是非常重要的,并且会影响性能。检索数据涉及对 GetData 的调用,这将导致管道停顿。
所以可以做到。XNA 框架将允许您为 360 编写着色器(支持 Shader Model 3.0 以及一些扩展),并且可以得到这些结果,尽管它可能不足以满足您的需求。
如上所述 - XBox360 完全能够进行任何 HLSL 计算,具体而言,它可以处理顶点和像素着色器模型 3 指令,并具有特定于平台的增强指令集。
由于 HLSL 实际上是基于矢量的,因此您拥有所需的所有工具 - 点、交叉、矢量运算和矩阵计算。如果您想将计算发送到 GPU 并在 CPU 上编辑/使用结果,您可以写入纹理,然后在 CPU 端获取它并对其进行解码 - 将其用于粒子或物理交互(例如水)很少您可能想要这样做的场合。