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