Технологии параллельного программирования
Технологии параллельного программирования. Message Passing Interface
Параллельное программирование может быть сложным, но его легче понять, если считать не "трудным", а просто "немного иным". Оно включает в себя все черты более традиционного, последовательного программирования, но в параллельном программировании имеются три дополнительных, четко определенных этапа.
Определение параллелизма: анализ задачи с целью выделить подзадачи, которые могут выполняться одновременно
Выявление параллелизма: изменение структуры задачи таким образом, чтобы можно было эффективно выполнять подзадачи. Для этого часто требуется найти зависимости между подзадачами и организовать исходный код так, чтобы ими можно было эффективно управлять
Выражение параллелизма: реализация параллельного алгоритма в исходном коде с помощью системы обозначений параллельного программирования
Каждый из этих этапов по-своему важен. Первые два из них были подробно описаны в недавно вышедшей книге о структурных шаблонах в параллельном программировании [mattson05]. В этой статье будет рассматриваться третий этап: реализация параллельного алгоритма в исходном коде с помощью системы обозначений параллельного программирования. Такой системой обозначений могут служить язык параллельного программирования, прикладной программный интерфейс (API), реализованный с помощью библиотечного интерфейса, или расширение, добавленное к существующему языку последовательного программирования.
Выбор конкретной системы обозначений параллельного программирования может оказаться непростой задачей. У этих систем обозначений крутая кривая обучения, которая требует больших временных затрат. Следовательно, нет смысла осваивать несколько систем обозначений, чтобы выбрать из них самую подходящую. Все, что требуется программисту, — это возможность быстро "пощупать" разные системы обозначений и познакомиться с их основными особенностями на уровне, достаточном для осознанного выбора конкретной системы для дальнейшего детального освоения.
В данной статье приводится общий обзор нескольких систем обозначений параллельного программирования, подробно описываются основные способы их применения, а также их сильные и слабые стороны. В частности, здесь рассматриваются следующие системы обозначений:
"34. Распространение периодического издания" - тут тоже много полезного для Вас.
OpenMP: директивы компилятора для простого параллельного программирования
MPI: библиотечные подпрограммы для реализации высокоэффективной переносимости
Java: параллельность в языке программирования на основе ведущих объектов
Чтобы сделать обсуждение максимально конкретным, для каждого варианта приводится параллельная версия известной программы. Это обычное численное интегрирование с помощью формулы трапеций, причем подынтегральная функция и пределы интегрирования выбираются так, чтобы математически верным результатом являлось число 'п'. Эта задача считается аналогом программы "hello world" в параллельном программировании. В конце статьи дается краткое объяснение, как выбрать систему обозначений параллельного программирования для работы и изучения.
Message Passing Interface (MPI, интерфейс передачи сообщений) — программный интерфейс (API) для передачи информации, который позволяет обмениваться сообщениями между процессами, выполняющими одну задачу. Разработан Уильямом Гроуппом, Эвином Ласком и другими.
MPI является наиболее распространённым стандартом интерфейса обмена данными в параллельном программировании, существуют его реализации для большого числа компьютерных платформ. Используется при разработке программ для кластеров и суперкомпьютеров. Основным средством коммуникации между процессами в MPI является передача сообщений друг другу. Стандартизацией MPI занимается MPI Forum. В стандарте MPI описан интерфейс передачи сообщений, который должен поддерживаться как на платформе, так и в приложениях пользователя. В настоящее время существует большое количество бесплатных и коммерческих реализаций MPI. Существуют реализации для языков Фортран 77/90, Си и Си++.