Программное обеспечение. Процессы обмениваются информацией с другими
процессами, выполняющимися в в одном и том же или соседних узлах системы, путем
посылки и приема сообщений. Обмен сообщениями - единственное средство для
межузловой связи и синхронизации, так как в системе iPSC нет общей памяти.
Посылка сообщения может быть с блокировкой или без блокировки. Посылка с
блокировкой приостанавливает работу процесса до тех пор, пока сообщение не будет
отправлено. (Заметим, что это не означает, что сообщение будет получено.) Хотя
использование посылки сообщений без блокировки ускоряет работу процесса, перед
посылкой следующего сообщения по тому же каналу связи или перед изменением
буфера с сообщением необходимо производить проверку того, отправлено ли
предыдущее сообщение (с блокировкой или без блокировки).
Отдельная проблема заключается в том, что программа может посылать сообщения
быстрее, чем узел-получатель может их принимать. Все сообщения сопровождаются
кодом типа - неотрицательным целым числом. Наличие типа сообщения позволяет
узлу-получателю принимать сообщения только определенного типа. В отличие от
этого администратор куба принимает сообщения любого типа, но в зависимости от
типа сообщения решения о предпринимаемых действиях будут различными. Время,
необходимое для пересылки сообщения, зависит от числа килобайтных пакетов
(базовой единицы пересылки), на которые разбивается сообщение, и от числа
межузловых связей, по которым сообщение должно пройти.
При посылке сообщения с блокировкой ни одна команда в процессе не выполняется
до тех пор, пока сообщение не будет отправлено (или получено, если происходит
прием сообщения с блокировкой). При обмене сообщениями без блокировки выполнение
программы продолжается, а операционная система обрабатывает сообщение по своим
приоритетам. В этом случае вызов процедуры status помогает определить, можно ли
снова использовать буфер, в котором находилось сообщение. Этот протокол обмена
сообщениями позволяет пользователю создавать правильно синхронизованные
прикладные параллельные программы и разрешает проблемы, связанные с управлением
потоками сообщений.
Измерение времени, прошедшего между выполнением любых двух точек программы в
администраторе куба, производится при помощи вызовов подпрограммы gettlm,
обеспечиваемой компилятором Ryan-McFarland Fortran. Эта программа дает значение
текущего системного времени, измеренного в тысячных долях секунды. В каждом узле
есть свои независимые часы, значение которых доступно с помощью целочисленной
подпрограммы clock(). Это время используется для точного измерения времени
выполнения разных частей программы в узлах. Однако, так как эти часы независимы,
их трудно использовать для синхронизации процессов в разных
узлах.