Основы многопоточного и распределенного программирования

       

Языки, компиляторы, библиотеки и инструментальные средства


Языки, компиляторы, библиотеки и инструментальные средства

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

При написании параллельных программ чаще всего берется какой-нибудь последователь­ный язык и соответствующая библиотека подпрограмм. Тела процессов записываются на по­следовательном языке, например, С или Фортране. Затем с помощью вызовов библиотечных функций программируется создание процессов, их взаимодействие и синхронизация. Нам уже знакомы библиотека Pthread, предназначенная для машин с разделяемой памятью, и библиотека MPI для обмена сообщениями. В разделе 12.1 показано, как с помощью этих библиотек запрограммировать метод итераций Якоби. Затем рассматривается технология ОрепМР — новый стандарт программирования с разделяемыми переменными. Использова­ние ОрепМР проиллюстрировано также на примере итераций Якоби.

Совершенно другой подход к разработке параллельных программ состоит в использова­нии распараллеливающего компилятора. Такой компилятор сам находит параллельность в последовательной программе и создает корректно синхронизированную параллельную программу, которая содержит последовательный код и библиотечные вызовы. В разделе 12.2 приводится обзор распараллеливающих компиляторов. Там описан анализ зависимостей, на основе которого определяется, какие части программы могут выполняться параллельно. За­тем рассмотрены различные преобразования программ, наиболее часто применяемые для конвертирования последовательных циклов в параллельные.
Преимущество распараллели­вающих компиляторов состоит в том, что они освобождают программиста от изучения правил написания параллельных программ и могут быть использованы для распараллеливания уже имеющихся приложений. Однако с их помощью часто невозможно распараллелить сложные алгоритмы и, как правило, трудно добиться оптимальной производительности.

Третий способ разработки параллельных программ — использовать языки высокого уров­ня, в которых параллельность (вся или ее часть), взаимодействие и синхронизация неявны. В разделе 12.3 описано несколько классов языков высокого уровня и проанализированы ос­новные языки из каждого класса. Для иллюстрации использования каждого из языков и их сравнения в качестве примеров используются метод итераций Якоби и другие приложения из предыдущих глав. Также описаны три абстрактные модели, которые можно использовать для характеристики времени работы параллельных алгоритмов. Раздел заканчивается учебным примером по быстродействующему Фортрану (High Performance Fortran — HPF), самому по­следнему в семействе языков на основе Фортрана, предназначенных для научных вычисле­ний. Компиляторы языков, подобных HPF, опираются на методы распараллеливания и соз­дают программы, содержащие последовательный код и библиотечные вызовы.

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

450                                                      Часть 3. Синхронное параллельное программирование

вычислениями. Затем описаны метавычисления — новый подход, позволяющий объединять вычислительную мощность разнотипных машин, соединенных высокоскоростными сетями. Например, моделирующая часть научных вычислений может выполняться на удаленном су­перкомпьютере, а управляющая и графическая части — на локальной графической рабочей станции. В качестве конкретного примера в конце раздела 12.4 описан новый инфраструк­турный набор программных инструментов Globus для поддержки метавычислений.


Содержание раздела