#optimization #segmentation-fault #fortran #intel-fortran
#оптимизация #сегментация-ошибка #фортран #intel-fortran #ошибка сегментации #fortran
Вопрос:
Я пытаюсь отладить ошибку сегментации, которая проявляется при компиляции одного из моих исходных файлов с использованием ifort 13.1.3 с флагом оптимизации -O3. Если я использую -O2 для этого конкретного файла и -O3 для остальной части моего кода, все работает нормально. В результате я не могу скомпилировать с отладочными символами, поскольку проблема просто исчезает.
Чтобы попытаться определить, какая конкретная операция оптимизации является причиной этого, я хотел бы, если возможно, добавить некоторые из более агрессивных оптимизаций, выполняемых с помощью -O3, но не -O2. Из ссылки 13.1.3:
Дополнительные высокоуровневые оптимизации, по-видимому, включают:
- Слияние
- Блок-Раскатать-и-Замять
- Свертывание операторов IF
Вероятно, есть несколько других, но я не могу идентифицировать их как эксклюзивные для -O3 по ссылке. Есть ли флаги, которые я мог бы использовать с -O2, чтобы включать некоторые из этих более агрессивных опций по отдельности или отключать их, начиная с -O3?
Комментарии:
1. Какие варианты проверки ошибок вы пробовали?
2. Вы пробовали компилировать с
-opt-report 3
? Это должно предоставить вам более подробную информацию о том, что именно компилятор пытается оптимизировать.
Ответ №1:
В общем, нет, не существует отдельных опций для включения и отключения определенных оптимизаций. Иногда мы добавляли опции для отключения определенных оптимизаций, когда они помогают определенным тестам, но это необычно. Если вам все еще нужна помощь с этим, пожалуйста, обратитесь в службу поддержки Intel — у нас есть инструменты для дальнейшего выявления причины, которая иногда является ошибкой компилятора. Однако я бы посоветовал, прежде чем делать это, сначала попробовать программу с более новым компилятором. 14.0.3 является текущим.