Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: suffix or operands invalid for `vbroadcastss'

I'm trying to install annoy via pip install annoy on a CentOS 6.5 server, but got the following errors. Any idea? I found VBROADCASTSS in here, but still have no idea how to fix these error.

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/xxx/.pyenv/versions/2.7.10/include/python2.7 -c src/annoymodule.cc -o build/temp.linux-x86_64-2.7/src/annoymodule.o -O3 -march=native -ffast-math
cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++
In file included from /home/xxx/.pyenv/versions/2.7.10/include/python2.7/Python.h:8:0,
                 from src/annoymodule.cc:16:
/home/xxx/.pyenv/versions/2.7.10/include/python2.7/pyconfig.h:1188:0: warning: "_POSIX_C_SOURCE" redefined
 #define _POSIX_C_SOURCE 200112L
 ^
In file included from /usr/include/stdio.h:28:0,
                 from src/annoylib.h:18,
                 from src/annoymodule.cc:15:
/usr/include/features.h:162:0: note: this is the location of the previous definition
 # define _POSIX_C_SOURCE 200809L
 ^
In file included from /home/xxx/.pyenv/versions/2.7.10/include/python2.7/Python.h:8:0,
                 from src/annoymodule.cc:16:
/home/xxx/.pyenv/versions/2.7.10/include/python2.7/pyconfig.h:1210:0: warning: "_XOPEN_SOURCE" redefined
 #define _XOPEN_SOURCE 600
 ^
In file included from /usr/include/stdio.h:28:0,
                 from src/annoylib.h:18,
                 from src/annoymodule.cc:15:
/usr/include/features.h:164:0: note: this is the location of the previous definition
 # define _XOPEN_SOURCE 700
 ^

/tmp/ccfNu0mQ.s: Assembler messages:
/tmp/ccfNu0mQ.s:21160: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:21163: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:21532: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:24347: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:24350: Error: suffix or operands invalid for `vbroadcastss'
/tmp/ccfNu0mQ.s:24718: Error: suffix or operands invalid for `vbroadcastss'
error: command 'gcc' failed with exit status 1
like image 504
Jon Avatar asked Oct 18 '15 03:10

Jon


2 Answers

I use gcc -march=native -Q --help=target to compare the gcc settings on several Linux machines. I find out the main difference is that the -march line on the failed machine is haswell, and others are something like core.... Here's is the corresponding outputs from other servers:

CentOS release 6.5 (Final) - -march=corei7-avx

CentOS Linux 7 (Core) - -march=core-avx-i

Debian GNU/Linux 7 (wheezy) - -march=core-avx2

I guess the errors come from the different instruction sets gcc used. In annoy's setup.py, the -march=native in line extra_compile_args=['-O3', '-march=native', '-ffast-math'] means gcc will attempt to detect the processor and automatically set appropriate flags for it. So I change this flag to -march=corei7-avx in setup.py and the errors gone.

See -march in here for details if you are interested.

Updates

After confirming with the server admins, this error is due to the CentOS loader software being older than the new Haswell CPUs in the server. Installing a recent version of binutils package can also solve the problem.

like image 178
Jon Avatar answered Oct 27 '22 10:10

Jon


Your version of binutils is too old to support AVX/AVX2 instructions, which have been detected as available on your processor. You need binutils 2.22 or newer for AVX support.

like image 44
李桂宝 Avatar answered Oct 27 '22 10:10

李桂宝