Valgrind非法指令AVX

Valgrind illegal instruction AVX

本文关键字:AVX 指令 非法 Valgrind      更新时间:2023-10-16

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

vex amd64->IR:未处理的指令字节:0xC5 0xF8 0x28 0x0 0xC5 0xF80x29 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。

当前版本

发行说明

mm_broadcast_ss转换为单个CPU指令,它需要AVX指令集。您可能需要一个最新的valgrind来支持该指令,至少版本3.8.0(2012年8月10日)。

有关解释,请参阅Valgrind核心文档。