Ответ 1
Подход передовой практики, предложенный peter-cordes, заключается в том, чтобы узнать, что gcc собирается сделать с вашими "какими возможностями обладает ваш процессор", выполнив следующее:
gcc -O3 -fverbose-asm -march=native -xc /dev/null -S -o- | less
Эта команда предоставит информацию (все) о ваших возможностях ЦП в представлении gcc, для которого будет выполняться сборка, поэтому представление gcc имеет значение.
Когда это произойдет? Когда программа предлагает адаптировать себя к вашему процессору. Dang. Что я знаю о моем процессоре. Ну, вышеприведенная строка расскажет вам все, что вам нужно знать.
Тем не менее, как правило, люди/разработчики, которые продвигают возможности на базе процессора, сообщат или предложат список вещей, которые идут быстрее/лучше/сильнее, если ваш процессор имеет *. И вышеизложенное даст вам *. Прочитайте внимательно, что вы видите. Если у вас его нет, то вы этого не хотите, т.е.
-mno-avx(whatever you don't want;in my case it was avx)
Хороший обзор установки процессоров с более старыми процессорами предоставлен Микаэлем Фернандесом Сималанго для Ubuntu 16.04 LTS. Предполагается среда Python2.7, но легко переводится в Python3. Суть дела в том, чтобы извлечь, какие расширения инструкций процессора доступны на вашем конкретном процессоре, которые будут использоваться в дополнение к -march = native через /proc/cpuinfo, (но обратите внимание, что он кажется ограниченным тем, какие флаги он принимает, поэтому может будет лучше на самом деле прочитать инструкцию выше и поразмышлять)
grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]'
'[:lower:]' | { read FLAGS; OPT="-march=native"; for flag in $FLAGS;
do case "$flag" in "sse4_1" | "sse4_2" | "ssse3" | "fma" | "cx16" |
"popcnt" | "avx" | "avx2") OPT+=" -m$flag";; esac; done;
MODOPT=${OPT//_/\.}; echo "$MODOPT"; }
Выполнение этого на моей старой коробке вывод:
-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt
Это частично проходит там. Не ясно, как сказать "не это" и "не то", что для старых процессоров, скорее всего, будет -mno-avx.
Для старого процессора, который -march имеет значение, а Nephanth очень полезен для этого:
gcc -march=native -Q --help=target|grep march
производит
-march= westmere
это означает, что мой ответ на вопрос. /compile должен быть или может быть, и обратите внимание на кавычки 'westmere', которые также есть в документации gcc, поэтому '' должно быть там по причине
-march='westmere' -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx
но это, вероятно, намного лучше (см. обсуждение ниже):
-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx
Параметр -mno-avx является опцией для gcc, и результаты, после многих часов,
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more
information.
>>> import tensorflow as tf
>>>
>>> tf.__version__
'2.0.0-alpha0'
который выглядит как успех.
Повторно: в любом порядке выясните, какие инструкции поддерживаются вашим процессором (или нет), и укажите их явно.