next up previous contents
Next: Динамическая конфигурация Up: PVM - параллельная виртуальная Previous: Контроль процессов   Contents

Информация

int tid = pvm_parent(void)

call pvmfparent (tid)

Подпрограмма pvm_parent() возвращает TID процесса, который порожден данной задачей, или значение PvmNoParent, если он не создан с помощью pvm_spawn()

int dtid = pvm_tidtohost( int tid)

call pvmftidtohost (tid, dtid)

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

int info = pvm_config( int *nhost, int *narch,

    struct pvmhostinfo **hostp)

call pvmfconfig( nhost, narch, dtid, name, arch, speed,

    info)

Подпрограмма pvm_config() возвращает информацию о виртуальной машине, включая количество хостов - nhost - и количество различных форматов данных - narch; hostp - это указатель на декларированный пользователем массив из структур pvmhostinfo. Размер массива по длине должен как минимум соответствовать nhost. При возврате каждая структура pvmhostinfo содержит TID pvmd, имя хоста, имя архитектуры и относительную характеристику скорости процессора для определенного хоста в конфигурации.

Функции на Фортране возвращают информацию об одном хосте за вызов, поэтому для ``опроса'' всех хостов нужен цикл. Если
pvmfconfig вызывается nhost раз, то будет представлена полная внутренняя структура виртуальной машины. Работа с Фортран-интерфейсом подразумевает сохранение копии массива hostp и возврат только одного ``вхождения'' за вызов. На всех хостах должны отработать циклы для того, чтобы они получили обновленный массив hostp. Поэтому, если виртуальная машина в течение этих вызовов изменяется, то изменение проявится в параметрах nhost и narch, но не отразится на информации о хосте. В настоящее время не существует способ ``сбросить'' pvmfconfig() и заставить его перезапустить цикл в процессе его работы.

int info = pvm_tasks ( int which, int *ntask,

    struct pvmtaskinfo **taskp)

call pvmftasks ( which, ntask, tid, ptid, dtid, flag,

     aout, info)

Подпрограмма pvm_tasks() возвращает информацию о задачах PVM, выполняющихся на виртуальной машине. Целое число which указывает, о каких задачах надо вернуть информацию. В настоящее время опциями могут быть: 0 - о всех задачах, pvmd TID (dtid) - о задачах, выполняющихся на указанном хосте, или TID - только об указанной задаче.

Количество задач возвращается в ntask. taskp - это указатель на массив структур pvmtaskinfo - массив размера ntask. Каждая структура pvmtaskinfo содержит TID, pvmd TID, TID предка, флаг статуса и имя файла для порождения. (PVM ``не знает'' имя файла вручную запущенной задачи и поэтому ``не заполняет'' это имя.) Функция на Фортране возвращает информацию об одной задаче за вызов, поэтому для ``опроса'' всех задач нужен цикл. Так что, если нужно ``опрашивать'' все задачи и если pvmftasks вызывается ntask раз, то все задачи будут представлены. Фортран-реализации предполагают, что пул задач не подвержен изменениям, пока имеются циклы ``опроса'' задач. Если же пул изменился, эти изменения не проявятся до тех пор, пока не начнется следующий цикл из ntask вызовов.

Примеры использования pvm_config и pvm_tasks можно найти в исходных текстах консоли PVM, которая сама является задачей PVM. Примеры использования Фортран-версий этих подпрограмм можно найти в исходных текстах pvm3/examples/ testall.f.



2004-06-22