По-прежнему отображается сообщение «Ваш ЦП поддерживает инструкции, которые этот двоичный файл TensorFlow не был скомпилирован для использования:» при использовании -march = native - PullRequest
1 голос
/ 12 января 2020

Я пытался скомпилировать Tensorflow 2.0, чтобы получить преимущества дополнительных инструкций процессора, таких как avx, но безрезультатно. Я прочитал Как скомпилировать Tensorflow с инструкциями SSE4.2 и AVX? , но я все еще растерялся, если только вы не строите для другого P C, конечно, -march = native должно просто работать. Я пробовал строить 2 раза с разными инструкциями и все еще получаю предупреждение. Я думаю, что использовал ниже, и я думаю, что у меня все еще сохраняются журналы, если кто-то хочет помочь. "bazel build // tenorflow / tools / pip_package: build_pip_package d_pip_package --config = mkl"

"bazel build - c opt --copt = -march = native --config = mkl // tenorflow / tools / pip_package: build_pip_package

Это только для удовлетворения понимания происходящего. В настоящее время мне не нужна польза от оптимизации, но я не понимаю, почему метод, который я использовал, не работая точно так, как я следовал.

1 Ответ

0 голосов
/ 12 января 2020

Как отмечается в моем редактировании в верхнем ответе на вопрос, который вы связали, кажется, что bazel и / или скрипты сборки TensorFlow содержат ошибки. Они неправильно обрабатывают -march=native и не могут передать его на компилятор. Я предполагаю, что что-то не так с аргументами, которые имеют = в названии, потому что аргументы вроде -mfma работают.

Вы правы, если они правильно передали компилятору -march=native не было бы никаких проблем и не нуждалось бы ни в одном из этих осложнений.

IDK, почему никто еще не устранил это огромное неудобство, вместо этого оставив множество пользователей, которые не являются экспертами по функциям процессора x86, спотыкаться, пытаясь выяснить какие функции имеет их процессор и как включить их для gcc / clang. Это как раз то, для чего нужна -march=native, наряду с другой важной особенностью установки параметров для настройки соответственно для машины, на которой вы компилируете.

Я однажды посмотрел, но я на самом деле не использую TensorFlow и не знаю bazel, поэтому я увяз в лабиринте машин для сборки между этой командной строкой и фактическим вызовом g++ ... foo.cpp

...