Visual Studio 调试器将 AVX 寄存器的上半部分设置为零

ana*_*lyg 5 c++ avx visual-studio visual-studio-debugging

在使用 AVX 调试一些代码时,我得到了毫无意义的结果。我将我的程序简化为以下内容:

#include <iostream>
#include <immintrin.h>

int main()
{
    while (1)
    {
        static float v[] = {1, 2, 3, 4, 5, 6, 7, 8};
        __m256 v8 = _mm256_load_ps(v);
        std::cout << v8.m256_f32[2] << v8.m256_f32[5];
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,它36无休止地打印,这是正确的(它打印3,然后打印6)。如果我在循环内的调试器中设置断点并执行单步操作,它会打印30. 如果我删除断点并继续程序,它会36再次开始打印。我在发布/调试、Win32/x86(4 种组合)中看到了相同的行为。

为了能够使用 AVX,我在 Configuration Properties - C/C++ - Code Generation 中将“Enable Enhanced Instruction Set”设置为“Advanced Vector Extensions (/arch:AVX)”。我忘记设置一些其他配置了吗?

由于这种行为,我无法使用调试器来调试我的真实程序(此处不包括在内)。这很烦人。

我做错了什么吗?我可以修复这种行为吗?

我的 Visual Studio 是:MS Visual Studio Professional 2017,版本 15.9.3。