c++ - Valgrind 非法指令 AVX

标签 c++ c valgrind

我在使用 valgrind 评估我的程序时收到一些错误。更准确地说,我得到的错误是

vex amd64->IR:未处理的指令字节:0xC5 0xF8 0x28 0x0 0xC5 0xF8 0x29 0x45 ... ... 非法指令

我将问题分解为一个非常简单的例子

#include <immintrin.h>
int main() {
  float f __attribute__((aligned(16))); // No need to be aligned
  f = 2.0f;
  __m128 a = _mm_broadcast_ss(&f);
  return 0;
}

该程序是使用带有选项 -mavx 的 gcc 编译的。如果改用 SSE2 指令 _mm_set1_ps,则会发生相同的错误,但仅在使用 -mavx 编译时发生。使用-msse2 编译程序时,valgrind 没有报错。

我怀疑这是一个 valgrind 错误,但找不到关于 x86 的任何报告。我的机器是 Core-i7 Sandy-Bridge 和 valgrind 3.7.0 版。

如果有人有更好的替代 valgrind 的寄存器感知编程,我想知道。

提前致谢

最佳答案

您使用的是 2011 年 11 月发布的非常旧的 valgrind 3.7.0。它不支持 AVX/AVX2。

在 3.8.0 中添加了对 AVX 的支持,在 3.9.0 中添加了对 AVX2 的支持。最新的可用版本是 2014 年 11 月发布的 3.10.1。

Current releases

Release notes

关于c++ - Valgrind 非法指令 AVX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009094/

相关文章:

c - 链接后出现意外输出

c - Makefile没有找到规则

c++ - 运行程序时引用 vector 导致错误

c++ - localtime 和 asctime 不安全,但安全函数没有相同的参数

c - 如何交换C中地址中的值

c++ - Valgrind 使用 shared_ptr c++11 指示内存泄漏

c - valgrind 大小 1 的无效读取 - 比较期间发生

c - Valgrind 显示调用 pr_set_ptracer 时出错,vgdb 可能会阻塞

c++ - boost::boykov_kolmogorov_max_flow 的反向边缘图

c++ - std::getline 从 istream 到 string[] 多次空白