0

我正在 Direct3D 11 之上构建一个高性能 UI 布局引擎。该应用程序是使用 Visual Studio 2013 开发的,面向 x64,适用于 Windows 7(带有平台更新)及更高版本。

我需要对可视树中的 2D 元素进行矩阵转换,我想知道使用 DirextXMath 的内置(SIMD 优化)XMMATRIX及其相关函数是否对 2D 使用有效(因为它只需要 3x3 矩阵,而XMMATRIXet al 是 4x4 ),或者我是否应该推出自己的矩阵类/函数(不过可能没有任何特定于 SIMD 的代码)。

在我看来,整个 4x4 矩阵意味着要执行大量冗余计算,但与非 SIMD 3x3 矩阵工作相比,这可能会被 SIMD 指令所抵消。


编辑:关于“过早的优化是万恶之源”(及其衍生产品)的评论在这里是多余的(具有讽刺意味的是,还为时过早,因为您对项目一无所知 - 或者我)。这个问题总结了我对某些观点感兴趣/了解更多。

4

1 回答 1

1

布局引擎往往有很多链式转换,因此在 SSE 寄存器中使用(并在链的持续时间内保留)您的数据可能会提高性能(甚至比通常只有少数链式转换的典型游戏场景更是如此)。如果您打算在自定义类中使用 SSE,那么XMMATRIX可能会更快。由于每一行都适合 SSE 寄存器,因此列差异并不重要,但行差异将意味着额外的负载。尽管如此,SSE 的好处可能还是值得的。

也就是说,许多现代编译器现在自动向量化,所以你用 vanilla C++ 编写的自定义类可能最终会在幕后进行 SSE 优化。

无论哪种方式,如果您尚未针对缓存行为优化引擎,您可能不会看到性能上有任何差异。例如,如果您的引擎使用指针表示层次结构,并且您只需在需要时在堆上分配新元素,那么在等待内存(无论是否为 SSE)时,您都会颠簸缓存并有足够的时间来计算转换。

于 2014-10-01T16:32:10.163 回答