小编Lac*_*aci的帖子

为什么_mm256_load_pd编译为MOVUPD而不是MOVAPD?

为什么以下代码会导致未对齐的AVX指令(MOVUPD而不是MOVAPD)?我在Visual Studio 2015上编译了这个.如何告诉编译器我的数据确实是对齐的?

    const size_t ALIGN_SIZE = 64;
    const size_t ARRAY_SIZE = 1024;

    double __declspec(align(ALIGN_SIZE)) a[ARRAY_SIZE];
    double __declspec(align(ALIGN_SIZE)) b[ARRAY_SIZE];

    //Calculate the dotproduct
    __m256d ymm0 = _mm256_set1_pd(0.0);
    for (int i = 0; i < ARRAY_SIZE; i += 8)
    {
        __m256d ymm1 = _mm256_load_pd(a + i); 
        __m256d ymm2 = _mm256_load_pd(b + i);
        __m256d ymm3 = _mm256_mul_pd(ymm1, ymm2);
        ymm0 = _mm256_add_pd(ymm3, ymm0);

        __m256d ymm4 = _mm256_load_pd(a + i + 4);
        __m256d ymm5 = _mm256_load_pd(b + i + 4);
        __m256d ymm6 = _mm256_mul_pd(ymm4, ymm5); …
Run Code Online (Sandbox Code Playgroud)

c alignment avx visual-studio

5
推荐指数
1
解决办法
501
查看次数

标签 统计

alignment ×1

avx ×1

c ×1

visual-studio ×1