去年在装numpy的时候其实就遇到了这个问题,今年有同学又提出来,已经没有印象了,又重新摸索了一遍才又记了起来。
问题是这样的:在低于gcc 3.4.6的版本上build numpy会报以下的错:
numpy/core/src/multiarray/einsum.c.src:852: error: unrecognizable insn:(insn:HI 440 228 481 14 /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/xmmintrin.h:915 (set (reg:SF 148)??????? (vec_select:SF (reg/v:V4SF 67 [ accum_sse ])??????????? (parallel [??????????????????? (const_int 0 [0x0])??????????????? ]))) -1 (insn_list 213 (nil))??? (nil))numpy/core/src/multiarray/einsum.c.src:852: internal compiler error: in extract_insn, at recog.c:2083
这个的原因是老版本的gcc对SSE指令集的支持不好,导致编译报错,解决的方法也很简单,直接在numpy/core/src/multiarray/einsum.c 里面加上以下两句代码就行了(当然位置得保证在EINSUM_USE_SSE赋值之后使用之前。
#define EINSUM_USE_SSE1 0#define EINSUM_USE_SSE2 0
参考来源是:http://comments.gmane.org/gmane.comp.python.numeric.general/46795
因为考虑到这个问题由于失忆症的缘故,忘得一干二净(最后重新查看了当年的代码才记起来),所以觉得写个博客mark一下,没准能减缓老年痴呆的发展~