Различия между llvm и g ++ в OSX 10.7 - PullRequest
       22

Различия между llvm и g ++ в OSX 10.7

0 голосов
/ 08 сентября 2011

Я обновился до OSX 10.7 Lion в эти выходные, и теперь я пытаюсь пройти все мои юнит-тесты и регрессионные тесты ... но проблем довольно много. Некоторые из моих регрессионных тестов в настоящее время дают числовые результаты, которые отличаются (например, в третьем десятичном знаке). Это удивительно, потому что я получаю согласованные результаты между OSX 10.6 и Linux, а также для различных компиляторов (потому что мы уже применяем некоторые приемы, чтобы сохранить числовые значения достаточно стабильными, чтобы быть сопоставимыми) ... Но кажется, что OSX 10.7 дает значительно разные результаты , Конечно, мы могли бы поднять порог, чтобы пройти все эти тесты, но я бы предпочел не делать этого, потому что это ослабляет тест.

По умолчанию "g ++" теперь имеет псевдоним "llvm-g ++ - 4.2". Может кто-нибудь объяснить мне, какие различия следует ожидать в моих результатах для g ++ против llvm? Если я хочу сохранить свои результаты регрессии, нужно ли мне выбирать между llvm и -ffast-math?

1 Ответ

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

Базовые вычисления с плавающей точкой не должны существенно отличаться между llvm-gcc-4.2 и gcc-4.2 в обычном случае;базовая операция с плавающей точкой сгенерирует функционально идентичную кодовую последовательность с llvm-gcc и gcc-4.2 (при условии флагов компилятора по умолчанию).

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

Помимо этого, действительно трудно сказать без реального тестового примера.

...