Специальные опции оптимизации GCC для арифметики с плавающей запятой двойной точности - PullRequest
2 голосов
/ 15 июня 2010

Знаете ли вы, какие из флагов оптимизации GCC являются наиболее подходящими для создания приложения, которое использует двойную плавающую точку и вычисляет много в режиме реального времени, и использует -lm .Целевое оборудование - два Dual-Xeon с Linux на борту.Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

«Dual-Xeon» не является точной спецификацией целевых процессоров - «Xeon» - это скорее торговая марка, а не конкретная модель.«Xeon» даже не говорит вам, нацелены ли вы на архитектуру IA32 или x86-64.

Это важно, потому что оптимизация может быть значительно улучшена путем нацеливания на конкретное семейство ЦП.Существует множество опций , описанных в документации GCC ;в частности, начните с -march, чтобы сгенерировать код для определенного набора команд.

Если вы не нацеливаетесь на x86-64, то используйте -mfpmath=sse (если поддерживается вашим типом процессора), чтобы использовать инструкции SSE дляс плавающей точкой, а не 387 (эта опция используется по умолчанию на x86-64).Аналогично, -malign-double может дать ускорение (но это только значение по умолчанию для x86-64).

Кроме того, если функции, которые вы используете в libmath, отображаются в качестве горячей точки при профилировании, затем перекомпилируйте эту библиотекус более конкретными флагами оптимизации может быть полезным.

1 голос
/ 15 июня 2010

В зависимости от того, является ли это безопасным и подходящим для вашего конкретного применения, вы можете рассмотреть -ffast-math.Пожалуйста, прочитайте предупреждения на странице руководства для этого, прежде чем использовать его.

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

...