Intel Fortran: Release vs Debug mode - разный результат

SawavsOlja

При компиляции в режиме Debug - программа работает правильно, но медленно. В режиме Release возникают ошибки - при расчетах в числах возникают бесконечности. Программа обрабатывает в цикле неструктурированные данные и содержит много вложенных if. Как отловить баг? :confused:

oliver11

Я бы под valgrind-ом для начала запустил.

kiracher

По просьбе КО хотелось бы спросить - а опции компилятора (особенно, насчет оптимизации) в этих двух режимах сопоставимы ?

procenkotanya

Интеловский компилятор в Release-конфигурации может включать оптимизации вычислений с плавающей точкой, которые могут приводить к изменениям в результатах вычислений. Можно начать с того, что передать ему -fp-model strict. Подробнее о флагах можно почитать, если запустить компилятор с опцией -help (раздел Floating Point).
Если это не поможет, можно попробовать включать разные уровни оптимизации, и выяснить, на каком возникает косяк.
Ну и не нужно забывать, что это может быть не только результат слишком агрессивных оптимизацией или баг в компиляторе, но баг в вашей программе, который не проявляется при консервативной компиляции в debug-режиме.

SawavsOlja

Можно начать с того, что передать ему -fp-model strict
Эта опция и в дебаге и в релизе по умолчанию fast. Т.к. в дебаге всё работает, то, наверное, не поможет.

procenkotanya

В дебаге оптимизации не включены, так что состояние этой опции в дебаге влияет слабее, чем в релизе.

SawavsOlja

Никакие изменения опций компилятора не помогают, кроме как вместо Optimization: maximize speed сделать Optimization: disabled. Но тогда скорость такая же как при дебаге.

ava3443

Рискну предположить что какие-то из переменных не инициализированы в коде. Отсюда разница: в Debug они все инициализируются в 0, а в Release - нет. Или в фортране нет такого? Лет десять не видел фортрана :)
Присоединяюсь к предложению запустить под valgrind.

SawavsOlja

запустить под valgrind
у меня windows...

ava3443

И чего? Если надо, то Linux найдёшь (виртуалку готовую скачать хотя бы). IFC под Linux тот же самый.
Я в подобной ситуации заморачивался портированием/отделением windows-специфичного кода, лишь бы иметь возможность запускаться под valgrind на linux.
Оставить комментарий
Имя или ник:
Комментарий: