SSE FPU 并行

Posted

技术标签:

【中文标题】SSE FPU 并行【英文标题】:SSE FPU parallel 【发布时间】:2013-05-09 13:59:36 【问题描述】:

我想知道是否可以将 SSE 与 x87 并行使用。所以考虑下面的伪代码,

1: sse_insn 2:x87_insn

假设它们可以并行执行,管道是否会并行执行 1 和 2?

【问题讨论】:

去试试吧。进行测量。报告结果。 【参考方案1】:

在所有现代(和更早的)处理器中,x87 和 SSE 指令使用相同的执行单元,因此您不太可能从此类代码中受益匪浅。可能存在非常特殊的情况,您可以诱使处理器运行,例如 x87 除法与 SSE 添加并行,或类似的东西,但如果您只是执行类似操作的大循环,几乎可以肯定没有任何好处.

【讨论】:

所以有可能(我的目标处理器是新一代 i7,而不是 p3,所以我可以安全地使用 sse 对 x87 寄存器进行变异)? 您不太可能从中受益,就像我的回答所说的那样(不太可能在大写字母中强调)。换句话说,一旦指令被充分解码,它就是相同的管道,无论是 x87 还是 SSE 指令 - 是的,有单独的寄存器,但任何 FPU 指令不太可能受到寄存器依赖性的限制,这样你就可以从中受益。 如果我要量化一些数据(提前)会怎样。理论上我可以将 ALU 与 x87/sse 并行使用吗? 是的,大多数 SSE/x87 指令将与大多数非 FPU 指令并行运行。处理器对此有相当多的“前瞻”——我认为 AMD 处理器至少有 32 条(RISC)指令可以前瞻,所以再一次,重新排列代码可能不会带来巨大的好处。 我认为关键不是管道而是超标量架构。 i7 有 6 个端口,可以同时进行 1 个 AVX 加法和 1 个 AVX 乘法。那么同时做x87和SSE应该没问题吧?

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

使用 SSE / AVX 并行化 C 代码

使用 SSE 矢量化在 OpenMP 中将内部循环与残差计算并行化

SSE:质量整数转换+SSE 比 FPU 慢?

平衡 SSE 和 FPU

我需要一个 SSE shuffle 例程来避免并行减法中的负数

带有服务器发送事件的 JMeter 并行请求