IBM XL C/C++, эквивалентный оптимизации #pragma GCC

Мы столкнулись с генерацией неправильного кода для исходного файла с использованием IBM XL C/C++ по адресу -O3. на платформах PowerPC. Его поверхности как бы висят, и кажется, что конкретная петля не разорвана.

Проблема проявляется только в XL C/C++. Наш режим тестирования показывает, что исходный файл свободен от неопределенного поведения, ошибок памяти и других опечаток. Мы также не получаем strict/nostrict предупреждений от компилятора для исходного файла.

Мы хотим скомпилировать исходный файл в -O2 вместо -O3. Мы хотим добавить инструменты, такие как прагма, к исходному файлу, чтобы его можно было надлежащим образом защитить для компилятора. Инструментарий позволяет другим подключать другие системы сборки, такие как Cmake и Autotools, и все будет «просто работать» для них. (Необходимая информация доступна в исходниках, а не в нашем make-файле).

Руководство IBM для компилятора находится по адресу IBM XL C/C++. для AIX, V13.1, но черт возьми, если я смогу найти эту опцию.

Что эквивалентно #pragma GCC optimize в IBM XL C/C++? Как настроить исходный код, чтобы указать XL C/C++ использовать -O2 вместо -O3?


person jww    schedule 16.09.2017    source источник


Ответы (1)


Вариант IBM XL C/C++ для AIX V13.1, который вы можете использовать для компиляции этого исходного файла в -O2, называется #pragma options optimize=2. Информацию об этом можно найти в Интернете здесь или в файле PDF здесь. Если вы хотите переопределить -O3, который уже был указан в командной строке, и управлять им на функциональном уровне, вы можете использовать #pragma option_override(<your function name>, "opt(level, 2)"). Информацию об этом можно найти в Интернете здесь или в файле PDF здесь. Вы также можете добиться того же, изменив Makefile так, чтобы один исходный файл компилировался в -O2 вместо -O3.

Кроме того, вы уверены, что указанное вами сообщение об ошибке, начинающееся с tea.cpp:27:26, исходит от IBM XL C/C++ для AIX V13.1? Это не похоже на формат диагностических сообщений этого продукта.

Мы продолжим следить за вашими комментариями о переполнении стека (пометка xlc помогает нам найти его), но вы можете обнаружить, что вы можете получить более быстрое время ответа, если разместите свои вопросы на нашем форуме по адресу http://ibm.biz/xl-power-compilers-forum, за которым более активно следит группа разработчиков компиляторов IBM.

person Nicole Trudeau    schedule 18.09.2017
comment
Спасибо @trudeun. Я думаю, что вы правы насчет диагностики компилятора. Похоже на сообщение GCC. По поводу -O2 мы нашли больное место. Он был устранен по ошибке 503. Я предполагаю, что это правило As If правило C++ - авторам компиляторов разрешено превращать работающую программу в неработающую :) - person jww; 19.09.2017
comment
Что касается переполнения стека по сравнению с форумами IBM, спасибо за мониторинг. У меня нет учетной записи Discuss, и я не присоединюсь к другой социальной сети, поэтому я не могу использовать это место. Было бы неплохо, если бы IBM приняла Google, Facebook и т. д. Но я понимаю, что большинство компаний хотят быть поставщиками услуг по сбору информации; и они не хотят быть полагающейся стороной, которая должна отказаться от информации. - person jww; 19.09.2017
comment
Еще раз спасибо @trudeun. Я вижу, что произошло с ручным справочником. Указанная вами информация есть в инструкции. Однако я работал с другой стороны: я нашел option_override в руководстве на странице 441, затем я отправился искать варианты оптимизации на страницах 441-445. Проблема в том, что "opt(level, 2)" не обсуждается в этой части руководства. Другие оптимизации, такие как unroll и nounroll, но не "opt(level, 2)". Думаю, я все еще учусь пользоваться мануалом. - person jww; 19.09.2017
comment
Спасибо @jww. У IBM Compilers есть учетная запись Facebook, если вы предпочитаете общаться таким образом, но Stack Overflow будет лучше. для других, которые могут столкнуться с теми же проблемами позже, поскольку ответы общедоступны и их можно найти. - person Nicole Trudeau; 19.09.2017
comment
У меня неправильно скомпилирован другой исходный файл. Это китайская хэш-функция с именем sm3.cpp. Я изолировал его с помощью -O2 в make-файле. Затем я восстановил make-файл и добавил #pragma options optimize=2. Это необходимо, потому что некоторые люди используют другие системы сборки (а не наш make-файл). Тем не менее, неправильная компиляция все еще присутствует. Я не знаю, какая из 12 функций является проблемой, поэтому я не могу использовать #pragma option_override. Любые идеи, как действовать? - person jww; 31.12.2017
comment
Теперь откройте в нашем трекере ошибок: Ошибка 533, XLC и SM3 не прошли самотестирование при -O3. - person jww; 31.12.2017
comment
@jww Сожалею, что у вас все еще есть проблемы. Давайте исключим любое неправильное использование прагмы. Некоторые прагмы XL игнорируются, если перед ними появляется какой-либо код, и нам нужно дважды проверить, является ли это одной из них, но есть ли у вас какой-либо код, появляющийся в sm3.cpp перед #pragma options optimize=2? Сюда входят любые объявления, в том числе из расширяющихся директив #include. - person Nicole Trudeau; 02.01.2018
comment
@jww Не могли бы вы попробовать скомпилировать sm3.cpp с -O2 -qhot=level=0? Если вы столкнулись с плохим генерированием кода, ваше поведение «пройдено/не пройдено», скорее всего, связано с выключенным/включенным параметром -qhot=level=0, а не -O2 против -O3. Подробнее о том, почему это происходит, я напишу в отдельном комментарии. - person Nicole Trudeau; 02.01.2018
comment
@jww Вы ищете способ скомпилировать все файлы с -O3, кроме sm3.cpp, но не можете изменить свой Makefile, чтобы просто скомпилировать sm3.cpp с -O3 -qnohot из-за того, что некоторые люди используют другие системы сборки, а не ваш Makefile. Вы можете попробовать использовать #pragma novector в sm3.cpp, чтобы узнать, разрешено ли отключать -qhot=level=0 на исходном уровне. Однако он не поддерживается для вложенных циклов. - person Nicole Trudeau; 02.01.2018
comment
@jww Еще немного подробностей о -qhot: -O2 подразумевает -O2 -qnohot -O3 подразумевает -O3 -qhot=level=0 Компиляция с -O3 и добавление #pragma options optimize=2 к sm3.cpp изменит -O3 на -O2, но подразумеваемый -qhot=level=0 из компиляции с -O3 в командной строке / в Makefile все еще будет применяться. Дополнительную информацию о -qhot см. на странице Центр знаний - person Nicole Trudeau; 02.01.2018