VS2013中SSE2代码的运行错误

Running error of SSE2 code in VS2013

本文关键字:运行 错误 代码 SSE2 VS2013      更新时间:2023-10-16

我有以下SIMD代码试图在vs2013中运行。它可以很好地编译,但不能运行。有人知道为什么吗?

#include <cstdio>
#include <xmmintrin.h>
int main() 
{
    const size_t num = 7;
    float a[num] = { 1, 2, 3, 4, 5, 6, 7 };
    float b[num] = { 1, -1, -2, 1, -3, -2, 5 };
    float c[num];
    __m128 A, B, C;
    A = _mm_load_ps(&a[0]); // <== crash here.
    B = _mm_load_ps(&b[0]);
    C = _mm_add_ps(A, B);
    _mm_store_ps(&c[0], C);
    return 0;
}

使用这些内部函数加载或存储到的地址需要16字节对齐(可被16整除)。看见https://msdn.microsoft.com/en-us/library/zzd50xxt(v=vs.90).aspx

您应该这样声明变量a、b和c:

__declspec(align(16)) float a[num] = { 1, 2, 3, 4, 5, 6, 7 };