В этом разделе приведено ознакомительное описание подпрограмм PVM версии 3. Раздел отсортирован по функциям, выполняемым подпрограммами. Например, в подразделе об ``обмене сообщениями'' идет речь о всех подпрограммах передачи и приема данных между двумя задачами PVM и опциях обмена сообщениями PVM.
В PVM версии 3 все задачи идентифицируются с помощью целого числа, предоставляемого pvmd. Далее по тексту такой идентификатор задачи обозначается TID. Это обозначение похоже на обозначение идентификатора процесса (PID), используемое в системе UNIX, предполагающее прозрачность для пользователя; значение TID также не имеет специального значения для пользователя. Фактически, PVM кодирует информацию в TID для своего собственного внутреннего использования.
Все подпрограммы PVM написаны на C. Приложения на C++ могут компоноваться с библиотекой PVM. Приложения на Фортране могут вызывать эти подпрограммы посредством интерфейса Фортран 77, поддерживаемого исходными текстами PVM версии 3. Данный интерфейс переводит аргументы, которые переданы при обращении на Фортранв соответствующие значения - если это нужно - для находящихся в более низком слое C-подпрограмм. Интерфейс также затрагивает формы представлений символьных строк на Фортране и различные соглашения при именовании, которые разные Фортран-компиляторы используют при вызове C-функций.
В коммуникационной модели PVM принято, что любая задача может передавать сообщение всякой задаче PVM и нет никаких ограничений на длину и количество таких сообщений. Поскольку все хосты имеют лимиты физической памяти, которые ограничивают потенциальное буферное пространство, коммуникационная модель не ограничивается этими частичными машинными лимитами, а подразумевает доступность и достаточность памяти. Таким образом, коммуникационная модель PVM предоставляет функции асинхронной блокирующей передачи, асинхронного блокирующего приема и неблокирующего приема. Согласно нашей терминологии блокирующая передача - это задача, которая завершается так быстро, как только буфер передачи освобождается для повторного использования, а асинхронная передача - передача, которая не зависит от состояния приемника, вызвавшего соответствующий прием до того, как передача завершится. В PVM версии 3 есть опции, которые указывают, что данные должны передаваться прямо от задачи к задаче. В этом случае, если сообщение большое, передатчик может блокироваться до тех пор, пока приемник не вызовет соответствующий прием.
Неблокирующий прием непосредственно возвращает либо данные, либо флаг, подтверждающий что данные не прибыли, в то время, как блокирующий прием завершается только после того, как данные появятся в буфере приема. В дополнение к приведенным коммуникационным функциям типа ``точка - точка'', модель поддерживает широковещательную передачу набору задач, в частности определенной пользователем группе задач. Имеются так же функции для нахождения глобального максимума, вычисления глобальной суммы и другие, приеменимые для группы задач. Для указания источника при приеме могут использоваться специальные символы и метки, позволяющие игнорировать контекст полностью или по частям. Подпрограмма может вызываться и с целью получения информации о принятых сообщениях.
Модель PVM гарантирует сохранение порядка сообщений. Если задача 1 посылает сообщение A задаче 2, а затем эта же задача посылает сообщение B той же задаче, то сообщение A поступит задаче 2 раньше, чем сообщение B. Более того, если оба сообщения возникнут до того, как задача 2 выполнит прием, то прием с указанием специальных символов будет всегда возвращать сообщение A.
Буферы сообщений распределяются динамически. Однако максимальная длина сообщения, которое может быть передано или принято, ограничивается объемом доступной памяти на данном хосте. В PVM версии 3.3 встроен только ``ограничительный'' текущий контроль. PVM может выдавать пользователю ошибку ``Can't get memory'' в тех случаях, когда суммарный объем входящих сообщений превышает размер доступной памяти, но при этом PVM не просит другие задачи остановить передачу для данного хоста.