Какими (небольшими) способами я могу изменить параметры компиляции Octave, чтобы улучшить его, не нарушая его?

662
irrational John

Если название этого вопроса кажется немного расплывчатым, извините. Но я не был уверен, как отразить то, что я пытаюсь сделать, в одном предложении.

Несколько недель назад я узнал, что могу собрать и установить последние выпуски Octave в системе Ubuntu 12.04, выполнив следующие действия.

  1. Установите инструменты, необходимые для компиляции, связывания и запуска октавы. Для Ubuntu приведенные ниже команды сработали для меня.

    sudo apt-get build-dep octave3.2 sudo apt-get install build-essential gnuplot gtk2-engines-pixbuf sudo apt-get install libfontconfig-dev bison 
  2. Затем загрузите исходный код для выпуска Octave из архива проекта Gnu для Octave и распакуйте архив в папку в вашей системе.

  3. Используйте команды ниже, чтобы построить, проверить и установить октаву.

     ./configure make make check sudo make install 

К сожалению, оказывается, что вышеприведенное строит октаву, которая содержит все таблицы символов отладки. Объектные файлы сами по себе огромны и занимают около 1,7 ГБ.

Текущая документация Octave предлагает

Для компиляции без отладочных символов попробуйте команду
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
вместо just make .

Однако, когда я попробовал это, это не сработало. -gВариант был до сих пор используется для компиляции. Для черт этого я вместо того, чтобы попробовал ./configure CFLAGS=-O CXXFLAGS=-Oи это сделало работу. (Вместо ~ 1.7ГБ результат сборки теперь занимает около 253МБ).

Мои вопросы

  1. На самом ли деле это правильный (рекомендуемый?) Метод для компиляции Octave без отладочных символов (т.е. без -g)?
  2. Как бы я скомпилировал Octave, чтобы он использовал x86_64 вместо x86?
    Примечание: я не спрашиваю, как скомпилировать Octave, чтобы использовать (экспериментальные) 64-битные целые числа для измерений массива. Я просто хочу позволить компилятору использовать дополнительные регистры и размеры слов, доступные, когда приложение работает в 64-битном режиме.
  3. Доступен ли (более) полный список для директив, используемых с Make-файлом Octave?
    Я только видел make, make checkи make installдокументирован. Но, видимо, make distcleanэто тоже разрешено. (Он удаляет результаты компиляции, поэтому вы можете выполнить полную перестройку всего.)
    Мне интересно, что еще может быть доступно.

FWIW, я попытался использовать,
./configure CFLAGS="-O3 -mtune=core2 -m64" CXXFLAGS="-O3 -mtune=core2 -m64"
и, что удивительно, он не только появился, но и запустил make checkтесты.

Но, конечно, это не то же самое, что сказать, что на самом деле « работает ». Есть ли рекомендуемый способ включить Octave как приложение x86_64?

Я также попытался заглянуть внутрь Octave, Makefileчтобы посмотреть, смогу ли я расшифровать, какие директивы командной строки он принимает. Я никуда не попал. Я не имею ни малейшего понятия о том, как этот Makefile делает то, что делает.

2

1 ответ на вопрос

1
Charity Leschinski

Это зависит от вашей версии gcc, вашего оборудования, вашего дистрибутива и многих других вещей. Как правило, ваш поставщик дистрибутивов Linux провел бы это исследование для вас и использовал бы эти опции при сборке вашего пакета. Тем не менее, дистрибутивы пытаются заставить вещи работать с большинством аппаратных средств и ожиданий пользователей. Я нахожу большинство настроек без особых проблем с Gentoo . Linux с нуля или накатить свой собственный дистрибутив - это много работы. У меня есть установка Gentoo с отключенной 32-битной эмуляцией в ядре.

Из Руководства по оптимизации Gentoo лучше использовать -O2вместо-O3

-O3: это максимально возможный уровень оптимизации, а также самый рискованный. Скомпилирование вашего кода с этой опцией займет больше времени, и фактически его не следует использовать для всей системы с gcc 4.x. Поведение gcc значительно изменилось с версии 3.x. В 3.x было показано, что -O3 приводит к немного более быстрому времени выполнения по сравнению с -O2, но это больше не относится к gcc 4.x. Компиляция всех ваших пакетов с -O3 приведет к большим бинарным файлам, которые требуют больше памяти, и значительно увеличит шансы сбоя компиляции или неожиданного поведения программы (включая ошибки). Недостатки перевешивают выгоды; помните принцип убывающей отдачи. Использование -O3 не рекомендуется для gcc 4.x.

-mtune=core2Это нормально, если вы уверены, что это лучший выбор для вашего процессора. Мне лично нравится -march=nativeвместо этого. Смотрите Gentoo Safe CFlags

GCC 4.2 представляет новую опцию -march -march = native, которая автоматически определяет функции, поддерживаемые вашим процессором, и устанавливает параметры соответствующим образом. Если у вас процессор Intel или AMD и вы используете> = sys-devel / gcc-4.2.3, рекомендуется использовать -march = native.

-m64является опцией процессора и должна быть автоматически установлена ​​с помощью -mtune=core2или -march=native. См. Параметры GCC i386 и x86-64 .

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

Похожие вопросы