Valgrind 非法指令 AVX
Valgrind illegal instruction AVX
我在使用 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 的寄存器感知编程,我想知道。
提前致谢
mm_broadcast_ss
转换为单个 CPU 指令,它需要 AVX instruction set. You may need a more up-to-date valgrind to support that instruction, at least release 3.8.0 (10 August 2012).
请参阅 Valgrind core documentation 以获取解释。
您使用的是 2011 年 11 月发布的非常旧的 valgrind 3.7.0。它不支持 AVX / AVX2。
在 3.8.0 中添加了对 AVX 的支持,在 3.9.0 中添加了对 AVX2 的支持。最新可用版本是 2014 年 11 月发布的 3.10.1。
我在使用 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 的寄存器感知编程,我想知道。
提前致谢
mm_broadcast_ss
转换为单个 CPU 指令,它需要 AVX instruction set. You may need a more up-to-date valgrind to support that instruction, at least release 3.8.0 (10 August 2012).
请参阅 Valgrind core documentation 以获取解释。
您使用的是 2011 年 11 月发布的非常旧的 valgrind 3.7.0。它不支持 AVX / AVX2。
在 3.8.0 中添加了对 AVX 的支持,在 3.9.0 中添加了对 AVX2 的支持。最新可用版本是 2014 年 11 月发布的 3.10.1。