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 矢量化在 OpenMP 中将内部循环与残差计算并行化