Каждая из следующих C-подпрограмм упаковывает массив предоставленных
данных определенного типа в активный буфер передачи. Они могут быть
вызваны сколь угодно раз для упаковки данных в одно сообщение. Так,
сообщение может содержать несколько массивов с данными различных типов.
C-структуры, в процессе упаковки, должны принимать их индивидуальные
элементы. На комплексность упаковываемых данных ограничений не накладывается,
но приложение должно распаковывать сообщения точно в соответствие
тому, как они были упакованы. Хотя этого строго и не требуется, но
сложилась практика безопасного программирования.
Аргументами для каждой из подпрограмм являются: указатель на первый
из элементов для упаковки, nitem - суммарное число элементов
для упаковки из данного массива и stride - "шаг" для
использования во время упаковки. Шаг, равный 1, означает последовательную
упаковку вектора, равный 2 - упаковку "через раз" и т.д. Исключение
составляет pvm_pkstr(), которая завершает упаковку строки
символов при "встрече" NULL и поэтому не требует наличия
аргументов nitem и stride.
ПВМ так же поддерживает подпрограммы упаковки с printf-подобным
форматами выражений, которыми указывается, какие данные упаковывать
в буфер передачи и как. Все переменные передаются через адреса - если
указаны счетчик и шаг; в противном случае, предполагается, что переменные
будут передаваться значениями.
int info = pvm_pkbyte( char *cp, int nitem, int stride)
int info = pvm_pkcplx( float *xp, int nitem, int stride)
int info = pvm_pkdcplx( double *zp, int nitem, int stride)
int info = pvm_pkdouble( double *dp, int nitem, int stride)
int info = pvm_pkfloat( float *fp, int nitem, int stride)
int info = pvm_pkint( int *np, int nitem, int stride)
int info = pvm_pklong( long *np, int nitem, int stride)
int info = pvm_pkshort( short *np, int nitem, int stride)
int info = pvm_pkstr( char *cp)
int info = pvm_packfconst( char fmt, ...)
Единственная подпрограмма на Fortran реализует все упаковочные функции
перечисленных подпрограмм на C.
call pvmfpack( what, xp, nitem, stride, info)
Аргумент xp - это первый элемент для упаковки из массива.
Заметьте, что на Fortran количество символов в упаковываемой строке
должно указываться через nitem. Целое число what
указывает тип упаковываемых данных. Поддерживаются следующие опции.
STRING0
REAL4 4 BYTE 1
Эти имена уже предопределены в параметрических конструкциях включаемого
файла /pvm3/include/pvm3.h. Ряд производителей может расширять
этот список и включать в него поддержку 64-битных архитектур в своей
реализации. INTEGER8, REAL16 и др. будут добавлены,
как только XDR-поддержка этих типов данных будет реализована.
Знаете ли Вы, что алгоритм - это набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий. В старой трактовке вместо слова "порядок" использовалось слово "последовательность", но по мере развития параллельности в работе компьютеров слово "последовательность" стали заменять более общим словом "порядок". Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы. Таким образом, некоторые инструкции должны выполняться строго после завершения работы инструкций, от которых они зависят. Независимые инструкции или инструкции, ставшие независимыми из-за завершения работы инструкций, от которых они зависят, могут выполняться в произвольном порядке, параллельно или одновременно, если это позволяют используемые процессор и операционная система.