Какими (небольшими) способами я могу изменить параметры компиляции Octave, чтобы улучшить его, не нарушая его?
Если название этого вопроса кажется немного расплывчатым, извините. Но я не был уверен, как отразить то, что я пытаюсь сделать, в одном предложении.
Несколько недель назад я узнал, что могу собрать и установить последние выпуски Octave в системе Ubuntu 12.04, выполнив следующие действия.
Установите инструменты, необходимые для компиляции, связывания и запуска октав. Для 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
Затем загрузите исходный код для выпуска Octave из архива проекта Gnu для Octave и распакуйте архив в папку в вашей системе.
Используйте команды ниже, чтобы построить, проверить и установить октаву.
./configure make make check sudo make install
К сожалению, оказывается, что вышеизложенное создает октаву, которая содержит все таблицы символов отладки. Только объектные файлы огромны и занимают около 1,7 ГБ.
Текущая документация Octave предлагает
Для компиляции без отладочных символов попробуйте команду
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
вместо простоmake
,
Однако, когда я попробовал это, это не сработало. -g
опция все еще использовалась для компиляции. Черт возьми, я вместо этого попытался ./configure CFLAGS=-O CXXFLAGS=-O
и это сработало. (Вместо ~1.7ГБ результат сборки теперь занимает около 253МБ).
Мои вопросы
- Действительно ли это правильный (рекомендуемый?) Метод для компиляции Octave без отладочных символов (т.е. без
-g
)? - Как бы я скомпилировал Octave, чтобы он использовал x86_64 вместо x86?
Примечание: я не спрашиваю, как скомпилировать Octave, чтобы использовать (экспериментальные) 64-битные целые числа для измерений массива. Я просто хочу позволить компилятору использовать дополнительные регистры и размеры слов, доступные, когда приложение работает в 64-битном режиме. - Доступен ли (более) полный список для директив, используемых с 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?
Я также пытался заглянуть внутрь октавы Makefile
чтобы увидеть, смогу ли я расшифровать, какие директивы командной строки он принимает. Я никуда не попал. Я не имею ни малейшего понятия о том, как этот Makefile делает то, что делает.
1 ответ
Это зависит от вашей версии 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, чтобы использовать их советы для компиляции из исходного кода.