1 1 Компиляторы для параллельных задач

Обзор

FORTRAN Вопрос выбора аппаратной платформы для кластера, по всей видимости не стоит: мы будем использовать ту технику, которая у нас уже имеется, а это скорее всего компьютеры на основе процессоров Intel. Поэтому обсуждать преимущества той или иной платформы мы не будем. Тем не менее, если вы собираетесь самостоятельно разрабатывать приложения для своего кластера, вам необходимо озаботиться подбором подходящих средств разработки.

Так, для процессоров Intel лучшим выбором будет разработанные Intel компиляторы с языков C/C++/Fortran95 (доступны бесплатно для некоммерческого использования в версии Linux), либо компиляторы от Portland Group (С/С++/Fortran90/HPF). Если же вам по каким-то причинам нет возможности установить у себя эти компиляторы, то вы можете использовать свободно распространяемые компиляторы серии GCC (Gnu Compiller Collection), которые поддерживают большинство современных аппаратных и программных платформ и поставляются практически со всеми дистрибутивами Linux и Unix.

Следует заметить, однако, что компиляторы серии gcc обладают одним существенным недостатком - в них отсутствует поддержка типов данных Real*16 и Complex*32, требующиеся для многих научных расчетов. Если ваша задача требует именно такой точности решений, то рекомендую загрузить и установить компиляторы для некоммерческого пользования компании Intel. Более подробно этот процесс описан в разделе Ubuntu-кластер.

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

  • В случае полуавтоматической системы распараллеливания, в тексте последовательной программы выделяются блоки, которые могут выполнятся параллельно. Обычно, в текст вставляются специального вида комментарии, которые игнорируются обычным (последовательным) компилятором.
     
  • Автоматические системы распараллеливания выполняют декомпозицию последовательного алгоритма самостоятельно. На вход подается последовательная программа, на выход выдается её параллельный аналог. Системы из этого класса так же могут помочь пользователю выяснить является ли данная задача параллельной, оценить время выполнения данной задачи, определить оптимальное число процессоров.
     

Создание систем автоматического распараллеливания и распознавания параллелизма в алгоритмах является не простой математической задачей и большинство такого рода систем являются коммерческими.

Выбор компилятора

Наиболее простыми, с точки зрения установки в систему Linux, можно назвать компиляторы серии GCC (Gnu Compiller Collection). Если говорить о Фортране, то коллекция GCC содержит два варианта компилятора: fort77, который является препроцессором, перекодирующим фортран-программу в си-код, который затем компилируется стандартным для дистрибутива си-компилятром, и gfortran, который является полноценным компилятром подмножества языка Fortran 95. Эти компиляторы входят в состав любого дистрибутива и их установка не представляет никаких трудностей.

Компиляторы фирмы Intel не входят в состав дистрибутивов Linux, однако их получение с официального сайта и установка в систему так же максимально проста. Процедура установки компилятора Intel Fortran описана в разделе Ubuntu кластер.

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

КомпиляторПараметрыВремя счета
Real*8Real*16
fort77нет40.47 сек.не поддерж.
-O318.32 сек.не поддерж.
gfortranнет36.98 сек.не поддерж.1)
-O315.40 сек.не поддерж.1)
10 мин. 53.42 сек.3)
ifortнет18.17 сек.7 мин. 53.22 сек.
-O318.15 сек.7 мин. 20.92 сек.
-O3 -fast -parallel07.94 сек.7 мин. 25.78 сек.

Тестирование2) показало, что фортран-компилятор фирмы Intel в режиме максимальной оптимизации дает на выходе исполняемый код, который примерно в 2 раза быстрее полученного в результате применения компиляторов GCC.

Кроме того, только Intel Fortran позволяет использовать типы данных Real*16 и Complex*321), хотя физический процессор и не умеет непосредственно работать с такими типами (отсюда и существенное увеличение времени счета на таких данных - используется софтверная эмуляция).

Резюме

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


1) Данное утверждение не совсем верно. В дистрибутиве Ubuntu 10.10 используется компилятор GNU Fortran 4.4.5. Эта версия компилятора действительно не поддерживает типы данных Real*16. Однако, на настоящий момент доступна для использования версия 4.7.0 в которой это ограничение снято.

2) Тестирование производилось с использованием компиляторов GNU Fortran 4.4.5, GNU Fortran 4.7.0 и Intel Fortran 12.0.4.

3)Данные получены при использовании GNU Fortran 4.7.0.


Copyright © 1998-2011 Юрий Сбитнев