Параллельное программирование: Учебное пособие, страница 4

6.5.1  Конструкторы производных типов.............................................. 289

6.5.2  Регистрация и удаление производных типов............................ 294

6.5.3  Подпрограммы, сопутствующие производным типам............ 294

6.6  Операции упаковки и распаковки данных......................................... 298

6.6.1  Типы   MPI_BYTE  и  MPI_PACKED............................................ 301

6.7  Атрибуты коммуникаторов................................................................... 301

6.8  Ввод и вывод............................................................................................. 306

6.8.1  Основные операции с файлами.................................................... 306

6.9  Вопросы и задания для контроля......................................................... 315

Список литературы.................................................................................... 316

     Предметный указатель........................................................................... 317


Предисловие

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

Оказалось, что простое повышение быстродействия отдельных узлов и машины в целом не может привести в обозримом будущем к существенному ускорению обработки данных в силу того, что процессорный блок оставался одним единственным. Обнадеживающим примером достижимости высокой скорости обработки при одновременном использовании множества медленно работающих процессорных блоков служили аналоговые вычислительные машины. Поэтому, начиная с шестидесятых годов, в этом направлении начали проводиться интенсивные исследования в области создания многопроцессорных вычислительных систем и программного обеспечения, поддерживающего одновременную совместную работу множества процессоров [8, 9]. Проблемным здесь оказался обмен данными между одновременно протекающими процессами. Развитие локальных сетей и микроэлектронной базы сетевых интерфейсов с соответствующими протоколами обмена данными позволили по-новому подойти к организации параллельных вычислений в мультипроцессорных системах.

Из всего, что было апробировано до 1994 года на существовавших параллельных вычислительных системах и их операционных системах, для дальнейшего развития была использована идея организации параллельных вычислений на базе интерфейса передачи сообщений [16], а в форме спецификации MPI-2 введен стандарт на запись параллельных программ, что открыло дорогу разработкам параллельных переносимых программ.

Для построения параллельных алгоритмов и записи параллельных программ прежде всего нужно приучить себя мыслить в двух измерениях: во времени и ранжированном пространстве процессоров. Необходимо понимать и учитывать множество нюансов, возникающих в параллельных вычислительных системах при выполнении операций обмена данными как внутри локального процессора, так и между различными процессорами [1]. Очень важными становятся вопросы построения параллельного алгоритма, который бы выполнялся за минимально возможное время, использовал при этом наименьшее число процессоров и не имел бы тупиковых остановок.

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

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