Включение строгого режима с плавающей запятой в GCC - PullRequest
10 голосов
/ 04 сентября 2011

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

Ответы [ 3 ]

5 голосов
/ 04 сентября 2011

Компиляция с -msse2 на процессоре Intel / AMD, поддерживающем его, позволит вам почти у цели.Не позволяйте какой-либо библиотеке переводить FPU в режим FTZ / DNZ, и вы будете в основном настроены (несмотря на ошибки процессора).

Для других архитектур ответ будет другим.Те архитектуры, которые не предлагают какого-либо удобного способа получения точной семантики IEEE 754 (например, процессоры IA32 до SSE2), требуют использования библиотеки эмуляции с плавающей запятой для получения желаемого результата с очень высокой потерей производительности.

Если ваша целевая архитектура поддерживает инструкцию fmadd (умножение и сложение без промежуточного округления), убедитесь, что ваш компилятор не использует ее, если у вас есть явные умножения и сложения в исходном коде.GCC не должен делать это, если вы не используете опцию -ffast-math.

2 голосов
/ 23 мая 2012

Вы также можете использовать опцию GCC -mpc64 для цели i386 / ia32, чтобы выполнить вычисления с двойной точностью даже на x87 FPU.См. Руководство по GCC .

. Вы также можете изменить поведение x87 FPU во время выполнения, см. Детерминированная кроссплатформенная арифметика с плавающей запятой , а также Введение в GCC.

1 голос
/ 04 сентября 2011

Если вы используете -ffloat-store и всегда сохраняете промежуточные значения для переменных или применяете (явные) приведения к желаемому типу / точности, ваша цель должна составлять не менее 90%, а может и больше. Я хотел бы получить комментарии о том, есть ли случаи, когда этот подход все еще отсутствует. Обратите внимание, что я утверждаю, что это работает даже без каких-либо опций SSE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...