Assembly 如何找到XMM最大值

Assembly 如何找到XMM最大值,assembly,x86,max,simd,sse,Assembly,X86,Max,Simd,Sse,我需要在xmm寄存器中找到最大值。现在,在我编写的代码中有以下部分: comiss xmm2,xmm4 ; if(R[i*M+j]>Rmax) ja UpateRmax 现在这是标量版本。我试图优化到一个压缩版本,但我不知道如何从xmm2中假设的4个值中获取最大值,一旦我用xmm2中的4个值进行了测试 你能帮忙吗?不清楚你在做什么,但是考虑在循环中保持4个最大值,在速度不再重要的时候选择循环中最大的那些。我假设你在 XMM2< /代码>中有四个16位值。请详细说明你的问题。

我需要在xmm寄存器中找到最大值。现在,在我编写的代码中有以下部分:

comiss xmm2,xmm4        ; if(R[i*M+j]>Rmax)
ja UpateRmax
现在这是标量版本。我试图优化到一个压缩版本,但我不知道如何从xmm2中假设的4个值中获取最大值,一旦我用xmm2中的4个值进行了测试


你能帮忙吗?

不清楚你在做什么,但是考虑在循环中保持4个最大值,在速度不再重要的时候选择循环中最大的那些。我假设你在<代码> XMM2< /代码>中有四个16位值。请详细说明你的问题。考虑使用<代码> PMAXSW 。我猜它的4个x浮点在这里,在这种情况下,你可以在循环中使用<代码> Max PS >代码,然后在最后使用一个水平最大值(使用2×<代码> Max PS < /代码>和2个x移位)。抱歉,混淆:是的,我在XMM0登记器中有4个浮点。当循环到达我发布的步骤时,我需要将这4个浮点数与xmm2中包含的单个值进行比较,如果控件运行良好,最终替换它。你建议我使用哪一条指令?@PietroGerace所有这些指令,计算水平最大值需要4次运算。这就是为什么建议将水平部分延迟到循环之后。