Что нового в IBM XL C/C++ for AIX and Linux версии 12.1

УУзнайте о новых и улучшенных функциональных возможностях в XL C/C++ версии 12.1, включая поддержку функций языка, позволяющих пользователям легко переносить исходный код при переходе на IBM Power Systems, а также улучшенное время компиляции на общеупотребительных уровнях оптимизации. Статья адресована тем, кто имеет опыт работы с предыдущими версиями XL C/C++.

Кельвин Ли, программист-консультант, IBM

Кельвин Ли (Kelvin Li) работает программистом-консультантом группы компиляторов XL в IBM Canada Lab. Он более 15 лет занимается разработкой клиентских приложений на Fortran и C. Представляет IBM в комитетах OpenMP по ARB и языкам.



Мелани Стекхам, консультант-разработчик информационных систем, IBM

Мелани Стекхам (Melanie Steckham) является консультантом-разработчиком информационных систем группы XL compiler в IBM Canada Lab. Она более 25 лет занимается написанием документации для программного обеспечения IBM.



06.11.2012

Введение

XL C/C++ – это компилятор языка программирования общего назначения для платформ IBM® AIX® и Linux, ориентированный на поставщиков инструментальных средств и разработчиков корпоративных бизнес-приложений, создающих и развертывающих приложения на IBM Power Systems®. Усовершенствования, реализованные в версии 12.1, повышают продуктивность разработчиков и производительность приложений. XL C/C++ предлагает следующие преимущества:

  • Простота миграции приложений благодаря полному соответствию новейшим международным стандартам на язык программирования.
  • Упрощение параллельного программирования благодаря полной поддержке спецификации OpenMP V3.1 API.
  • Более быстрая компиляция, особенно больших приложений.
  • Упрощение программирования благодаря новым параметрам, директивам и функциям.

Усовершенствования, реализованные в версии 12.1, повышают продуктивность разработчиков и производительность приложений.

В статье описываются новые возможности и усовершенствования в XL C/C++ for AIX и XL C/C++ for Linux версии 12.1. Статья не ставит своей целью охватить все новые возможности и функции, а также не пытается подробно рассмотреть все темы. В ней вы познакомитесь с некоторыми из новых возможностей XL C / C + + V12.1, начиная с усовершенствований поддержки стандартов языка и заканчивая параллельным программированием, оптимизированным для отладки кодом и производительностью.


Улучшения поддержки стандартов языка

В XL C/C++ V12.1 продолжается разработка и реализация особенностей новейшего стандарта языка С++ – ISO / IEC 14882:2011, также известного как C++11.

  • Можно использовать операторы явного преобразования для запрета неявных преобразований там, где они могут возникать непредвиденно, что позволяет программировать более надежные классы с меньшим количеством ошибок неоднозначности.br/>
  • Обобщенные константные выражения, расширяющие допустимые константные выражения, могут вычисляться во время компиляции, а не во время выполнения, что обеспечивает выигрыш в производительности.
  • Возможность свертывания ссылок позволяет сформировать ссылку на ссылочный тип с помощью спецификатора decltype, имени typedef или параметра типа шаблона. Это облегчает программирование обобщенных классов и написание шаблонов.
  • Ссылки rvalue позволяют повторно использовать ресурсы устаревших объектов. Так можно повысить производительность ваших библиотек, особенно если вы используете обобщенный код с типами классов, например, структуры шаблонных данных. Кроме того, при написании перенаправляющей функции можно учитывать категорию значения.
  • Функциональность перечислений с ограниченной областью видимости (scoped enumeration) предоставляет возможность объявлять перечислительные типы с ограниченной областью видимости, перечисления без нумераторов (enumerator), типы перечислений и улучшенную безопасность типов (type safety). Данная функциональность улучшает процесс создания библиотек и безопасность, обеспечивая повышенную безопасность типов. Она также улучшает время компиляции и создает меньше зависимостей благодаря введению объявлений forward для перечислений.
  • Функциональность замыкающего типа возврата (trailing return type) полезна при объявлении шаблонов функций или функций-членов шаблонов классов с типом возврата, зависящим от типов аргументов функции, функций или функций-членов классов с составными типами возврата и функций perfect forwarding. Эта функциональность повышает ясность при написании сложных типов возвратов функций, приводящих к запутанности кода.
  • Для разрешения большинства из функциональных возможностей C++ и всех поддерживаемых в настоящее время в XL C/C++ V12.1 функциональных возможностей C++11 можно использовать параметр –qlanglvl=extended0x.

XL C/C++ V12.1 начинает также многоэтапную реализацию новейшего стандарта языка C – ISO/IEC 9899:2011, также известного как C11. Для поддержки в данной версии были выбраны следующие функциональные возможности C11:

  • Анонимные структуры (anonymous structure) позволяют всем членам анонимной структуры вести себя как члены родительской структуры, что облегчает группирование и вложение.
  • Инициализация комплексных типов поддерживает значения бесконечности (infinite) или NaN в мнимой части. Это обеспечивает переносимый способ инициализации комплексных типов диапазоном значений.
  • Спецификатор функции _Noreturn позволяет создавать более производительный код путем документирования того факта, что функции не будут возвращать управление вызывающей стороне.
  • Можно объявлять статические утверждения (static assertion) для контроля важных инвариантов программы. Это позволяет библиотекам обнаруживать и диагностировать распространенные ошибки во время компиляции.
  • Для разрешения функциональных возможностей C11 в XL C/C++ V12.1 можно использовать параметр –qlanglvl=extc1x.

Улучшения параллельного программирования

OpenMP API – это переносимая, масштабируемая модель программирования, предлагающая программистам простой, гибкий стандартный интерфейс для разработки параллельных приложений для разных платформ, от настольных систем до суперкомпьютеров. XL C/C++ V12.1 полностью поддерживает OpenMP V3.1, включая следующие возможности:

  • Завершающие (final) и совмещаемые (mergeable) задания могут обеспечить дальнейшие возможности оптимизации в сценариях сокращения размера вычислений.
  • Конструкция taskyield предоставляет пользователям полный контроль над переключением потока с одного задания на другое.
  • Улучшение управления привязкой к потоку посредством переменной окружения OMP_PROC_BIND позволяет пользоваться особенностями машинной архитектуры.
  • Более точное управление количеством потоков, используемых при вложенном параллелизме, посредством переменной среды OMP_NUM_THREADS позволяет выразить количество потоков, используемых в группе.
  • Расширение атомарной конструкции (чтение, запись, фиксация) включает больше типов атомарных операций для улучшения синхронизации параллельного кода.

Улучшения диагностических отчетов

Диагностические отчеты помогают идентифицировать возможности улучшения производительности кода. Данная версия предусматривает следующие усовершенствования в отчетах:

  • В отчетах компилятора выделяются те оптимизации, которые компилятор смог выполнить, а также те оптимизации, которые ранее отсутствовали, но теперь стали возможны (в форматах как HTML, так и XML). Отчеты компилятора в HTML-формате готовы для отображения. Эти отчеты предоставляют информацию, которая помогает облегчить программирование при оптимизации приложений.
  • В файл листинга были добавлены новые разделы, которые помогают анализировать программу, включая релевантные, отсутствующие и устаревшие данные профилирования.
  • Улучшена вспомогательная программа showpdf для отображения данных о промахах кэша и ценной информации профилирования. Эта информация помогает программистам идентифицировать возможные узкие места производительности и способствует повышению эффективности приложений.

Улучшения масштабируемости и производительности во время компиляции

XL C/C++ версии 12.1 обеспечивает более быструю компиляцию, особенно для больших приложений. Кроме того, улучшено использование машинных ресурсов за счет уменьшения объема памяти, необходимой компилятору, например для анализа указателей и вычисления псевдонимов. Заголовочные файлы, использующиеся в приложениях несколько раз, кэшируются в компиляторе для общего ускорения обработки при компиляции. Компилятор и оптимизатор используют расширенные возможности адресации 64-разрядного процесса, позволяя оптимизировать значительно более крупные программы.


Улучшения удобства использования

Параметры, директивы и функции еще больше упрощают процесс программирования, сокращая тем самым, время разработки и снижая риски.

В данной версии программа с несколькими потоками может использовать новые встроенные в XL C/C++ V12.1 функции для автоматической и безопасной модификации данных в одном потоке без вмешательства другого потока. Такое поведение соответствует поведению набора компиляторов GNU Compiler Collection (GCC).

Добавлен и улучшен ряд параметров компиляции. Например, расширен параметр -g для улучшения отладки оптимизированных программ. Это улучшение позволяет выбирать между агрессивностью некоторых оптимизаций и точностью отладочной информации, генерируемой в исполняемой программе. Такой подход позволяет компилятору предоставлять отладочную информацию без излишних потерь в производительности. Теперь можно выполнять отладку оптимизированных приложений.

Параметр -qhaltonmsg останавливает компиляцию до формирования каких-либо объектных файлов, исполняемых файлов или исходных файлов на языке ассемблера при генерировании указанного сообщения об ошибке. Параметр -qinfo=all разрешает все диагностические сообщения для всех групп, за исключением als и ppt. В параметр -qlanglvl добавлено много подпараметров для поддержки новых стандартов языка, реализованных в данной версии.

Для улучшения циклических итераций была добавлена группа новых директив pragma. Директивы pragma iterations, max_iterations и min_iterations позволяют предоставить подсказки компилятору, касающиеся числа итераций, которые будет выполнять цикл. Эта информация может повысить скорость работы программы.


Заключение

В данной статье освещены некоторые из наиболее заметных улучшений, представленных в XL C/C++ версии 12.1. Эта новая версия включает в себя новые возможности, улучшающие производительность и облегчающие разработку приложений.

Ресурсы

Научиться

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Rational
ArticleID=844673
ArticleTitle=Что нового в IBM XL C/C++ for AIX and Linux версии 12.1
publish-date=11062012