Интерполяция между флагами оптимизации ifort -O2 и -O3

#optimization #segmentation-fault #fortran #intel-fortran

#оптимизация #сегментация-ошибка #фортран #intel-fortran #ошибка сегментации #fortran

Вопрос:

Я пытаюсь отладить ошибку сегментации, которая проявляется при компиляции одного из моих исходных файлов с использованием ifort 13.1.3 с флагом оптимизации -O3. Если я использую -O2 для этого конкретного файла и -O3 для остальной части моего кода, все работает нормально. В результате я не могу скомпилировать с отладочными символами, поскольку проблема просто исчезает.

Чтобы попытаться определить, какая конкретная операция оптимизации является причиной этого, я хотел бы, если возможно, добавить некоторые из более агрессивных оптимизаций, выполняемых с помощью -O3, но не -O2. Из ссылки 13.1.3:

https://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran-mac/

Дополнительные высокоуровневые оптимизации, по-видимому, включают:

  • Слияние
  • Блок-Раскатать-и-Замять
  • Свертывание операторов IF

Вероятно, есть несколько других, но я не могу идентифицировать их как эксклюзивные для -O3 по ссылке. Есть ли флаги, которые я мог бы использовать с -O2, чтобы включать некоторые из этих более агрессивных опций по отдельности или отключать их, начиная с -O3?

Комментарии:

1. Какие варианты проверки ошибок вы пробовали?

2. Вы пробовали компилировать с -opt-report 3 ? Это должно предоставить вам более подробную информацию о том, что именно компилятор пытается оптимизировать.

Ответ №1:

В общем, нет, не существует отдельных опций для включения и отключения определенных оптимизаций. Иногда мы добавляли опции для отключения определенных оптимизаций, когда они помогают определенным тестам, но это необычно. Если вам все еще нужна помощь с этим, пожалуйста, обратитесь в службу поддержки Intel — у нас есть инструменты для дальнейшего выявления причины, которая иногда является ошибкой компилятора. Однако я бы посоветовал, прежде чем делать это, сначала попробовать программу с более новым компилятором. 14.0.3 является текущим.