SSE跨平台指令集

SSE set of instructions for crossplatform

我想在 VS2017 中使用 SSE 指令编写数学函数。我可以试试:

__m128 addWithIntrinsics(__m128 a, __m128 b)
{
    __m128 r = _mm_add_ps(a, b);
    return r;
}

__m128 addWithAssembly(__m128 a, __m128 b)
{
    __m128 r;
    __asm
    {
        movaps xmm0, xmmword ptr[a]
        movaps xmm1, xmmword ptr[b]
        addps xmm0, xmm1
        movaps xmmword ptr[r], xmm0
    }
    return r.
}

但我不确定...如果我像这样编写数学运算,此代码是否是跨平台的(就仅在 Windows 上工作而言,但在不同的处理器和那些做不支持 SSE),或者我是否需要在编译阶段确定处理器是否使用这些指令,如果不支持则使用通常的指令?执行此操作的最佳方法是什么?我的两种变体中哪一种更可取?

如果您希望能够在没有 SSE 的处理器上 运行,您需要编写两个版本——有和没有。您需要 check at runtime 您 运行 正在使用的当前机器是否支持 SSE 并根据结果使用适当的功能。

至于哪个更好——那是一个品味问题。我更喜欢用 C++ 编程,所以我更喜欢内在函数版本。但是如果你和一群汇编程序员一起工作,他们可能更喜欢汇编版本。