在老版本gcc下编译numpy

去年在装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一下,没准能减缓老年痴呆的发展~

 

This entry was posted in linux, machine learning and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *