Valgrind非法指令AVX

时间:2015-06-23 17:05:32

标签: 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替代方案来进行注册感知编程,我想知道。

提前致谢

2 个答案:

答案 0 :(得分:5)

您使用的是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

答案 1 :(得分:1)

mm_broadcast_ss转换为单个CPU指令,它需要AVX instruction set。您可能需要一个更新的valgrind来支持该指令,least release 3.8.0 (10 August 2012)

有关说明,请参阅Valgrind core documentation