平衡 SSE 和 FPU

Posted

技术标签:

【中文标题】平衡 SSE 和 FPU【英文标题】:Balancing SSE & FPU 【发布时间】:2014-09-12 03:33:00 【问题描述】:

所以我有一些重量级算法,我更愿意在 VPU 上运行,但由于发生的事情太多,VPU 往往会饱和。有没有办法以某种方式做一些事情,比如“使用 VPU,如果 VPU 过载,请改用 FPU”,这样我就有了最大的吞吐量?

谢谢

【问题讨论】:

***.com/questions/16463567/sse-fpu-parallel 谢谢,抱歉我错过了。实际上关于那里制造的cmets的问题。我有一个钳位功能,如果我做一个独立的测试,它在 SSE 上比 FPU 快 4 倍。但是,如果我在整个程序中替换它(仅那个钳位功能),那么 Clamp SSE 与 Clamp FPU 的整体程序会更慢。有哪些可能的原因?由于 FPU 和 SSE 使用相同的单元,因此它在隔离时更快的事实意味着它作为更大程序的一部分仍然应该更快? 我认为这是不可能的,因为它们共享相同的执行单元,这意味着您无法明确告诉 CPU 一次运行它们。最后,x87 和其他增强指令不是硬件构造,如果部分电路重叠,我不会感到惊讶。 【参考方案1】:

回复:评论。在没有vzeroupper 的情况下混合 SSE 和 AVX 是一个问题(也许你用-march=native 或其他东西编译了其余的代码,而双精度数学正在使用 AVX)。或者您的 SSE 版本更大,并导致 I-cache 未命中。

或者你的微基准是伪造的,你的一些 SSE 例程被优化掉了。

要回答这个问题,需要更多关于您的代码的详细信息。就像你确定你的 FPU 代码真的是 x87,而不仅仅是 SSE 中的标量。

【讨论】:

以上是关于平衡 SSE 和 FPU的主要内容,如果未能解决你的问题,请参考以下文章

SSE FPU 并行

在 X87 和 SSE FPU 中用户定义的点之后截断浮点数和双精度数

Intel Xeon E5430 有多少个 FPU?

什么是 SSE 相当于 fstp?

修改函数以使用 SSE 内在函数

进行水平 SSE 向量求和(或其他缩减)的最快方法