gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:34:51 25 4
gpt4 key购买 nike

在使用 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];
}
}
当我运行这个程序时,它会打印 36无休止地,这是正确的(它打印 3 ,然后是 6 )。如果我在循环内的调试器中设置断点并执行单步操作,它会打印 30 .如果我删除断点并继续程序,它会开始打印 36再次。我在 Release/Debug、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。

最佳答案

Visual Studio 2017 15.9.7 fixes a bug这会在调试时损坏 AVX/MPX/AVX512 寄存器,您应该更新到最新版本,15.9.3 已经将近 3 年了。

关于c++ - Visual Studio 调试器将 AVX 寄存器的上半部分设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68707755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com