next up previous contents
Next: Пользовательский интерфейс PVM Up: PVM - параллельная виртуальная Previous: Функциональная декомпозиция   Contents

Портирование существующих приложений в PVM

Чтобы использовать систему PVM, приложение должно пройти две стадии. Первая заключается в разработке распределенной в памяти параллельной версии алгоритма приложения; эта фаза общая как для системы PVM, так и для других мультипроцессоров с распределенной памятью. Фактические параллельные решения подпадают под две главные категории: одна связана со структурой, другая - с эффективностью. В решениях, связанных со структурой распараллеливаемых приложений, основной упор делается на выбор используемой модели (т.е. беспорядочные вычисления в противовес древовидным вычислениям или функциональной декомпозиции). Решения с упором на эффективность - распараллеливание ведется в среде распределенной памяти - в целом ориентировано на минимизацию частоты и интенсивности коммуникаций. Обычно в отношении последних можно сказать, что процесс распараллеливания различен для PVM и аппаратных мультипроцессоров; для среды PVM, основывающейся на сетях, сильная степень детализации, как правило, повышает производительность. При наличии указанной особенности, процессы распараллеливания для PVM и для других сред с распределенной памятью, включая аппаратные мультипроцессоры, очень похожи.

Распараллеливание приложений можно делать ``интуитивно'', взяв за основу существующие последовательные версии или даже параллельные. В обоих случаях стадии сводятся к выбору подходящего алгоритма для каждой из подзадач приложения - обычно с помощью опубликованных описаний - или изобретению параллельного алгоритма и последующему кодированию этого алгоритма на выбранном языке (C, C++ или Фортран77 - для PVM), а также к реализации интерфейса с другими приложениями, управляющим процессом и прочими конструкциями. При распараллеливании существующих последовательных программ также обычно следуют общим рекомендациям, первичной из которых является ``разрыв петель'': начиная с наиболее удаленных и постепенно продвигаясь вглубь. Основная работа такого процесса заключается в определении зависимостей и разрыве петель таким образом, чтобы зависимости не нарушались при возникновении параллельных выполнений. Процесс такого распараллеливания описан в ряде печатных изданий и учебников по параллельному программированию, хотя в немногих из них обсуждаются практические и специфические аспекты трансформации последовательной программы в параллельную.

Современные параллельные программы могут базироваться либо на парадигме общей памяти, либо на парадигме распределенной памяти. Приспособление написанных программ для общей памяти к PVM похоже на преобразование из последовательного кода, причем версии с общей памятью базируются на векторном или на уровне петель параллелизме. В случае с программами, явно разделяющими память, первичная задача состоит в поиске точек синхронизации и замещении их обменами сообщений. Для преобразования параллельного кода для распределенной памяти в PVM главная задача состоит в преобразовании одного набора параллельных конструкций в другой. Обычно существующие параллельные программы для распределенной памяти написаны либо для аппаратных мультипроцессоров, либо для других сетевых сред, таких как p4 или Express. В обоих случаях, главные изменения требуется провести в отношении подсистемы управлении процессами. В примере с семейством Intel DMMP обычной практикой является запуск процессов с помощью командной строки интерактивных оболочек. Такая парадигма должна замещаться PVM - либо посредством ведущей программы, либо посредством программы для станции, берущей на себя ответственность за порождение процессов. В смысле взаимодействия, при этом, к счастью, много общего между вызовами по обмену сообщениями в различных средах программирования. Основными же различиями PVM и других систем в этом контексте являются:



2004-06-22