10
прошлом программисты (и библиотеки) предусматривали программы
для упаковки этих данных в
непрерывные буферы перед передачей и
для распаковки их на приемном конце. Однако, поскольку появляются
коммуникационные процессоры, которые могут непосредственно
обращаться с данными, расположенными в памяти с равномерным
шагом или еще более общим образом, становится особо важно с точки
зрения производительности, чтобы упаковка производилась "на лету"
самим коммуникационным процессором без дополнительных
перемещений данных. Это невозможно сделать, если мы не
представляем информацию в библиотеку связи в ее первоначальной
(распределенной) форме;
• В последние несколько лет замечается рост популярности
неоднородных вычислительных комплексов. Эта популярность
возникла по двум причинам. Первая состоит в распределении сложной
вычислительной задачи между различными специализированными
компьютерами (например, SIMD, векторными, графическими). Вторая
причина состоит в использовании сетей рабочих станций в качестве
параллельных компьютеров. Сети рабочих станций, состоящие из
машин, приобретенных в разное время, часто содержат компьютеры
разных типов. В обеих этих ситуациях сообщениями обмениваются
машины разной архитектуры, при этом
address, length уже больше
не являются адекватной спецификацией семантического содержания
сообщения. Например, в векторах из чисел с плавающей точкой могут
быть различными не только формат чисел с плавающей точкой, но
даже их длина. Эта ситуация также может иметь место и для целых
чисел. Библиотека связи может выполнять необходимое
конвертирование, если ей точно сообщается, что именно передается.
Решение MPI обеих этих проблем состоит в том, чтобы
специфицировать сообщения на более высоком уровне и более гибким
образом, чем (
address, length), и чтобы отразить тот факт, что
сообщение содержит более структурированные данные, чем просто
строку бит. Для этого буфер сообщения в MPI
определяется тройкой
(address, count, datatype), описывающей count элементов
данных типа
datatype, начинающегося с address. Мощь этого
механизма происходит от гибкости в значениях типа данных
(datatype).
Прежде всего, тип данных может принимать значения
элементарных типов данных в принимающем языке. Таким образом,