Intel Visual Fortran

Не так давно, но и не сказать, чтобы совсем недавно, я рассказывал на страницах "Компьютерных вестей" о замечательном языке программирования Фортран, с помощью которого до сих пор создаётся львиная доля научных программ во всём мире. Сегодня мы с вами поговорим о компиляторе этого языка от Intel.


Зачем нам говорить о компиляторах?

Язык программирования - это, конечно, замечательно, но вот только с его помощью ничего нельзя создать, если нет соответствующего компилятора или хотя бы интерпретатора. Поскольку Фортран - язык компилируемый, то для него разрабатывают именно компиляторы, а не интерпретаторы. Но, сами понимаете, компилятор компилятору рознь.

Язык Фортран, несмотря на свой почтенный возраст, имеет не так уж мало довольно-таки высокопроизводительных компиляторов, с помощью которых вполне можно преобразовывать в машинный код исходные тексты программ на Фортране. Есть среди таких компиляторов и бесплатные - например, GNU Fortran или Watcom Fortran.

Но для действительно серьёзных проектов лучше использовать самые качественные компиляторы. Думаю, это утверждение настолько очевидно, что пояснять, из каких рассуждений оно вытекает, не нужно. А кто может сделать лучший оптимизирующий компилятор, чем тот, кто создаёт саму процессорную архитектуру? Для мощных вычислений очень важно использование всех возможностей аппаратной платформы - примерно так же, как для быстрой графики необходимо наличие качественного графического адаптера, без которого "стрелялка" может превратиться в пошаговую стратегию.

На сегодняшний момент Intel Visual Fortran - самый привлекательный для разработчиков на Фортране программный продукт. Почему? Вот, собственно, этому вопросу и посвящена данная статья.


Общий обзор возможностей

Давайте перед тем, как углубляться в рассмотрение тех или иных преимуществ данного компилятора перед аналогами, посмотрим, что он, в принципе, может предложить разработчикам.

Во-первых, стоит сказать о поддержке языковых стандартов. Компилятор от Intel полностью поддерживает спецификацию Fortran-95, а также, частично, Fortran-2003 - более новую, но пока что менее распространённую. Поддерживаются также популярные расширения языка для обеспечения обратной совместимости с некоторыми популярными в прошлом компиляторами. Это всё поддерживается независимо от редакции компилятора, коих, к слову, существует целых три: Standart, Professional и Professional with IMSL Library. Ну, насчёт первой всё ясно и прозрачно - это просто "голый" компилятор безо всяких дополнительных "прибамбасов". Вторая включает уже, кроме, собственно, компилятора, библиотеку Intel Math Kernel Library. Третья - это компилятор сразу с двумя библиотеками, IMKL и IMSL.

Одна из весьма существенных для разработчика возможностей компилятора - это поддержка взаимодействия со средой разработки приложений Microsoft Visual Studio версий 2003, 2005 и 2008. Это действительно существенно, потому что писать программы в блокноте, а потом компилировать их и отлаживать (особенно отлаживать!) из консоли - удовольствие не просто сомнительное, но ещё и дорогое в плане времени программиста. В новой версии компилятора (10.1) среда Microsoft Visual Studio 2005 в редакции Premier Partner Edition (правда, сложно сказать, чем именно эта редакция отличается от тех, которые пользователь может приобрести самостоятельно). Помимо интеграции с Visual Studio, Intel обещает безболезненное взаимодействие с ещё одним немаловажным Microsoft'овским продуктом - Windows Vista.

Компилятор поддерживает создание COM-приложений, которые в последнее время стали ценны не столько своей COM'ностью, сколько тем, что их можно потом использовать в проектах, создаваемых для платформы Microsoft .NET с чисто "управляемым" кодом.

Впрочем, даже если вы не хотите пользоваться платформой .NET, у вас есть возможность повысить надёжность вашего приложения благодаря тому, что будет проверять код на стандартные программистские ошибки - например, на такую, как переполнение буфера. Согласитесь, вещь и актуальная, и полезная даже самым искушенным в программировании специалистам, потому что, как говорится, и на старуху бывает проруха.

Компилятор умеет генерировать код для 32- и 64-битных процессоров - процессоров, естественно, Intel'овской архитектуры. Самая приятная для тех, кто программировал на Фортране и ранее возможность компилятора, впрочем, будет заключаться не в этом, а в очень хорошей поддержке исходных текстов программ и даже целиком проектов от Compaq Visual Fortran - с учётом языковых особенностей, стандартных библиотек и прочих характерных для этого программного продукта вещей.


Подробнее об оптимизации

Помните, я тут буквально пару абзацев тому назад говорил что-то вроде "кто ж лучше разработчиков процессора знает, как делать оптимизирующий компилятор"? Так вот, ключевое слово в данном случае именно "оптимизирующий". Потому что именно оптимизация под конкретную аппаратную платформу может дать в итоге в сложных научных приложениях весьма существенный прирост производительности. Это значит, что самое время поговорить о различных аспектах оптимизации касательно Intel Visual Fortran более подробно.

Самая существенная особенность, касающаяся производительности приложений, создаваемых с использованием данного компилятора, - это поддержка многопоточности (и при программировании, и при последующей оптимизации в ходе компиляции и компоновки). Для этого специально используется OpenMP - технология, позволяющая задействовать все доступные ядра для многоядерных процессоров или все доступные процессоры для многопроцессорных систем с целью обеспечения максимальной производительности разрабатываемых приложений. В пакет поставки компилятора входят заголовочные файлы для OpenMP API, которые помогут претворить намерения в действительность и распараллелить приложения для многоядерных/многопроцессорных систем. Помимо предоставления разработчику OpenMP API, компилятор и сам прилагает некоторые усилия в направлении распараллеливания приложений: например, он может выделять циклы, которые способны выполняться параллельно, и принудительно включать такие циклы в параллельную обработку разными ядрами или разными процессорами. Конечно, такого распараллеливания для более-менее серьёзных задач не хватит, и всё же придётся обращаться к помощи OpenMP, тем не менее, для небольших задач или тестовых прогонов программ перед началом их распараллеливания с помощью OpenMP и такая небольшая оптимизация будет лучше, чем ничего.

В десятой версии компилятора появилась и более продвинутая возможность автоматической оптимизации приложений - High Performance Parallel Optimizer (HPO). Она комбинирует в себе автоматическую векторизацию, параллелизацию циклов и другие преобразования кода, которые выполняются одновременно. По словам разработчиков компилятора, такой вид оптимизации гораздо эффективнее, чем все виды оптимизации, использовавшиеся в предыдущих версиях компилятора. Впрочем, сложно сказать, так это или нет, не испробовав новый способ оптимизации в действии. Думаю, что вряд ли он существенно прибавит приложениям скорости, потому что и в предыдущих версиях компилятора оптимизация была очень и очень неплохой.

Теперь стоит немного сказать и о векторизации. Таким красивым словом называется распараллеливание циклов вычислений для векторов (сиречь, одномерных массивов, если говорить не физико-математическими, а чисто программистскими терминами) по нескольким процессорам. То есть, например, нам надо сложить друг с другом элементы двух массивов одинаковой размерности и записать результат в третий массив (той же размерности, разумеется). После векторизации i-й процессор будет складывать i-е элементы двух массивов и записывать результат в i-й же элемент массива с результатами вычислений. Если представить себе более серьёзные задачи, чем простое сложение массивов, становится ясно, что использование векторизации позволяет довольно-таки существенно повысить производительность приложений, которые предназначены для выполнения на многопроцессорных машинах.

В Intel Fortran Compiler присутствует также такой интересный вид оптимизации, как интерпроцедурная оптимизация. Как заверяют разработчики компилятора, она будет особенна эффективна для программ, включающих в себя большое количество мелких функций, которые вызываются часто (особенно в циклах). Для применения этого вида оптимизации компилятор должен генерировать промежуточные файлы с объектным кодом уже оптимизированными, а затем использовать именно такие файлы при компоновке программы. То есть, если у вас есть библиотека, распространяемая в виде объектных файлов, созданных без применения интерпроцедурной оптимизации, то на этом виде оптимизации в конечном исполняемом файле можно сразу поставить крест.

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


Подведём итоги, пожалуй...

Надеюсь, не очень утомил вас рассказами об оптимизации. На самом деле, это важно знать, если в планах есть использование компилятора Intel Visual Fortral для более-менее серьёзных разработок. Потому что в будущем знание того, какими методами компилятор оптимизирует программу, может помочь понять причину её неправильного поведения, что в конечном итоге может сократить, и порой довольно-таки существенно, время, нужное для отладки этой самой программы.

Также надеюсь, что сумел донести до вас, почему я считаю компилятор Фортрана от Intel самым лучшим на сегодняшний день для большинства задач компилятором этого языка. Повторюсь: во-первых, это поддержка стандартов и хорошая совместимость с Compaq Visual Fortran; во-вторых, поддержка одной из самых комфортных для программиста сред разработки приложений - Microsoft Visual Studio; ну а, в-третьих, это поддержка многопроцессорных архитектур и наличие множества методов оптимизации приложений под эти архитектуры.

Так что одна из крупнейших ИТ-корпораций, как видите, сумела создать действительно качественный компилятор Фортрана, за что ей честь и хвала. Ну а тем, кому он нужен, остаётся только покупать его и пользоваться в своё удовольствие.

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

16 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!