2015-10-18 2 views
3

Я пытаюсь установить annoy через pip install annoy на сервер CentOS 6.5, но получил следующие ошибки. Есть идеи? Я нашел VBROADCASTSS в here, но до сих пор не знаю, как исправить эту ошибку.Ошибка: суффикс или операнды недействительны для `vbroadcastss '

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 

ответ

3

Я использую gcc -march=native -Q --help=target для сравнения ССАГПЗ настройки на нескольких машинах Linux. Я узнаю, что основное отличие заключается в том, что линия -march на неудавшейся машине haswell, а другие - что-то вроде core.... Вот это соответствующие выходы других серверов:

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

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

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

Я предполагаю, что ошибки происходят из различных наборов команд НКУ используется. В файле annoy setup.py-march=native в строке extra_compile_args=['-O3', '-march=native', '-ffast-math'] означает, что gcc попытается обнаружить процессор и автоматически установить для него соответствующие флаги. Таким образом, я меняю этот флаг на -march=corei7-avx в setup.py и ошибки исчезли.

См. -march в here для получения более подробной информации, если вы заинтересованы.

Обновления

После подтверждения с админами сервера, эта ошибка связана с программным обеспечением загрузчика CentOS будучи старше, чем новые Haswell процессоров в сервере. Установка новой версии пакета binutils также может решить проблему.

+3

AVX представил 'vbroadcastss ymm, [m32]', но AVX2 представила 'vbroadcastss ymm, xmm' для трансляции нижнего элемента исходного вектора. Предположительно, с '-march = haswell', (avx2), код сгенерировал некоторый asm, который ваши старые binutils не могли собрать. (И из-за этой причуды vbroadcastss вы получили «недопустимые операнды», а не «непризнанную инструкцию»). –

Смежные вопросы