код pvm что это
Параллельная виртуальная машина
Разработано | Университет Теннесси |
---|---|
Первая версия | 1989 г. |
Написано в | ПРОТИВ |
Лицензия | Лицензия BSD |
Веб-сайт | www.csm.ornl.gov/pvm/pvm_home.html |
Резюме
Вступление
PVM управляет всей маршрутизацией сообщений, преобразованием данных и распределением задач в сети различных и обычно несовместимых архитектур.
Интерфейс программирования очень прост:
Демон PVM (pvmd)
На каждой машине запускается демон PVM, который формирует глобальную виртуальную машину. У pvmd есть владелец, который является единственным, кто может использовать ресурсы машины из соображений безопасности.
Демон PVM предоставляет несколько функций:
Он также проверяет, активны ли другие демоны на виртуальной машине.
Даже если приложение выйдет из строя, демон продолжает работать, чтобы помочь с отладкой.
При запуске демон конфигурирует себя как ведущий или ведомый в зависимости от аргументов. Он создает лид-фрейм для связи с задачами и другими демонами и открывает журнал ошибок.
После настройки демон запускает цикл, который проверяет все источники ввода и помещает пакеты в очередь. Эти пакеты затем повторно собираются и вводятся в точку входа.
Демон останавливается, когда он удаляется с виртуальной машины или когда он получает сообщение об остановке.
Когда демон останавливается, он выполняет два последних действия:
Количество задач, которые может обрабатывать демон, ограничено двумя факторами:
Интерпретатор PVM (pvm)
Существует интерпретатор, который запускается с помощью команды pvm и позволяет вам воздействовать на демон (pvmd) с помощью различных команд:
Библиотека PVM
Библиотека позволяет задаче взаимодействовать с демоном и другими задачами. Он содержит функции для сборки и разборки сообщений, а также другие функции для выполнения системных вызовов.
библиотека построена на двух уровнях:
Протоколы, используемые PVM
Демоны общаются друг с другом через UDP, используя механизм проверки и восстановления. TCP не используется в этом случае, потому что он использует FileDescriptor для каждого соединения (количество ограничено системой) и не допускает отказоустойчивости в случае сбоя демона. TCP также был бы слишком ресурсоемким, потому что каждый демон должен был бы иметь N-1 сокетов, которые будут представлять N * (N-1) сокетов для всей системы.
Задачи взаимодействуют друг с другом с помощью протокола TCP для обеспечения согласованности данных.
Как работает Python?
Всем еще раз привет, сейчас расскажу о том, как работает Python, что такое интерпретатор, как работает компилятор и что такое байт-код, далее расскажу о виртуальной машине (PVM) и о производительности Python. Также о альтернативных реализациях интерпретатора.
После того, как вы установили себе Python, перейдем к теоретически-практической части и начнем с того что из себя представляет интерпретатор.
Интерпретатор
В зависимости от используемой версии Python сам интерпретатор может быть реализован как программа на языке C, как набор классов Java и в каком-либо другом виде, но об этом позже.
Запуск сценария в консоли
Давайте запустите в консоле интерпретатор:
Теперь он ожидает ввода комманд, введите туда следующую инструкцию:
ура, наша первая программа! 😀
Запуск сценария из файла
Создайте файл «test.py», с содержимым:
и выполните этот файл:
Вы увидите в консоли результат, поехали дальше!
Динамическая компиляция и байт-код
В следующий раз, когда вы запустите свою программу интерпретатор минует этап компиляции и отдаст на выполнение откомпилированный файл с расширением «.pyc». Однако, если вы изменили исходные тексты вашей программы, то снова произойдет этап компиляции в байт-код, так как Python автоматически следит за датой изменения файла с исходным кодом.
Если Python окажется не в состоянии записать файл с байт-кодом, например из-за отсутствия прав на запись на диск, то программа не пострадает, просто байт-код будет собран в памяти и при завершении программы оттуда удален.
Виртуальная машина Python (PVM)
Производительность
По этим причинам программы на Python не могут выполняться также быстро как на C/C++. Обход инструкций выполняет виртуальная система, а не микропроцессор, и чтобы выполнить байт-код, необходима дополнительная интерпретация, инструкции которой требуют большего времени, чем машинные инструкции микропроцессора.
В итоге, Python по производительности находится между традиционными компилирующими и традиционными интерпретирующими языками программирования.
Альтернативные реализации Python
То что было сказано выше о компиляторе и виртуальной машине, характерно для стандартной реализации Python, так называемой CPython (реализации на ANSI C). Однако также существует альтернативные реализации, такие как Jython и IronPython, о которых пойдет сейчас речь.
CPython
Это стандартная и оригинальная реализация Python, названа так, потому что написана на ANSI C. Именно ее мы установили, когда выбрали пакет ActivePython или установили из FreeBSD портов. Поскольку это эталонная реализация, она как правило работает быстрее, устойчивее и лучше, чем альтернативные реализации.
Jython
Цель Jython состоит в том, чтобы позволить программам на языке Python управлять Java-приложениями, точно также как CPython может управлять компонентами на языках C/C++. Эта реализация имеет беcшовную интеграцию с Java. Поскольку программный код на Python транслируется в байт-код Java, во время выполнения он ведет себя точно также, как настоящая программа на языке Java. Программы на Jython могут выступать в качестве апплетов и сервлетов, создавать графический интерфейс с использованием механизмов Java и т.д. Более того, Jython обеспечивает поддержку возможности импортировать и использовать Java-классы в программном коде Python.
Тем не менее, поскольку реализация Jython обеспечивает более низкую скорость выполнения и менее устойчива по сравнению с CPython, она представляет интерес скорее для разработчиков программ на языке Java, которым необходим язык сценариев в качестве интерфейса к Java-коду.
IronPython
Средства оптимизации скорости выполнения
Существуют и другие реализации, включая динамический компилятор Psyco и транслятор Shedskin C++, которые пытаются оптимизировать основную модель выполнения.
Динамический компилятор Psyco
Во время выполнения программы, Psyco собирает информацию о типах объектов, и затем эта информация используется для генерации высокоэффективного машинного кода, оптимизированного для объектов этого типа. После этого произведенный машинный код заменяет соответствующие участки байт-кода, тем самым увеличивается скорость выполнения.
В идеале некоторые участки программного кода под управление Psyco могут выполняться также быстро, как скомпилированный код на языке Си.
Psyco обеспечивает увеличение скорости от 2 до 100 раз, но обычно в 4 раза, при использовании немодифицированного интерпретатора Python. Единственный минус у Psyco, это то обстоятельство, что в настоящее время он способен генерировать машинный код только для архитектуры Intel x86.
Psyco не идет в стандартной поставке, его надо скачать и установить отдельно. Еще есть проект PyPy, который представляет собой попытку переписать PVM с целью оптимизации кода как в Psyco, проект PyPy собирается поглотить в большей мере проект Psyco.
Транслятор Shedskin C++
Фиксированные двоичные файлы (frozen binaries)
Иногда необходимо из своих программ на Python создавать самостоятельные исполняемые файлы. Это необходимо скорее для упаковки и распространения программ.
Фиксированные двоичные файлы объединяют в единый файл пакета байт-код программ, PVM и файлы поддержки, необходимые программам. В результате получается единственный исполняемый файл, например файл с расширение «.exe» для Windows.
На сегодняшний день существует три основных инструмента создания «frozen binaries»:
Вам надо загружать эти инструменты отдельно от Python, они распространяются бесплатно.
Фиксированные двоичные файлы имеют немалый размер, ибо они содержат в себе PVM, но по современным меркам из все же нельзя назвать необычно большими. Так как интерпретатор Python встроен непосредственно в фиксированные двоичные файлы, его установка не является обязательным требованием для запуска программ на принимающей стороне.
Резюме
На сегодня всё, в следующей статье расскажу о стандартных типах данные в Python, ну и в последующих статьях рассмотрим каждый тип в отдельности, а также функции и операторы для работы с этими типами.
создал файл, запустил его через пайтон, но пишет, что ошибка кодировки (файл сохранен в UTF-8) 🙁
SyntaxError: Non-ASCII character ‘\xd0’
Privateum (PVM): криптовалюта — обзор, отзывы
Что делает компания / проект?
Privateum (PVM) — это инициатива по предоставлению услуг частных транзакций членам союза кооперативов, использующая платформу для совместного внутреннего использования.
Особенности
Транзакции могут осуществляться в любой форме — товары, услуги, фиатные деньги, криптовалюты и токены — все они рассматриваются как акции. Соответствующее видение и стратегия развития изложены в Белой книге инициативы Privateum.
PRIVATEUM — это интегрированное юридическое, общественное и техническое решение, основанное на собственной технологической платформе MULTI HOLDINGS LTD, компании из Соединенного Королевства, предоставляющее права использования кооперативному объединению.
Privateum полностью работает на международном уровне, доступен по всему миру в соответствии с характером эпохи глобализации бизнеса. Система инициативы Privateum обеспечивает интеграцию финтех-компаний под эгидой юридических партнеров. Бизнес-модель Союза кооперативов предназначена для расширения финансовых услуг и управления активами в остальном мире. На основе технологии Blockchain наши партнеры получают все преимущества надежных, безопасных, быстрых, экономичных и эффективных услуг внутреннего управления активами.
Сеть Privateum является вершиной безопасной платежной сети на основе блокчейна благодаря технологическим инновациям, таким как Privateum Ghost Network, разработанной нашими экспертами и в сотрудничестве с юридическими лицами. Это снижает риск атак, мошенничества с использованием личных данных и обеспечивает возможность восстановления доступа к средствам безопасным и надежным способом для наших клиентов.
Безопасность — это путешествие, а не пункт назначения. Поскольку у каждого путешествия есть начало, любая идея, подтверждение концепции или разработка в Privateum заботятся о безопасности с нуля. Надежная программа Secure SDLC охватывает обучение персонала по конкретному языку, моделирование угроз, сканирование SAST и DAST и т. д. И периодически проверяется, чтобы гарантировать соответствие передовым практикам безопасности. Производственная система Privateum построена в соответствии с принципами доверия SOC2 и средствами контроля безопасности NIST 800-53.
Сквозное шифрование; от браузера или мобильного приложения до данных, хранящихся в нашей системе, информация защищена от всех, даже от нас. Передаваемые данные зашифрованы с использованием TLS 1.2 или выше. Сохраненные данные по умолчанию зашифрованы с использованием AES-256 с запланированной ротацией ключей. Все криптографические библиотеки, которые мы используем, имеют открытый исходный код, что может гарантировать, что алгоритмы шифрования не будут скрытно встроены в черный ход.
Призрачная сеть
Наиболее важной отличительной чертой Privateum является концепция сети-призрака. В традиционной сети p2p узлы в равной степени участвуют в совместном использовании данных и сетевых ресурсов. Все эти узлы получают одинаковую компенсацию за свой вклад в сохранение сети.
Однако сеть Privateum, основанная на технологии блокчейнов «консорциума», имеет внутреннюю защищенную частную сеть блокчейнов, которая находится в облаке в памяти и устойчива к аварийному переключению. Частная блокчейн-сеть разрешена только для клиентов Privateum, которые установили отношения с Юридическим лицом, партнером системы Privateum. Сеть Privateum Ghost можно легко восстановить без потери данных клиента и быть готовым к обработке транзакции. Гибридный подход безопасного корпоративного решения и частной сети блокчейнов в высокоскоростной оперативной памяти обеспечивает клиентам безопасную, надежную, быструю и экономичную транзакцию.
SafeTransfer
Privateum имеет встроенный внутренний механизм гарантированной транзакции в частной сети. Механизм SafeTransfer — это запатентованное решение Privateum, которое размещается поверх частной сети Privateum и обеспечивает доставку средств в виде атомарной транзакции.
Подтверждение полномочий
Proof of Authority — это алгоритм, используемый в сети Privateum Ghost, который обеспечивает сравнительно быстрые транзакции с помощью механизма консенсуса, основанного на идентификации в качестве доли. Мастерноды, которые не участвуют в кворумах, предоставляющих основные услуги, наказываются, что в конечном итоге приводит к их исключению из права на оплату мастерноды.
В отличие от механизма Proof-of-Work, обычно называемого «майнингом», здесь нет технической конкуренции между валидаторами. Этот механизм консенсуса почти не требует вычислительной мощности и, следовательно, почти не требует электричества для своей работы.
Токен PVM
PVM — это внешний токен BEP-20, предназначенный для сбора начального финансирования для создания инфраструктуры участников PRIVATEUM INITIATIVE, включая членов сообщества, MULTI HOLDINGS LTD, кооперативов, объединенных в союз, других партнерских организаций и организаций.
В ЕС идентификационный номер плательщика НДС можно проверить онлайн на официальном веб-сайте ЕС VIES. Он подтверждает, что номер в настоящее время назначен, и может предоставить имя или другие идентифицирующие данные объекта, которому был назначен идентификатор. Однако правительства многих стран не предоставляют идентификационные номера НДС из-за законов о защите данных.
Иностранные компании, которые торгуют с частными лицами и некоммерческими организациями в ЕС, могут иметь VATIN, начинающийся с «EU» вместо кода страны, например Godaddy EU826010755 и Amazon ( AWS ) EU826009064.
С 1 января 2020 года действительный номер плательщика НДС клиента является существенным требованием для возможности применения нулевой ставки НДС для поставок товаров внутри Сообщества в ЕС. Если номер НДС клиента недействителен, ставка НДС 0% не может быть применена. Компании должны убедиться, что номера плательщиков НДС своих клиентов проверены.
СОДЕРЖАНИЕ
Номера НДС по странам
Идентификационные номера НДС в Европейском союзе
Французский ключ рассчитывается следующим образом: Ключ = [12 + 3 * (СИРЕНА по модулю 97)] по модулю 97, например: Ключ = [12 + 3 * (404 833 048 по модулю 97)] по модулю 97 = [12 + 3 * 56] по модулю 97 = 180 по модулю 97 = 83, поэтому налоговый номер для 404 833 048 составляет 83 404 833 048 франков, источник: www.insee.fr
«IE» + 7 цифр и две буквы, например IE1234567FA (с января 2013 г., см. [1] )
«IE» + одна цифра, одна буква / «+» / «*», 5 цифр и одна буква (старый стиль, в настоящее время выводится из обращения, см. [2] )
(IVA = Imposta sul Valore Aggiunto)
Для отдельных людей / фрилансеров это либо «ES» + 8 цифр + буква (для испанцев), либо «ES» + буква + 7 цифр + буква (для иностранцев). например, ESX9999999R
Номера НДС стран, не входящих в ЕС
Для 9-значной схемы 2-значный блок, содержащий 8-ю и 9-ю цифры, всегда находится в диапазоне от 00 до 96 и получается из взвешенного контрольного числа по модулю 97 (идентичный алгоритм используется для 12-значной схемы, игнорируя лишний 3-значный блок). Текущая серия по модулю-97 закончилась в течение 2010 года, поэтому с ноября 2009 года для новых регистраций была введена параллельная серия чисел, начиная с 100 nnnn nn и следуя тому же формату, но с двумя последними цифрами, полученными из альтернативного алгоритма, известного как » 9755 «. Алгоритм идентичен алгоритму для установленной серии, за исключением того, что 55 вычитается, чтобы получить контрольный номер (модуль 97), поэтому контрольный номер либо на 55 меньше, либо (если он будет отрицательным) на 42 больше, чем контрольный номер, который номер НДС в установленной серии имел бы, если бы он был идентичен по первым семи цифрам. Детали алгоритма проверки 97-55 должны были быть секретными, но теперь их можно получить в HMRC по запросу.
Регистрации на острове Мэн разделяют 9- и 12-значные форматы с Великобританией, с GB в качестве префикса кода страны, но отличаются наличием 00 в качестве первых двух цифр. Номера с 01 по 09 в первых двух цифрах зарезервированы HM Revenue & Customs для ссылочных схем Великобритании без НДС.
Номера НДС стран Латинской Америки
Personas físicas extranjeras: 10 и 12 цифр. Это NITE (Número de Identificación Tributaria Especial) без дефисов.
Юридическая личность: 10 и 12 цифр. Это Cédula de Persona Jurídica (национальный идентификационный номер предприятия) без дефисов.
Persona extranjera (резидент): 11 и 12 цифр. Это DIMEX (Documento de Identificación de Migración y Extranjería) без дефисов.
Компании: 3 цифры, 6 цифр (ГГММДД), 3 цифры (например, P & G851223B24)
Национальный реестр налогоплательщиков
Компании: 9 цифр без дефиса. Первая цифра должна быть (1, 4, 5), формат для печати на квитанциях: 1 цифра, 1 тире, 2 цифры, 1 тире, 5 цифр, 1 тире, 1 цифра контрольной суммы, например 1-30-00245-8.
Код pvm что это
уЙУФЕНБ РБТБММЕМШОЩИ ЧЩЮЙУМЕОЙК PVM
1. ччедеойе ч рбтбммемшопе ртпзтбннйтпчбойе
рБТБММЕМШОЩЕ ЧЩЮЙУМЙФЕМШОЩЕ УЙУФЕНЩ — ЬФП ЖЙЪЙЮЕУЛЙЕ ЛПНРШАФЕТОЩЕ, Б ФБЛ ЦЕ РТПЗТБННОЩЕ УЙУФЕНЩ, ТЕБМЙЪХАЭЙЕ ФЕН ЙМЙ ЙОЩН УРПУПВПН РБТБММЕМШОХА ПВТБВПФЛХ ДБООЩИ ОБ НОПЗЙИ ЧЩЮЙУМЙФЕМШОЩИ ХЪМБИ.
йДЕС ТБУРБТБММЕМЙЧБОЙС ЧЩЮЙУМЕОЙК ВБЪЙТХЕФУС ОБ ФПН, ЮФП ВПМШЫЙОУФЧП ЪБДБЮ НПЦЕФ ВЩФШ ТБЪДЕМЕОП ОБ ОБВПТ НЕОШЫЙИ ЪБДБЮ, ЛПФПТЩЕ НПЗХФ ВЩФШ ТЕЫЕОЩ ПДОПЧТЕНЕООП.
зМБЧОЩН ЛТЙФЕТЙЕН ЛБЮЕУФЧБ ТБУРБТБММЕМЙЧБОЙС ЧЩЮЙУМЕОЙК СЧМСЕФУС УПЛТБЭЕОЙЕ ПВЭЕЗП ЧТЕНЕОЙ ТЕЫЕОЙС ЪБДБЮЙ. дМС РТПУФПФЩ Ч ЛБЮЕУФЧЕ ЪБДБЮ ВХДЕН ТБУУНБФТЙЧБФШ ЪДЕУШ ЧЩЮЙУМЕОЙС РП ЖПТНХМБН, Ч ЛПФПТЩИ ЧУЕ БМЗЕВТБЙЮЕУЛЙЕ ПРЕТБГЙЙ ЧЩРПМОСАФУС ЪБ ПДЙОБЛПЧПЕ ЧТЕНС T, Б ЙУРПМШЪХЕНЩЕ РТПГЕУУПТЩ ЧУЕ ЙНЕАФ ПДЙОБЛПЧЩЕ ИБТБЛФЕТЙУФЙЛЙ.
рХУФШ ФТЕВХЕФУС ЧЩЮЙУМЙФШ ЧЕМЙЮЙОЩ
рТЙ ЙУРПМШЪПЧБОЙЙ ПДОПЗП РТПГЕУУПТБ Y1 Й Y2 ВХДХФ ЧЩЮЙУМЕОЩ ЪБ ПДЙОБЛПЧПЕ ЧТЕНС 3T. рТЙ ЙУРПМШЪПЧБОЙЙ ДЧХИ РТПГЕУУПТПЧ Y1 НПЦЕФ ВЩФШ ЧЩЮЙУМЕОП ЪБ ЧТЕНС 2T, Ф.Л. ПРЕТБГЙЙ ХНОПЦЕОЙС НПЗХФ ВЩФШ ЧЩРПМОЕОЩ РБТБММЕМШОП. б ЧЩЮЙУМЕОЙЕ Y2 ОЕ НПЦЕФ ВЩФШ ХУЛПТЕОП, Ф.Л. УБНБ ЖПТНХМБ ОЕ ДПРХУЛБЕФ РБТБММЕМШОПЗП ЧЩРПМОЕОЙС ПРЕТБГЙК.
йЪ ТБУУНПФТЕООПЗП РТЙНЕТБ УМЕДХЕФ, ЮФП ЧПЪНПЦОПУФЙ ДМС ТБУРБТБММЕМЙЧБОЙС ЧЩЮЙУМЕОЙК ПЗТБОЙЮЙЧБАФУС ОЕ ФПМШЛП ЮЙУМПН ЙНЕАЭЙИУС РТПГЕУУПТПЧ, ОП Й ПУПВЕООПУФСНЙ ЧЩЮЙУМЙФЕМШОПЗП БМЗПТЙФНБ, ЛПФПТЩК НПЦЕФ ЧППВЭЕ ОЕ ДПРХУЛБФШ ТБУРБТБММЕМЙЧБОЙС. лТПНЕ ФПЗП, ПЮЕЧЙДОП, ЮФП РТЕДЕМШОЩК ЬЖЖЕЛФ ПФ ЙУРПМШЪПЧБОЙС N РТПГЕУУПТПЧ НПЦЕФ ВЩФШ ДПУФЙЗОХФ МЙЫШ ФПЗДБ, ЛПЗДБ ПВЭБС ЧЩЮЙУМЙФЕМШОБС ОБЗТХЪЛБ НПЦЕФ ВЩФШ ТБЪДЕМЕОБ ФПЮОП ОБ N ЮБУФЕК, Й РТЙ ЬФПН ОЙ ПДЙО ЙЪ РТПГЕУУПТПЧ ОЕ РТПУФБЙЧБЕФ ПФ ОБЮБМБ Й ДП ЛПОГБ ЧЩЮЙУМЕОЙК.
фЕРЕТШ ПВТБФЙН ЧОЙНБОЙЕ ОБ ФП, ЮФП Ч ТБУУНПФТЕООПН РТЙНЕТЕ ВЩМЙ РТПЙЗОПТЙТПЧБОЩ ЪБФТБФЩ ЧТЕНЕОЙ ОБ РЕТЕУЩМЛЙ ДБООЩИ НЕЦДХ РТПГЕУУПТБНЙ. ьФП ПФЮБУФЙ РТБЧПНЕТОП, ЕУМЙ РТПГЕУУПТЩ ЙУРПМШЪХАФ ПВЭХА РБНСФШ (УМЕДХЕФ ПФНЕФЙФШ, ЮФП ЧУЕ РТПГЕУУПТЩ ЙНЕАФ ЙОДЙЧЙДХБМШОХА ТЕЗЙУФТПЧХА РБНСФШ ЗПТБЪДП ВПМЕЕ ВЩУФТПДЕКУФЧХАЭХА, ЮЕН пъх). еУМЙ ЦЕ РТПГЕУУПТЩ ТБВПФБАФ У ДБООЩНЙ, ИТБОСЭЙНЙУС Ч ЙОДЙЧЙДХБМШОЩИ пъх, ФП ПВНЕО ДБООЩНЙ НЕЦДХ ЬФЙНЙ пъх УОЙЦБЕФ ЬЖЖЕЛФ ПФ ТБУРБТБММЕМЙЧБОЙС ЧЩЮЙУМЕОЙК ЧРМПФШ ДП ФПЗП, ЮФП ЬФПФ ЬЖЖЕЛФ НПЦЕФ УФБФШ ПФТЙГБФЕМШОЩН. пФУАДБ УМЕДХЕФ, ЮФП РТЙ ПРФЙНЙЪБГЙЙ ТБУРБТБММЕМЙЧБОЙС ЧЩЮЙУМЕОЙК ОХЦОП ХЮЙФЩЧБФШ ЧТЕНС, ЪБФТБЮЙЧБЕНПЕ ОБ ПВНЕО ДБООЩНЙ НЕЦДХ РТПГЕУУПТБНЙ. й ЧППВЭЕ РТЙ РТПЮЙИ ТБЧОЩИ ХУМПЧЙСИ ХНЕОШЫЕОЙЕ ЮЙУМБ Й ПВЯЕНПЧ УППВЭЕОЙК, ЛПФПТЩНЙ ПВНЕОЙЧБАФУС РБТБММЕМШОП ТБВПФБАЭЙЕ РТПГЕУУПТЩ, ЛБЛ РТБЧЙМП, РТЙЧПДЙФ Л УПЛТБЭЕОЙА ПВЭЕЗП ЧТЕНЕОЙ ТЕЫЕОЙС ЪБДБЮЙ. рПЬФПНХ ЦЕМБФЕМШОП ТБУРБТБММЕМЙЧБФШ ЧЩЮЙУМЙФЕМШОЩК РТПГЕУУ ОБ ХТПЧОЕ ЛБЛ НПЦОП ВПМЕЕ ЛТХРОЩИ ВМПЛПЧ БМЗПТЙФНБ.
пФНЕФЙН, ЮФП ЙДЕБМШОБС РБТБММЕМШОБС РТПЗТБННБ ПВМБДБЕФ УМЕДХАЭЙНЙ УЧПКУФЧБНЙ:
— дМЙОЩ РБТБММЕМШОП ЧЩРПМОСЕНЩИ ЧЕФЧЕК ТБЧОЩ НЕЦДХ УПВПК.
— рПМОПУФША ЙУЛМАЮЕОЩ РТПУФПЙ ЙЪ-ЪБ ПЦЙДБОЙС ДБООЩИ, РЕТЕДБЮЙ ХРТБЧМЕОЙС Й ЧПЪОЙЛОПЧЕОЙС ЛПОЖМЙЛФПЧ РТЙ ЙУРПМШЪПЧБОЙЙ ПВЭЙИ ТЕУХТУПЧ.
-пВНЕО ДБООЩНЙ РПМОПУФША УПЧНЕЭЕО У ЧЩЮЙУМЕОЙСНЙ.
хЧЕМЙЮЕОЙЕ УФЕРЕОЙ ЬЖЖЕЛФЙЧОПУФЙ РБТБММЕМЙЪНБ (ХНЕОШЫЕОЙЕ ЧТЕНЕООЩИ ЪБФТБФ ОБ ОБЛМБДОЩЕ ТБУИПДЩ) ДПУФЙЗБЕФУС УМЕДХАЭЙНЙ УРПУПВБНЙ:
— ХЛТХРОЕОЙЕН ЕДЙОЙГ ТБУРБТБММЕМЙЧБОЙС;
— ХНЕОШЫЕОЙЕН УМПЦОПУФЙ БМЗПТЙФНПЧ ЗЕОЕТБГЙЙ РБТБММЕМШОЩИ РТПГЕДХТ (РПДРТПЗТБНН);
— ЙЪОБЮБМШОПК РПДЗПФПЧЛПК РБЛЕФБ ТБЪМЙЮОЩИ ЧБТЙБОФПЧ ЙУИПДОЩИ ДБООЩИ;
— ТБУРБТБММЕМЙЧБОЙЕН БМЗПТЙФНПЧ ЗЕОЕТБГЙЙ РБТБММЕМШОЩИ РТПГЕДХТ (РПДРТПЗТБНН).
дМС ЬЖЖЕЛФЙЧОПЗП ЙУРПМШЪПЧБОЙС РБТБММЕМШОЩИ ЧЩЮЙУМЙФЕМШОЩИ РТПЗТБНН, ОЕПВИПДЙНП ЧЩВТБФШ ПРТЕДЕМЕООХА УТЕДХ ТБЪТБВПФЛЙ, ЛПФПТБС ВХДЕФ УППФЧЕФУФЧПЧБФШ ФТЕВПЧБОЙСН. уТЕДБ ТБЪТБВПФЛЙ РБТБММЕМШОЩИ РТПЗТБНН УПУФПЙФ ЙЪ СЪЩЛБ РБТБММЕМШОПЗП РТПЗТБННЙТПЧБОЙС, ВЙВМЙПФЕЛЙ ЖХОЛГЙК Й РПДРТПЗТБНН, УТЕДУФЧБ ПФМБДЛЙ Й ПГЕОЛЙ РТПЙЪЧПДЙФЕМШОПУФЙ (РТПЖЙМЙТПЧБОЙС).
ч ОБУФПСЭЕЕ ЧТЕНС УПЪДБОЩ ДЕУСФЛЙ УЙУФЕН РБТБММЕМШОПЗП РТПЗТБННЙТПЧБОЙС:
OpenMP, [p]threads, shmem (ДМС УЙУФЕН У ТБЪДЕМСЕНПК РБНСФША), Occam, Concurrent C, HPF (ЧЩУПЛПРТПЙЪЧПДЙФЕМШОЩК жптфтбо), HPC++, Distributed Java (ДМС УЙУФЕН У ТБУРТЕДЕМЕООПК РБНСФША), Parlog, Concurrent Prolog (РБТБММЕМШОЩЕ ЧЕТУЙЙ СЪЩЛБ ртпмпз), Multilisp (РБТБММЕМШОБС ЧЕТУЙС СЪЩЛБ мйур).
оБЙВПМШЫЕЕ ТБУРТПУФТБОЕОЙЕ УТЕДЙ УЙУФЕН РБТБММЕМШОПЗП РТПЗТБННЙТПЧБОЙС РПМХЮЙМЙ ДЧЕ УМЕДХАЭЙЕ:
пВЕ УЙУФЕНЩ ТЕБМЙЪХАФ НПДЕМШ РЕТЕДБЮЙ УППВЭЕОЙК, УПДЕТЦБФ ВЙВМЙПФЕЛЙ ЖХОЛГЙК Й РПДРТПЗТБНН ДМС УФБОДБТФОЩИ СЪЩЛПЧ РТПЗТБННЙТПЧБОЙС у,у++, Fortran ПВЕУРЕЮЙЧБАФ ЧЪБЙНПДЕКУФЧЙС «ФПЮЛБ-ФПЮЛБ» Й ЗТХРРПЧЩЕ. ч ФП ЦЕ ЧТЕНС УЙУФЕНЩ ЙНЕАФ Й УХЭЕУФЧЕООЩЕ ПФМЙЮЙС.
рТПЕЛФ PVM ВЩМ ОБЮБФ Ч 1989 ЗПДХ. гЕОФТБМШОЩН ЬМЕНЕОФПН ЖТЕКНЧПТЛБ СЧМСЕФУС
ч ПФМЙЮЙЙ ПФ PVM, ЪБТПЦДЕООПЗП Й ТБЪЧЙЧБАЭЕЗПУС Ч ТБНЛБИ ЙУУМЕДПЧБФЕМШУЛПК УТЕДЩ,
оЕПВИПДЙНПУФШ ТБЪТБВПФЛЙ MPI ПВХУМПЧМЕОБ РПФТЕВОПУФША УФБОДБТФЙЪЙТПЧБФШ Й ХОЙЖЙГЙТПЧБФШ API РЕТЕДБЮЙ УППВЭЕОЙК, Ф.Л. ЛБЦДЩК РТПЙЪЧПДЙФЕМШ НОПЗПРТПГЕУУПТОЩИ ЧЩЮЙУМЙФЕМШОЩИ ЛПНРМЕЛУПЧ РТЕДМБЗБМ УЧПК API ПВНЕОБ УППВЭЕОЙСНЙ. MPI ВЩМ РТЙОСФ ЛБЛ УФБОДБТФ API ПВНЕОБ УППВЭЕОЙСНЙ.
й PVM, Й MPI РТЕДПУФБЧМСАФ ЧПЪНПЦОПУФШ МПЗЙЮЕУЛПК УЧСЪЙ НБЫЙО Ч ЕДЙОХА ЧЩЮЙУМЙФЕМШОХА УЙУФЕНХ. й PVM, Й MPI УПДЕТЦЙФ ВПМШЫЕ ЛПМЙЮЕУФЧП ВЙВМЙПФЕЛ ТБЪТБВПФЛЙ РБТБММЕМШОЩИ РТПЗТБНН ДМС СЪЩЛПЧ Fortran, C, Python, Java Б ФБЛ ЦЕ ДМС НОПЗЙИ ДТХЗЙИ. пВЕ УЙУФЕНЩ ТЕБМЙЪХАФ НПДЕМШ РЕТЕДБЮЙ УППВЭЕОЙК.
еУМЙ РТЙМПЦЕОЙЕ ТБЪТБВБФЩЧБФШУС ДМС НОПЗПРТПГЕУУПТОПЗП ЧЩЮЙУМЙФЕМШОПЗП ЛПНРМЕЛУБ,
ВХДЕФ ЪБРХУЛБФШУС ФПМШЛП ОБ ПДОПК БТИЙФЕЛФХТЕ Й ОЕ ФТЕВХЕФ ЪОБЮЙФЕМШОПК РЕТЕОПУЙНПУФЙ,
ЙУРПМШЪПЧБОЙЕ MPI НПЦЕФ РТЙОЕУФЙ ЪОБЮЙФЕМШОЩК ЧЩЙЗТЩЫ Ч ВЩУФТПДЕКУФЧЙЙ. уЙУФЕНБ УПДЕТЦЙФ ЪОБЮЙФЕМШОП ВПМЕЕ ВПЗБФЩЕ УТЕДУФЧБ ЛПННХОЙЛБГЙЙ, РПФПНХ ЕЕ ЙУРПМШЪПЧБОЙЕ ВПМЕЕ РТЕДРПЮФЙФЕМШОП Ч ЧЩЮЙУМЙФЕМШОЩИ УЙУФЕНБИ, ЗДЕ ЙУРПМШЪХАФУС УРЕГЙБМШОЩЕ ТЕЦЙНЩ ЛПННХОЙЛБГЙЙ, ОЕДПУФХРОЩЕ Ч PVM. оП У ГЕМША ПВЕУРЕЮЕОЙС ЧЩУПЛПК УЛПТПУФЙ ЧЪБЙНПДЕКУФЧЙС ОБ MPI ВЩМЙ ОБМПЦЕОЩ ПЗТБОЙЮЕОЙС. оБЙВПМЕЕ ЪОБЮЙНЩНЙ ЙЪ ОЙИ СЧМСЕФУС ПФУХФУФЧЙЕ УПЧНЕУФЙНПУФЙ — ТБЪМЙЮОЩЕ ТЕБМЙЪБГЙЙ MPI ОЕ
НПЗХФ ЧЪБЙНПДЕКУФЧПЧБФШ НЕЦДХ УПВПК, Й ПФУХФУФЧЙЕ ЧПЪНПЦОПУФЙ РЙУБФШ ПФЛБЪПХУФПКЮЙЧЩЕ РТЙМПЦЕОЙС У РПНПЭША MPI.
фБЛ ЛБЛ PVM ТЕБМЙЪХЕФ РПОСФЙЕ «чЙТФХБМШОПК НБЫЙОЩ», ЬФБ УЙУФЕНБ РТЕДРПЮФЙФЕМШОЕК РТЙ ЧЩРПМОЕОЙЙ ЪБДБЮ Ч УЙУФЕНЕ, УПУФПСЭЕК ЙЪ ОЕПДОПТПДОЩИ ХЪМПЧ. PVM УПДЕТЦЙФ УЙУФЕНЩ ХРТБЧМЕОЙС ТЕУХТУБНЙ Й РТПГЕУУБНЙ, ЛПФПТЩЕ ЧБЦОЩ ДМС ОБРЙУБОЙС РТЙМПЦЕОЙК, ЪБРХУЛБЕНЩИ ЛБЛ ОБ ЛМБУФЕТБИ ТБВПЮЙИ УФБОГЙК ФБЛ Й ОБ НОПЗПРТПГЕУУПТОЩИ ЧЩЮЙУМЙФЕМШОЩИ ЛПНРМЕЛУБИ. юЕН ВПМШЫЕ ХЪМПЧ Ч ЛМБУФЕТЕ, ФЕН ЧБЦОЕЕ УФБОПЧЙФУС ПФЛБЪПХУФПКЮЙЧПУФШ PVM. чПЪНПЦОПУФШ ОБРЙУБОЙС РТПЗТБНН, ХУРЕЫОП ТБВПФБАЭЙИ ДБЦЕ ЧП ЧТЕНС ПФЛБЪБ ЧЩЮЙУМЙФЕМШОЩИ ХЪМПЧ, ПЮЕОШ ЧБЦОБ ДМС ТБУРТЕДЕМЕООЩИ ЧЩЮЙУМЕОЙК Ч ОЕПДОПТПДОПК УТЕДЕ. чЩВПТ ОБЙВПМЕЕ ХДПВОПЗП API ЪБЧЙУЙФ ПФ УФТХЛФХТЩ ЧЩЮЙУМЙФЕМШОПК УЙУФЕНЩ Й ЪБДБЮ, ЛПФПТЩЕ ОХЦОП ТЕЫЙФШ.
2.лтбфлпе прйубойе уйуфенщ PVM
рБТБММЕМШОХА ЧЙТФХБМШОХА НБЫЙОХ НПЦОП ПРТЕДЕМЙФШ ЛБЛ ЮБУФШ УТЕДУФЧ ТЕБМШОПЗП ЧЩЮЙУМЙФЕМШОПЗП ЛПНРМЕЛУБ (РТПГЕУУПТЩ, РБНСФШ, РЕТЙЖЕТЙКОЩЕ ХУФТПКУФЧБ Й Ф.Д.), РТЕДОБЪОБЮЕООХА ДМС ЧЩРПМОЕОЙС НОПЦЕУФЧБ ЪБДБЮ, ХЮБУФЧХАЭЙИ Ч РПМХЮЕОЙЙ ПВЭЕЗП ТЕЪХМШФБФБ ЧЩЮЙУМЕОЙК. ч ПВЭЕН УМХЮБЕ ЮЙУМП ЪБДБЮ НПЦЕФ РТЕЧПУИПДЙФШ ЮЙУМП РТПГЕУУПТПЧ, ЧЛМАЮЕООЩИ Ч PVM. лТПНЕ ФПЗП, Ч УПУФБЧ PVM НПЦОП ЧЛМАЮБФШ ДПЧПМШОП ТБЪОПТПДОЩЕ ЧЩЮЙУМЙФЕМШОЩЕ НБЫЙОЩ, ОЕУПЧНЕУФЙНЩЕ РП УЙУФЕНБН ЛПНБОД Й ЖПТНБФБН ДБООЩИ. йОБЮЕ ЗПЧПТС, рБТБММЕМШОПК чЙТФХБМШОПК нБЫЙОПК НПЦЕФ УФБФШ ЛБЛ ПФДЕМШОП ЧЪСФЩК рл, ФБЛ Й МПЛБМШОБС УЕФШ, ЧЛМАЮБАЭБС Ч УЕВС УХРЕТЛПНРШАФЕТЩ У РБТБММЕМШОПК БТИЙФЕЛФХТПК, ХОЙЧЕТУБМШОЩЕ ьчн, ЗТБЖЙЮЕУЛЙЕ ТБВПЮЙЕ УФБОГЙЙ Й ЧУЕ ФЕ ЦЕ НБМПНПЭОЩЕ рл. чБЦОП МЙЫШ, ЮФПВЩ П ЧЛМАЮБЕНЩИ Ч PVM ЧЩЮЙУМЙФЕМШОЩИ УТЕДУФЧБИ ЙНЕМБУШ ЙОЖПТНБГЙС Ч ЙУРПМШЪХЕНПН РТПЗТБННОПН ПВЕУРЕЮЕОЙЙ PVM. вМБЗПДБТС ЬФПНХ РТПЗТБННОПНХ ПВЕУРЕЮЕОЙА РПМШЪПЧБФЕМШ НПЦЕФ УЮЙФБФШ, ЮФП ПО ПВЭБЕФУС У ПДОПК ЧЩЮЙУМЙФЕМШОПК НБЫЙОПК, Ч ЛПФПТПК ЧПЪНПЦОП РБТБММЕМШОПЕ ЧЩРПМОЕОЙЕ НОПЦЕУФЧБ ЪБДБЮ.
PVM РПЪЧПМСЕФ РПМШЪПЧБФЕМСН ЙУРПМШЪПЧБФШ УХЭЕУФЧХАЭЙЕ БРРБТБФОЩЕ УТЕДУФЧБ, ДМС ТЕЫЕОЙС ДПУФБФПЮОП УМПЦОЩИ ЪБДБЮ РТЙ НЙОЙНБМШОЩИ ЪБФТБФБИ. уПФОЙ ЙУУМЕДПЧБФЕМШУЛЙИ ЗТХРР ЧП ЧУЕН НЙТЕ ЙУРПМШЪХАФ PVM, ЮФПВЩ ТЕЫЙФШ ЧБЦОЩЕ ОБХЮОЩЕ, ФЕИОЙЮЕУЛЙЕ, Й НЕДЙГЙОУЛЙЕ РТПВМЕНЩ, Б ФБЛ ЦЕ ЙУРПМШЪХАФ PVM ЛБЛ ПВТБЪПЧБФЕМШОЩК ЙОУФТХНЕОФ, ДМС РТЕРПДБЧБОЙС РБТБММЕМШОПЗП РТПЗТБННЙТПЧБОЙС. ч ОБУФПСЭЕЕ ЧТЕНС, PVM УФБМ ДЕ ЖБЛФП УФБОДБТФПН ДМС ТБУРТЕДЕМЕООЩИ ЧЩЮЙУМЕОЙК.
ъБДБЮЙ PVM НПЗХФ УПДЕТЦБФШ УФТХЛФХТЩ ДМС ПВЕУРЕЮЕОЙС ОЕПВИПДЙНЩИ ХТПЧОЕК ЛПОФТПМС Й ЪБЧЙУЙНПУФЙ. дТХЗЙНЙ УМПЧБНЙ, Ч МАВПК «ФПЮЛЕ» ЧЩРПМОЕОЙС ЧЪБЙНПУЧСЪБООЩИ РТЙМПЦЕОЙК МАВБС УХЭЕУФЧХАЭБС ЪБДБЮБ НПЦЕФ ЪБРХУЛБФШ ЙМЙ ПУФБОБЧМЙЧБФШ ДТХЗЙЕ ЪБДБЮЙ, ДПВБЧМСФШ ЙМЙ ХДБМСФШ ЛПНРШАФЕТЩ ЙЪ ЧЙТФХБМШОПК НБЫЙОЩ. лБЦДЩК РТПГЕУУ НПЦЕФ ЧЪБЙНПДЕКУФЧПЧБФШ Й/ЙМЙ УЙОИТПОЙЪЙТПЧБФШУС У МАВЩН ДТХЗЙН. лБЦДБС УРЕГЙЖЙЮЕУЛБС УФТХЛФХТБ ДМС ЛПОФТПМС Й ЪБЧЙУЙНПУФЙ НПЦЕФ ВЩФШ ТЕБМЙЪПЧБОБ Ч УЙУФЕНЕ PVM БДЕЛЧБФОЩН ЙУРПМШЪПЧБОЙЕН ЛПОУФТХЛГЙК PVM Й ХРТБЧМСАЭЙИ ЛПОУФТХЛГЙК ЗМБЧОПЗП (ИПУФ-) СЪЩЛБ УЙУФЕНЩ.
пВМБДБС ФБЛПК ЧУЕПВЯЕНМАЭЕК РТЙТПДПК (УРЕГЙЖЙЮОП ДМС ЛПОГЕРГЙЙ ЧЙТФХБМШОПК НБЫЙОЩ), Б ФБЛЦЕ РП РТЙЮЙОЕ УЧПЕЗП РТПУФПЗП, ОП ЖХОЛГЙПОБМШОП РПМОПЗП РТПЗТБННОПЗП ЙОФЕТЖЕКУБ, УЙУФЕНБ PVM РПМХЮЙМБ ЫЙТПЛПЕ ТБУРТПУФТБОЕОЙЕ, Ч ФПН ЮЙУМЕ Й Ч ОБХЮОПН УППВЭЕУФЧЕ, УЧСЪБООПН У ЧЩУПЛПУЛПТПУФОЩНЙ ЧЩЮЙУМЕОЙСНЙ.
жХОЛГЙПОЙТПЧБОЙЕ PVM ПУОПЧБОП ОБ НЕИБОЙЪНБИ ПВНЕОБ ЙОЖПТНБГЙЕК НЕЦДХ ЪБДБЮБНЙ, ЧЩРПМОСЕНЩНЙ Ч ЕЕ УТЕДЕ. ч ЬФПН ПФОПЫЕОЙЙ ОБЙВПМЕЕ ХДПВОП ТЕБМЙЪПЧЩЧБФШ PVM Ч ТБНЛБИ НОПЗПРТПГЕУУПТОПЗП ЧЩЮЙУМЙФЕМШОПЗП ЛПНРМЕЛУБ, ЧЩДЕМЙЧ ЧЙТФХБМШОПК НБЫЙОЕ ОЕУЛПМШЛП РТПГЕУУПТПЧ Й ПВЭЕЕ ЙМЙ ЙОДЙЧЙДХБМШОЩЕ (Ч ЪБЧЙУЙНПУФЙ ПФ ХУМПЧЙК) пъх. йУРПМШЪПЧБОЙЕ PVM ДПРХУФЙНП ЛБЛ ОБ НОПЗПРТПГЕУУПТОЩИ ЛПНРШАФЕТБИ (SMP) ФБЛ Й ОБ ЧЩЮЙУМЙФЕМШОЩИ ЛПНРМЕЛУБИ, РПУФТПЕООЩИ РП ЛМБУФЕТОПК ФЕИОПМПЗЙЙ. рТЙ ЙУРПМШЪПЧБОЙЙ PVM, ЛБЛ РТБЧЙМП, ЪОБЮЙФЕМШОП ХРТПЭБАФУС РТПВМЕНЩ ВЩУФТПЗП ЙОЖПТНБГЙПООПЗП ПВНЕОБ НЕЦДХ ЪБДБЮБНЙ, Б ФБЛЦЕ РТПВМЕНЩ УПЗМБУПЧБОЙС ЖПТНБФПЧ РТЕДУФБЧМЕОЙС ДБООЩИ НЕЦДХ ЪБДБЮБНЙ, ЧЩРПМОСЕНЩНЙ ОБ ТБЪОЩИ РТПГЕУУПТБИ
уХЭЕУФЧХЕФ ДЧБ ЧБТЙБОФБ ПТЗБОЙЪБГЙЙ ЧЩЮЙУМЕОЙК.
ч УЙУФЕНЕ PVM ЛБЦДБС ЪБДБЮБ (ЛПФПТПК УППФЧЕФУФЧХЕФ ЙУРПМОСЕНЩК ЖБКМ), ЪБРХЭЕООБС ОБ ОЕЛПФПТПН РТПГЕУУПТЕ, ЙДЕОФЙЖЙГЙТХЕФУС ГЕМЩН ЮЙУМПН, ЛПФПТПЕ ОБЪЩЧБЕФУС ЙДЕОФЙЖЙЛБФПТПН ЪБДБЮЙ (ПВЩЮОП ПВПЪОБЮБЕФУС TID ) Й РП УНЩУМХ РПИПЦЕ ОБ ЙДЕОФЙЖЙЛБФПТ РТПГЕУУБ Ч ПРЕТБГЙПООПК УЙУФЕНЕ Unix. лПОЛТЕФОЩЕ ЪОБЮЕОЙС TID ОЕУХЭЕУФЧЕООЩ, ЧБЦОП МЙЫШ, ЮФПВЩ ЧУЕ ЪБДБЮЙ, ЪБРХЭЕООЩЕ Ч PVM, ЙНЕМЙ ТБЪМЙЮОЩЕ TID. пФНЕФЙН ЪДЕУШ, ЮФП ЛПРЙЙ ПДОПЗП ЙУРПМОСЕНПЗП ЖБКМБ, ЪБРХЭЕООЩЕ РБТБММЕМШОП ОБ N РТПГЕУУПТБИ PVM, УПЪДБАФ N ЪБДБЮ У ТБЪОЩНЙ TID.
3.хуфбопчлб й обуфтпклб уйуфенщ PVM
дМС ХУФБОПЧЛЙ PVM Ч УЙУФЕНЕ ОЕПВИПДЙНП УПЪДБФШ ЛБФБМПЗ, ЗДЕ ВХДЕФ ТБУРПМБЗБФШУС PVM, ОБРТЙНЕТ, Ч ЛБФБМПЗ /pvm. ч ЬФПФ ЛБФБМПЗ ОЕПВИПДЙНП ТБУРБЛПЧБФШ БТИЙЧ У ЙУИПДОЙЛБНЙ УЙУФЕНЩ.
tar zxvf pvm3.4.5.tgz
дМС ТБВПФЩ У УЙУФЕНПК PVM ОЕПВИПДЙНП ХУФБОПЧЙФШ ЕЕ ОБ ЧУЕИ НБЫЙОБИ ЛМБУФЕТБ.
уМЕДХЕФ ПФНЕФЙФШ, ЮФП ДМС ХНЕОШЫЕОЙС РТПВМЕН, УЧСЪБООЩИ У ОБУФТПКЛПК PVM ОБ ХЪМБИ ЛМБУФЕТБ, ОБ ЧУЕИ НБЫЙОБИ ЛМБУФЕТБ PVM УМЕДХЕФ ХУФБОБЧМЙЧБФШ Ч ПДЙО Й ФПФ ЦЕ ЛБФБМПЗ.
рЕТЕД УВПТЛПК Й ЪБРХУЛПН PVM УМЕДХЕФ ХУФБОПЧЙФШ РЕТЕНЕООХА ПЛТХЦЕОЙС PVM_ROOT. ч ЬФПК РЕТЕНЕООПК ПЛТХЦЕОЙС ОХЦОП ХЛБЪБФШ ЛБФБМПЗ, Ч ЛПФПТПН ОБИПДСФУС ЛБФБМПЗЙ PVM (Ч ОБЫЕН УМХЮБЕ, /pvm).
setenv PVM_ROOT= /pvm
export PVM_ROOT= /pvm
еЭЕ ПДОПК ЧБЦОПК РЕТЕНЕООПК ПЛТХЦЕОЙС СЧМСЕФУС PVM_ARCH. ч ОЕК УПДЕТЦЙФУС ОБЪЧБОЙЕ БТИЙФЕЛФХТЩ ПРЕТБГЙПООПК УЙУФЕНЩ. дБООБС РЕТЕНЕООБС ДПМЦОБ ХУФБОБЧМЙЧБФШУС БЧФПНБФЙЮЕУЛЙ, ОП ЕУМЙ ЬФПЗП ОЕ РТПЙЪПЫМП, ОХЦОП ХУФБОПЧЙФШ БТИЙФЕЛФХТХ УБНПУФПСФЕМШОП. рТЙ ЙУРПМШЪПЧБОЙЙ Linux ЬФБ РЕТЕНЕООБС ДПМЦОБ УПДЕТЦБФШ ЪОБЮЕОЙЕ LINUX.
рП ХНПМЮБОЙА PVM ЙУРПМШЪХЕФ РТПФПЛПМ rsh ДМС ПВЭЕОЙС У ДТХЗЙНЙ ЛПНРШАФЕТБНЙ ЛМБУФЕТБ. еУМЙ ЧЩ ИПФЙФЕ rsh ЪБНЕОЙФШ ОБ ssh, ЧЩ ДПМЦОЩ ЙЪНЕОЙФШ ЖБКМ pvm /conf/LINUX.def, РТПРЙУБЧ Ч РЕТЕНЕООПК ARCHCFLAGS РБТБНЕФТ RSHCOMMAND, ПРТЕДЕМЙЧ ДМС ОЕЗП РПМОЩК РХФШ Л ЛПНБОДЕ ssh (ОБРТЙНЕТ /usr/bin/ssh). оБРТЙНЕТ, ЖБКМ pvm/conf/LINUX.def НПЦЕФ ЧЩЗМСДЕФШ ФБЛ:
ч ДБМШОЕКЫЕН ВХДЕН УЮЙФБФШ, ЮФП ЧЙТФХБМШОБС НБЫЙОБ ВЩМБ УПВТБОБ ЙНЕООП У ФБЛЙНЙ ЙЪНЕОЕОЙСНЙ, ФП ЕУФШ У ЪБНЕОПК rsh ОБ ssh.
рПУМЕ ЧОЕУЕОЙС ЙЪНЕОЕОЙК Ч УЙУФЕНХ ОЕПВИПДЙНП ЧЩКФЙ ЙЪ МПЗЙОБ Й ЪБКФЙ ЪБОПЧП, ЮФПВЩ ЙЪНЕОЕОЙС, УДЕМБООЩЕ ЧБНЙ Ч РТПЖБКМБИ ЧУФХРЙМЙ Ч УЙМХ.
дМС УВПТЛЙ Й ХУФБОПЧЛЙ PVM, ОБИПДСУШ Ч ЛБФБМПЗЕ /pvm, УМЕДХЕФ ЧЩРПМОЙФШ ЛПНБОДХ make. рП ПЛПОЮБОЙЙ ЕЕ ТБВПФЩ УЙУФЕНБ PVM ЗПФПЧБ Л ЪБРХУЛХ.
рПУМЕ ЪБРХУЛБ ЛПОУПМЙ НПЦОП ХЧЙДЕФШ РТЙЗМБЫЕОЙЕ, ЛПФПТПЕ УЧЙДЕФЕМШУФЧХЕФ П ФПН, ЮФП ЛМБУФЕТ ЗПФПЧ Л ТБВПФЕ:
нПЦОП ЧЧЕУФЙ ЛПНБОДХ conf ДМС РЕЮБФЙ ЛПОЖЙЗХТБГЙЙ ЛМБУФЕТБ. тЕЪХМШФБФ ВХДЕФ ЧЩЗМСДЕФШ РТЙНЕТОП ФБЛ:
1 host, 1 data format
HOST DTID ARCH SPEED DSIG
dhsilabs 40000 LINUX 1000 0x00408841
-оЕМШЪС ЪБРХУЛБФШ РТПГЕУУЩ РТСНП ЙЪ ЛПОУПМЙ PVM. лПОУПМШ УМХЦЙФ МЙЫШ ДМС ХРТБЧМЕОЙС ЛМБУФЕТПН.
оП «ТБУРБТБММЕМЙЧБФШУС» ВХДХФ МЙЫШ ФЕ РТПГЕУУЩ, ЛПФПТЩЕ РПДДЕТЦЙЧБАФ PVM.
рТЙ ЪБРХУЛЕ «hello» ЧЩ ДПМЦОЩ ХЧЙДЕФШ УППВЭЕОЙЕ
hello, world from hostname,
дТХЗЙНЙ УМПЧБНЙ ЧУЕ ХЪМЩ ЛМБУФЕТБ ДПМЦОЩ РПРТЙЧЕФУФЧПЧБФШ ЧБУ.
4.жхолгйй хртбчмеойс ъбдбюбнй
пВЩЮОП Ч УБНПН ОБЮБМЕ УЧПЕК ТБВПФЩ РТПЗТБННБ ЧЩЪЩЧБЕФ ЖХОЛГЙА
int tid = pvm_mytid ( void ),
ЧПЪЧТБЭБАЭХА ЪОБЮЕОЙЕ ЙДЕОФЙЖЙЛБФПТБ ЪБДБЮЙ tid >= 0, ЛПФПТЩН НПЦЕФ ПРТЕДЕМСФШУС ЧЩВПТ ДМС ЧЩРПМОЕОЙС ФПК ЙМЙ ЙОПК ЮБУФЙ РТПЗТБННЩ. еУМЙ РТПГЕУУ ОЕ ЧЛМАЮЕО Ч PVM, ФП ДПВБЧМСЕФ ЕЗП (ЛБЛ Й МАВПК ДТХЗПК РЕТЧЩК ЧЩЪПЧ PVM ).ьФБ ЖХОЛГЙС НПЦЕФ ЧЩЪЩЧБФШУС ВПМЕЕ ПДОПЗП ТБЪБ.
int numt = pvm_spawn (
char *task, /* ЙНС ЙУРПМОСЕНПЗП ЖБКМБ */
char **argv, /* БТЗХНЕОФЩ ЛПНБОДОПК УФТПЛЙ */
int flag, /* ПРГЙЙ ЪБРХУЛБ */
char *where, /* ХЛБЪЩЧБЕФ НЕУФП ЪБРХУЛБ */
int ntask, /* ЮЙУМП ЪБРХУЛБЕНЩИ ЛПРЙК РТПЗТБННЩ */
int *tids /* НБУУЙЧ ЪОБЮЕОЙК tid ДМС ЪБРХЭЕООЩИ ЪБДБЮ */
— ЛПФПТБС ЪБРХУЛБЕФ Ч PVM ntask ЛПРЙК ЙУРПМОСЕНПЗП ЖБКМБ У ЙНЕОЕН «task» У ПДЙОБЛПЧЩНЙ БТЗХНЕОФБНЙ ЛПНБОДОПК УФТПЛЙ Ч НБУУЙЧЕ argv Й ЧПЪЧТБЭБЕФ ЮЙУМП ЪБРХЭЕООЩИ ЪБДБЮ numt Б ФБЛЦЕ РПУМЕДПЧБФЕМШОПУФШ ЙДЕОФЙЖЙЛБФПТПЧ ДМС ЪБРХЭЕООЩИ ЪБДБЮ. рТЙЮЕН, ЕУМЙ numt 0, ФП НЕУФПН ЪБРХУЛБ ВХДЕФ ЧЩВТБО УБНЩК ВЩУФТЩК ЛПНРШАФЕТ.
ХЛБЪБО Ч РБТБНЕФТЕ where;
ЛПФПТПЗП ХЛБЪБОБ Ч РБТБНЕФТЕ where;
рБТБНЕФТ where ПРЙУЩЧБЕФ, ОБ ЛБЛЙИ ЛПНРШАФЕТБИ ЛМБУФЕТБ НПЦЕФ ВЩФШ ЪБРХЭЕОБ ЪБДБЮБ. рБТБНЕФТ СЧМСЕФУС РТПУФПК УФТПЛПЧПК РЕТЕНЕООПК, Ч ЛПФПТХА ЪБРЙУБОП ЙНС УРЙУЛБ ЛПНРШАФЕТПЧ. уРЙУЛЙ ЛПНРШАФЕТПЧ ОБИПДСФУС Ч ЛПОЖЙЗХТБГЙПООЩИ ЖБКМБИ УЙУФЕНЩ PVM Й ЖПТНЙТХАФУС ОБ ЬФБРЕ ЕЕ ХУФБОПЧЛЙ.
дМС ДПВБЧМЕОЙС ОПЧПЗП ХЪМБ Ч УЙУФЕНХ ЙУРПМШЪХЕФУС УМЕДХАЭБС ЖХОЛГЙС:
int pvm_add_hosts(char** hosts, int nhosts, int* infos);
hosts – УРЙУПЛ ЙНЕО ДПВБЧМСЕНЩИ НБЫЙО
nhosts – ЮЙУМП ДПВБЧМСЕНЩИ НБЫЙО
infos – ЛПДЩ ПЫЙВПЛ ( PVM ):
int tid = pvm_mytid( void )
уМЕДХАЭБС ЖХОЛГЙС ЧПЪЧТБЭБЕФ TID ДЕНПОБ, ЧЩРПМОСАЭЕЗПУС ОБ ФПН ЦЕ ИПУФЕ, ЮФП Й ЪБДБЮБ У TID. ьФБ РПДРТПЗТБННБ РТЙНЕОЙНБ ДМС ПРТЕДЕМЕОЙС, ОБ ЛБЛПН ИПУФЕ ЧЩРПМОСЕФУС ДБООБС ЪБДБЮБ.
int tid = pvm_tidtohost( int tid)
вПМЕЕ ПВПВЭЕООБС ЙОЖПТНБГЙС П ЧОХФТЕООЕК УФТХЛФХТЕ ЧЙТФХБМШОПК НБЫЙОЩ, ЧЛМАЮБС ФЕЛУФПЧЩЕ ЙНЕОБ УЛПОЖЙЗХТЙТПЧБООЩИ ИПУФПЧ, НПЦЕФ ВЩФШ РПМХЮЕОБ У ЙУРПМШЪПЧБОЙЕН УМЕДХАЭЕК ЖХОЛГЙЙ:
int info = pvm_config( int *nhost, int *narch, struct pvmhostinfo **hostp)
int info = pvm_tasks ( int which, int *ntask, struct pvmtaskinfo **taskp)
numt = pvm_spawn ( «host», 0, PvmTaskHost, «sparky», 2, &tid[0] );
— ЪБРХУЛБАФУС 2 ЛПРЙЙ ЙУРПМОСЕНПЗП ЖБКМБ «host» ВЕЪ РБТБНЕФТПЧ Ч ЛПНБОДОПК УФТПЛЕ ОБ ЧЩЮЙУМЙФЕМШОПН ЛПНРМЕЛУЕ ФЙРБ «sparky»; ЧПЪЧТБЭБЕНЩЕ ЙДЕОФЙЖЙЛБФПТЩ ЪБДБЮ ЪБРЙУБОЩ Ч НБУУЙЧЕ tid.
numt = pvm_spawn ( «node», argv, PvmTaskArch + PvmTaskDebug,
— ЪБРХУЛБАФУС 2 ЛПРЙЙ ЙУРПМОСЕНПЗП ЖБКМБ «node» У РБТБНЕФТБНЙ ЛПНБОДОПК УФТПЛЙ Ч НБУУЙЧЕ argv ОБ МАВПН ЧЛМАЮЕООПН Ч УПУФБЧ PVM ЧЩЮЙУМЙФЕМШОПН ЛПНРМЕЛУЕ У БТИЙФЕЛФХТПК ФЙРБ «RIOS» У ЙУРПМШЪПЧБОЙЕН ПФМБДЮЙЛБ; ЧПЪЧТБЭБЕНЩЕ ЙДЕОФЙЖЙЛБФПТЩ ЪБДБЮ ЪБРЙУБОЩ Ч tid[5], tid[6].
numt = pvm_spawn ( «node», 0, 0, 0, 4, tids );
— ЪБРХУЛБАФУС 4 ЛПРЙЙ ЙУРПМОСЕНПЗП ЖБКМБ «node» ВЕЪ РБТБНЕФТПЧ ЛПНБОДОПК УФТПЛЙ У БЧФПНБФЙЮЕУЛЙН ЧЩВПТПН ЙУРПМШЪХЕНЩИ ЧЩЮЙУМЙФЕМШОЩИ УТЕДУФЧ ДМС ЧЩРПМОЕОЙС ЪБДБЮ; ЧПЪЧТБЭБЕНЩЕ ЙДЕОФЙЖЙЛБФПТЩ ЪБДБЮ ЪБРЙУБОЩ Ч НБУУЙЧЕ tid.
int info = pvm_kill ( int tid );
— ЪБЧЕТЫБЕФ ЧЩРПМОЕОЙЕ ЪБДБЮЙ У ЙДЕОФЙЖЙЛБФПТПН tid; РТЙ ПЫЙВЛЕ ЧПЪЧТБЭБЕФ ЛПД ПЫЙВЛЙ info int info = pvm_exit ( void );
— ЪБЧЕТЫБЕФ ТБВПФХ PVM, ЪБРХЭЕООПК РПМШЪПЧБФЕМЕН, ОП РТЙ ЬФПН УБНБ ЪБДБЮБ РТПДПМЦБЕФ ЧЩРПМОСФШУС ХЦЕ ЛБЛ ПВЯЕЛФ МПЛБМШОПК ПРЕТБГЙПООПК УЙУФЕНЩ Й ЪБЧЕТЫБЕФ ТБВПФХ, ЛБЛ ПВЩЮОП.
рП ХНПМЮБОЙА ФПМШЛП ФЕЛУФ, ЧЩЧПДЙНЩК ТПДЙФЕМШУЛПК ЪБДБЮЕК (ФП ЕУФШ ФПК, ЛПФПТХА чЩ УБНЙ ЪБРХУФЙМЙ У ФЕТНЙОБМБ) ПЛБЦЕФУС ОБ ЬЛТБОЕ. уФБОДБТФОЩК ЧЩЧПД ЪБДБЮ, ЪБРХУЛБЕНЩИ ЖХОЛГЙЕК pvm_spawn(), РП ХНПМЮБОЙА РЕТЕОБРТБЧМСЕФУС Ч LOG-ЖБКМ ЙУРПМОСАЭЕК УЙУФЕНЩ PVM ($PVM_TMP/pvml.*).
жХОЛГЙС pvm_catchout(FILE *) РПЪЧПМСЕФ РЕТЕОБРТБЧЙФШ ЕЗП Ч МАВПК ДТХЗПК ПФЛТЩФЩК ДМС ЪБРЙУЙ ЖБКМ, ОБРТЙНЕТ, ЖТБЗНЕОФ
info = pvm_spawn (char *task,char **argv,int flag,char *where,int ntask, int *tids );
Ч ТПДЙФЕМШУЛПК ЪБДБЮЕ чеуш ЧЩЧПД ПФ чуеи ЪБРХУЛБЕНЩИ РПД-ЪБДБЮ РЕТЕОБРТБЧЙФ ОБ ЬЛТБО. рТЙ ЬФПН PVM ЗБТБОФЙТХЕФ, ЮФП УФТПЛЙ ПФ ТБЪОЩИ ЪБДБЮ ОЕ ВХДХФ «ОБМЕЪБФШ» ПДОБ ОБ ДТХЗХА, Й ЛБЦДБС УФТПЛБ ВХДЕФ РТЕДЧБТСФШУС ЙДЕОФЙЖЙЛБФПТПН ФПК ЪБДБЮЙ, ЛПФПТБС ЕЕ ЧЩЧЕМБ. йУРПМШЪПЧБОЙЕ pvm_catchout() ЙНЕЕФ ДЧБ ОЕДПУФБФЛБ: Б) НЕЦДХ РПУЩМЛПК УФТПЛЙ Ч ЖБКМ ЙМЙ ОБ ЬЛТБО ЙЪ РПД-ЪБДБЮЙ Й ЕЕ ЖБЛФЙЮЕУЛЙН ФБН РПСЧМЕОЙЕН НПЦЕФ ВЩФШ ЪБДЕТЦЛБ ОЕЙЪЧЕУФОПК ЪБТБОЕЕ ДМЙФЕМШОПУФЙ, Й, В) ЕУМЙ ПВЯЕН ЧЩЧПДЙНПК ДЙБЗОПУФЙЛЙ ПФ ТБЪОЩИ ЪБДБЮ ПЮЕОШ ЧЕМЙЛ, ПЮЕОШ ФТХДОП ТБЪПВТБФШУС Ч РПЧЕДЕОЙЙ ЛБЛПК-ФП ПДОПК ЛПОЛТЕФОПК ЪБДБЮЙ.
тБВПФБФШ УП УТЕДУФЧБНЙ P VM НПЦОП ЙЪ ЛПОУПМЙ. дМС ЬФПЗП ЙУРПМШЪХАФУС УМЕДХАЭЙЕ ЖХОЛГЙЙ:
pvm> add hostname ДПВБЧМЕОЙЕ ХЪМБ Ч ЧЙТФХБМШОХА НБЫЙОХ
pvm> delete hostname ХДБМЕОЙЕ ХЪМБ ЙЪ ЧЙТФХБМШОПК НБЫЙОЩ
pvm> conf РЕЮБФШ ЛПОЖЙЗХТБГЙЙ ЧЙТФХБМШОПК НБЫЙОЩ
pvm> halt ЪБЧЕТЫЙФШ ТБВПФХ ЧУЕИ ДЕНПОПЧ Й ЪБЛТЩФШ PVM
pvm> spawn task ЪБРХУЛ РТПГЕУУБ У ЙНЕОЕН task
pvm> kill tid РТЕТЩЧБОЙЕ ЧЩРПМОЕОЙС ЪБДБОЙС
pvm> ps РЕЮБФШ УРЙУЛБ ЪБРХЭЕООЩИ РТПГЕУУПЧ
pvm> reset ЪБЧЕТЫЕОЙЕ ЧУЕИ ЪБРХЭЕООЩИ ЪБДБЮ
pvm> spawn task ЪБРХУЛ РТПГЕУУБ У ЙНЕОЕН task
pvm> kill tid РТЕТЩЧБОЙЕ ЧЩРПМОЕОЙС ЪБДБОЙС
pvm> ps РЕЮБФШ УРЙУЛБ ЪБРХЭЕООЩИ РТПГЕУУПЧ
5.пвнео уппвэеойснй нецдх ъбдбюбнй
дМС РТЙОСФПК НПДЕМЙ ЧЪБЙНПДЕКУФЧЙС ЪБДБЮ Ч PVM УЮЙФБЕФУС, ЮФП Ч РТЕДЕМБИ ПДОПК PVM МАВБС ЪБДБЮБ НПЦЕФ РЕТЕДБЧБФШ УППВЭЕОЙС МАВПК ДТХЗПК ЪБДБЮЕ, РТЙЮЕН, ТБЪНЕТЩ Й ЮЙУМП ФБЛЙИ УППВЭЕОЙК Ч РТЙОГЙРЕ ОЕ ПЗТБОЙЮЕОЩ. ьФП РТЕДРПМПЦЕОЙЕ УХЭЕУФЧЕООП ХРТПЭБЕФ ТЕБМЙЪБГЙА PVM ОБ ЛПОЛТЕФОЩИ ЧЩЮЙУМЙФЕМШОЩИ ЛПНРМЕЛУБИ, Ф.Л. РТЙ ЬФПН ЛПОФТПМШ РЕТЕРПМОЕОЙС ВХЖЕТОЩИ ХУФТПКУФЧ Й НБУУЙЧПЧ ПУФБЕФУС ФПМШЛП Ч ЧЕДЕОЙЙ ЮБУФОЩИ ПРЕТБГЙПООЩИ УЙУФЕН.
дМС РПЧЩЫЕОЙС ЬЖЖЕЛФЙЧОПУФЙ НЕЦЪБДБЮОПЗП ПВНЕОБ ЙОЖПТНБГЙЕК РТЕДХУНПФТЕОП ЙУРПМШЪПЧБОЙЕ ОЕУЛПМШЛЙИ БМЗПТЙФНПЧ.
ч ЮБУФОПУФЙ, НПЦОП ЙУРПМШЪПЧБФШ БМЗПТЙФН ВМПЛЙТПЧБООПК РЕТЕДБЮЙ, РТЙ ЛПФПТПН ЖХОЛГЙС «рПУМБФШ УППВЭЕОЙЕ» ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ (Ф.Е. ЪБЧЕТЫБЕФ ТБВПФХ) ФПМШЛП РПУМЕ ФПЗП ЛБЛ РПМХЮЕОБ РПМПЦЙФЕМШОБС ЙМЙ ПФТЙГБФЕМШОБС ЛЧЙФБОГЙС ПФ РПМХЮБФЕМС УППВЭЕОЙС. фБЛПК БМЗПТЙФН РЕТЕДБЮЙ У ПЦЙДБОЙЕН ХЧЕДПНМЕОЙС П ДПУФБЧЛЕ РТЕДРПЮФЙФЕМЕО Ч ФЕИ УМХЮБСИ, ЛПЗДБ ДМЙООПЕ УППВЭЕОЙЕ РЕТЕДБЕФУС ОЕУЛПМШЛЙНЙ РПТГЙСНЙ, Б ФБЛЦЕ РТЙ ПВНЕОЕ ЛПНБОДБНЙ, РПУМЕДПЧБФЕМШОПУФШ ЧЩРПМОЕОЙС ЛПФПТЩИ ЧП ЧТЕНЕОЙ ДПМЦОБ ВЩФШ УФТПЗП ЖЙЛУЙТПЧБООПК.
рТЙ ЙУРПМШЪПЧБОЙЙ ОЕВМПЛЙТПЧБООЩИ БМЗПТЙФНПЧ РЕТЕДБЮЙ Й РТЙЕНБ УППВЭЕОЙК (ЛПЗДБ ОЕ ФТЕВХЕФУС ПЦЙДБОЙЕ ПФЧЕФОЩИ УППВЭЕОЙК ПФ РПМХЮБФЕМС УППВЭЕОЙК )ХНЕОШЫБАФУС РТПУФПЙ РТПГЕУУПТПЧ, ЧЩЪЧБООЩЕ ПЦЙДБОЙЕН ТЕБЛГЙЙ «УПВЕУЕДОЙЛБ». пУПВЕООП СТЛП ЧЩТБЦЕООЩК ЬЖЖЕЛФ ЬФП ДБЕФ ОБ РТЙЕНОПК УФПТПОЕ РТЙ ОЕЙЪЧЕУФОПН ЧТЕНЕОЙ РТЙИПДБ УППВЭЕОЙС. нПЦОП ФБЛЦЕ ПТЗБОЙЪПЧБФШ ТБВПФХ РТЙЕНОПЗП РТПГЕУУПТБ ФБЛ, ЮФПВЩ ПО Ч ПЦЙДБОЙЙ УППВЭЕОЙС ЧЩРПМОСМ ФЕЛХЭХА ТБВПФХ, МЙЫШ ЧТЕНС ПФ ЧТЕНЕОЙ ПРТБЫЙЧБС РТЙЕНОЩК ВХЖЕТ ОБ РТЕДНЕФ ОПЧЩИ ЧИПДСЭЙИ УППВЭЕОЙК.
лТБФЛП ЫБЗЙ РПУЩМЛЙ Й РТЙЕНБ УППВЭЕОЙК НПЦОП ПРЙУБФШ УМЕДХАЭЙН ПВТБЪПН:
хРБЛПЧЛБ Ч ВХЖЕТ ДБООЩИ.
рТЙЕН ДБООЩИ Ч ВХЖЕТ.
тБУРБЛПЧЛБ ДБООЩИ ЙЪ ВХЖЕТБ.
рПУЩМЛБ УППВЭЕОЙК Ч PVM РТЕДОБЪОБЮЕОБ ДМС РЕТЕДБЮЙ ДБООЩИ НЕЦДХ ТБЪМЙЮОЩНЙ РТПГЕУУБН Й УПУФПЙФ ЙЪ ФТЕИ ЫБЗПЧ.
чП-РЕТЧЩИ, ВХЖЕТ ДБООЩИ РЕТЕД РПУЩМЛПК ДПМЦЕО ВЩФШ РТПЙОЙГЙБМЙЪЙТПЧБО У ЙУРПМШЪПЧБОЙЕН ЖХОЛГЙК pvm_initsend() ЙМЙ pvm_mkbuf().
чП-ЧФПТЩИ, РЕТЕУЩМБЕНЩЕ ДБООЩЕ ДПМЦОЩ ВЩФШ «ХРБЛПЧБОЩ» Ч ЬФПФ ВХЖЕТ. дМС ХРБЛПЧЛЙ ЙУРПМШЪХЕФУС ОЕЛПФПТПЕ ЛПМЙЮЕУФЧП ЛПНВЙОБГЙК ЧЩЪПЧПЧ ЖХОЛГЙЙ pvm_pk*().
фТЕФЙК ЫБЗ ЪБЛМАЮБЕФУС Ч РЕТЕУЩМЛЕ ДБООЩИ БДТЕУБФБН. дМС ЬФПК ГЕМЙ Ч ЪБЧЙУЙНПУФЙ ПФ УРЙУЛБ БДТЕУБФПЧ ЙУРПМШЪХЕФУС ЧЩЪПЧ ЖХОЛГЙЙ pvm_send(), Ч РБТБНЕФТБИ ЛПФПТПК ХЛБЪЩЧБЕФУС ЛПОЛТЕФОЩК РТПГЕУУ-РТЙЕНОЙЛ, ЙМЙ ЖХОЛГЙЙ pvm_mcast(), ЙУРПМШЪХЕНПК ДМС ЧУЕОБРТБЧМЕООПК РЕТЕДБЮЙ (ФП ЕУФШ ЧУЕН РТПГЕУУБН УТБЪХ).
уХЭЕУФЧЕООЩН СЧМСЕФУС ФП ПВУФПСФЕМШУФЧП, ЮФП РТЙ РЕТЕДБЮЕ РПУМЕДПЧБФЕМШОПУФЙ УППВЭЕОЙК ПФ ПДОПК ЪБДБЮЙ Л ДТХЗПК РПТСДПЛ РТЙЕНБ УППВЭЕОЙЕ ЧУЕЗДБ УПЧРБДБЕФ У РПТСДЛПН ЙИ РЕТЕДБЮЙ. вПМЕЕ ФПЗП, ЕУМЙ ДП ПВТБЭЕОЙС Л ЖХОЛГЙЙ «рТЙОСФШ УППВЭЕОЙЕ» Ч РТЙЕНОЩК ВХЖЕТ РТЙОЙНБАЭЕК ЪБДБЮЙ ЪБРЙУБОП ОЕУЛПМШЛП УППВЭЕОЙК, ФП ЖХОЛГЙС «рТЙОСФШ УППВЭЕОЙЕ» ЧПЪЧТБФЙФ УУЩМЛХ ОБ РЕТЧПЕ РТЙОСФПЕ УППВЭЕОЙЕ.
рБНСФШ ДМС ВХЖЕТОЩИ НБУУЙЧПЧ ОБ РЕТЕДБАЭЕК Й РТЙЕНОПК УФПТПОЕ ЧЩДЕМСЕФУС ДЙОБНЙЮЕУЛЙ, УМЕДПЧБФЕМШОП, НБЛУЙНБМШОЩК ПВЯЕН УППВЭЕОЙК ПЗТБОЙЮЙЧБЕФУС ФПМШЛП ПВЯЕНПН ДПУФХРОПК РБНСФЙ. еУМЙ ПДОБ ЙЪ ЪБДБЮ, ЪБРХЭЕООЩИ Ч PVM, ОЕ НПЦЕФ РПМХЮЙФШ ФТЕВХЕНХА РБНСФШ ДМС ПВЭЕОЙС У ДТХЗЙНЙ ЪБДБЮБНЙ, ФП ПОБ ЧЩДБЕФ РПМШЪПЧБФЕМА УППФЧЕФУФЧХАЭЕЕ УППВЭЕОЙЕ ПВ ПЫЙВЛЕ («cannot get memory»), ОП ДТХЗЙЕ ЪБДБЮЙ ПВ ЬФПН УПВЩФЙЙ ОЕ ЙЪЧЕЭБАФУС Й НПЗХФ, ОБРТЙНЕТ, РТПДПМЦБФШ РПУЩМБФШ ЕК УППВЭЕОЙС.
уППВЭЕОЙЕ РТЙОЙНБЕФУС РТПГЕУУПН-БДТЕУБФПН У РПНПЭША УППФЧЕФУФЧХАЭЕК ЖХОЛГЙЙ, РПУМЕ ЮЕЗП РТПЙУИПДЙФ ТБУРБЛПЧЛБ РТЙОСФПЗП ВМПЛБ, ЙЪЧМЕЮЕОЙЕ ИТБОСЭЙИУС Ч ОЕН ДБООЩИ Й ЪБРПМОЕОЙЕ ЙНЙ УППФЧЕФУФЧХАЭЙИ МПЛБМШОЩИ РЕТЕНЕООЩИ ЙМЙ НБУУЙЧПЧ.
рТПГЕДХТБ РТЙЕНБ УППВЭЕОЙК НПЦЕФ ВЩФШ УЛПОЖЙЗХТЙТПЧБОБ Ч ОЕУЛПМШЛЙИ ЧБТЙБОФБИ:
-ДМС РТЙЕНБ МАВЩИ УППВЭЕОЙК
-ДМС РТЙЕНБ МАВЩИ УППВЭЕОЙК ПФ ПРТЕДЕМЕООПЗП ЙУФПЮОЙЛБ
-ДМС РТЙЕНБ МАВЩИ УППВЭЕОЙК У ПРТЕДЕМЕООЩН message tag
-ДМС РТЙЕНБ МАВЩИ УППВЭЕОЙК У ПРТЕДЕМЕООЩН message tag ПФ ПРТЕДЕМЕООПЗП ЙУФПЮОЙЛБ
рТЙ РТЙЕНЕ УППВЭЕОЙС, ЧП-РЕТЧЩИ, ОХЦОП ПРТЕДЕМЙФШ БМЗПТЙФН РТЙЕНБ (ВМПЛЙТПЧБООЩК ЙМЙ ОЕВМПЛЙТПЧБООЩК), ЪБФЕН, РТЙОСЧ УППВЭЕОЙЕ, ЕЗП ОХЦОП ТБУРБЛПЧБФШ, Ф.Е. ЧПУУФБОПЧЙФШ РЕТЕДБООЩЕ ЖТБЗНЕОФЩ ДБООЩИ Ч УППФЧЕФУФЧЙЙ У ЙИ ФЙРБНЙ.
чЩЪПЧ ЕЕ ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН:
int bufid = pvm_initsend( int encoding ) ;
ьФБ ЖХОЛГЙС ЧЩЪЩЧБЕФУС ОЕРПУТЕДУФЧЕООП РЕТЕД ХРБЛПЧЛПК ОПЧПК РПТГЙЙ РЕТЕУЩМБЕНЩИ ДБООЩИ Ч ВХЖЕТ УППВЭЕОЙС. жХОЛГЙС pvm_initsend ПУЧПВПЦДБЕФ ВХЖЕТ Й УПЪДБЕФ ОПЧЩК ДМС ХРБЛПЧЛЙ Ч ОЕЗП ДБООЩИ. уИЕНБ ЛПДЙТПЧЛЙ ХРБЛПЧЩЧБЕНЩИ Ч ВХЖЕТ ДБООЩИ ХЛБЪЩЧБЕФУС ЪБДБОЙЕН РЕТЕНЕООПК encoding. чПЪЧТБЭБЕНПЕ Ч РЕТЕНЕООХА bufid ЪОБЮЕОЙЕ СЧМСЕФУС ЙДЕОФЙЖЙЛБФПТПН ВХЖЕТБ. дБООБС ЖХОЛГЙС ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ, ТБЧОПЕ МЙВП ЙДЕОФЙЖЙЛБФПТХ ВХЖЕТБ (bufid > 0), МЙВП ЛПДХ ПЫЙВЛЙ (bufid int bufid = pvm_mkbuf ( int encoding );
— УПЪДБЕФ ОПЧЩК РХУФПК РЕТЕДБАЭЙК ВХЖЕТ У ЙДЕОФЙЖЙЛБФПТПН bufid Й УП УРПУПВПН ЛПДЙТПЧБОЙС-ХРБЛПЧЛЙ ДБООЩИ, ПРТЕДЕМСЕНЩН ЪОБЮЕОЙЕН РБТБНЕФТБ encoding. рТЙ ПЫЙВЛЕ bufid ПЫЙВЛЕ info
int bufid = getsbuf ( void );
— ЧПЪЧТБЭБЕФ ЙДЕОФЙЖЙЛБФПТ БЛФЙЧОПЗП РЕТЕДБАЭЕЗП ВХЖЕТБ ЙМЙ ЛПД ПЫЙВЛЙ РТЙ bufid int oldbuf = pvm_setsbuf ( int bufid );
— РЕТЕЛМАЮБЕФ БЛФЙЧОПУФШ У РЕТЕДБАЭЕЗП ВХЖЕТБ oldbuf ОБ РЕТЕДБАЭЙК ВХЖЕТ bufid, УПИТБОСС УПУФПСОЙЕ ВХЖЕТБ oldbuf.
int oldbuf = pvm_setrbuf ( int bufid );
— РЕТЕЛМАЮБЕФ БЛФЙЧОПУФШ У РТЙЕНОПЗП ВХЖЕТБ oldbuf ОБ РТЙЕНОЩК ВХЖЕТ bufid, УПИТБОСС УПУФПСОЙЕ ВХЖЕТБ oldbuf.
еУМЙ Ч ЖХОЛГЙСИ pvm_setsbuf(. ) Й pvm_setrbuf(. ) РБТБНЕФТ bufid = 0, ФП УПУФПСОЙЕ БЛФЙЧОПЗП ВХЖЕТБ УПИТБОСЕФУС, Б БЛФЙЧОПУФШ У ОЕЗП УОЙНБЕФУС, ОП ОЕ РЕТЕДБЕФУС ДТХЗПНХ ВХЖЕТХ. ьФП РПЪЧПМСЕФ ЪБЭЙФЙФШ ЧТЕНЕООП ОЕЙУРПМШЪХЕНЩК ВХЖЕТ ПФ УППВЭЕОЙК, ЛПФПТЩЕ НПЗХФ РПТПЦДБФШУС ОЕЛПФПТЩНЙ УЙУФЕНОЩНЙ Й ВЙВМЙПФЕЮОЩНЙ НПДХМСНЙ, ЙУРПМШЪХАЭЙНЙ ФПФ ЦЕ НЕИБОЙЪН ПВНЕОБ УППВЭЕОЙСНЙ.
ч ВПМШЫЙОУФЧЕ УМХЮБЕЧ ДПУФБФПЮОП ДМС ПТЗБОЙЪБГЙЙ РБТБММЕМШОЩИ ЧЩЮЙУМЕОЙК ЙНЕФШ Ч ЛБЦДПК ЧЩРПМОСЕНПК ЪБДБЮЕ ПДЙО РЕТЕДБАЭЙК Й ПДЙО РТЙЕНОЩК ВХЖЕТ, ЮФП РПЪЧПМСЕФ ПЗТБОЙЮЙФШУС ЙУРПМШЪПЧБОЙЕН ФПМШЛП ЖХОЛГЙЙ initsend.
5.2хрблпчлб, ретедбюб й ртйен уппвэеойк
дМС ХРБЛПЧЛЙ Ч РЕТЕДБАЭЙК ВХЖЕТ ДБООЩИ ТБЪМЙЮОПЗП ФЙРБ УМХЦЙФ ОБВПТ ЖХОЛГЙК У ПДОПФЙРОЩН ЙОФЕТЖЕКУПН. рЕТЧЩК РБТБНЕФТ ЖХОЛГЙЙ СЧМСЕФУС ХЛБЪБФЕМЕН УППФЧЕФУФЧХАЭЕЗП ФЙРБ ОБ РЕТЧЩК ЬМЕНЕОФ НБУУЙЧБ, РПДМЕЦБЭЕЗП ХРБЛПЧЛЕ, ЧФПТПК РБТБНЕФТ nitem ТБЧЕО ДМЙОЕ ЬФПЗП НБУУЙЧБ, Б ФТЕФЙК РБТБНЕФТ stride ХЛБЪЩЧБЕФ, УЛПМШЛП ЬМЕНЕОФПЧ ХЛБЪБООПЗП ФЙРБ УПУФБЧМСАФ ПДЙО ЬМЕНЕОФ НБУУЙЧБ (ЧУЕЗП ХРБЛПЧЩЧБЕФУС (nitem * stride) ЬМЕНЕОФПЧ ХЛБЪБООПЗП ФЙРБ).
int info = pvm_pkbyte ( char *xp, int nitem, int stride );
int info = pvm_pkcplx ( float *cp, 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 *ip, int nitem, int stride );
int info = pvm_pkuint ( unsigned int *ip, int nitem, int stride );
int info = pvm_pkshort ( short *ip, int nitem, int stride );
int info = pvm_pkushort ( unsigned short *ip, int nitem, int stride );
int info = pvm_pklong ( long *ip, int nitem, int stride );
int info = pvm_pkulong ( unsigned long *ip, int nitem, int stride );
int info = pvm_pkstr ( char *cp, int nitem, int stride );
оБРТЙНЕТ, ДМС ХРБЛПЧЛЙ ГЕМПЮЙУМЕООЩИ ДБООЩИ ЙУРПМШЪХЕФУС ЖХОЛГЙС
int info = pvm_pkint ( int *ip, int nitem, int stride );
дМС РЕТЕЮЙУМЕООЩИ ЖХОЛГЙК ЧПЪЧТБЭБЕНПЕ ЪОБЮЕОЙЕ info МЙВП ТБЧОП 0, МЙВП( РТЙ info int info = pvm_send ( int tid, int msgtag );
— РТЙУЧБЙЧБЕФ УППВЭЕОЙА ЙДЕОФЙЖЙЛБФПТ msgtag Й РПУЩМБЕФ УППВЭЕОЙЕ ЪБДБЮЕ У ЙДЕОФЙЖЙЛБФПТПН tid.
int info = pvm_mcast ( int *tids, int ntask, int msgtag );
— РТЙУЧБЙЧБЕФ УППВЭЕОЙА ЙДЕОФЙЖЙЛБФПТ msgtag Й РПУЩМБЕФ ЕЗП ЪБДБЮБН, ЙДЕОФЙЖЙЛБФПТЩ ЛПФПТЩИ РЕТЕЮЙУМЕОЩ Ч ntask ЬМЕНЕОФБИ НБУУЙЧБ tids. дМЙОБ НБУУЙЧБ tids ТБЧОБ ntask.
int info = pvm_psend ( int tid, int msgtag, void *vp, int cnt, int type )
— ХРБЛПЧЩЧБЕФ cnt ЬМЕНЕОФПЧ НБУУЙЧБ vd ФЙРБ type Ч УППВЭЕОЙЕ, РТЙУЧБЙЧБЕФ ЕНХ ЙДЕОФЙЖЙЛБФПТ msgtag Й РПУЩМБЕФ ЕЗП ЪБДБЮЕ У ЙДЕОФЙЖЙЛБФПТПН tid.
ьФБ ЖХОЛГЙС РПЪЧПМСЕФ ПВИПДЙФШУС ВЕЪ ЖХОЛГЙК ХРБЛПЧЛЙ, ЕУМЙ УППВЭЕОЙЕ УПДЕТЦЙФ МЙЫШ ПДЙО НБУУЙЧ РТПУФПЗП ФЙРБ. дМС ЪОБЮЕОЙК РБТБНЕФТБ type ЙУРПМШЪХАФУС УМЕДХАЭЙЕ УЙНЧПМЙЮЕУЛЙЕ ЙНЕОБ: PVM_STR, PVM_BYTE, PVM_SHORT, PVM_INT, PVM_LONG, PVM_USHORT, PVM_UINT, PVM_ULONG, PVM_FLOAT, PVM_DOUBLE, PVM_CPLX, PVM_DCPLX.
рЕТЕЮЙУМЕООЩЕ ЖХОЛГЙЙ ЧПЪЧТБЭБАФ МЙВП ЪОБЮЕОЙЕ info = 0, МЙВП ЛПД ПЫЙВЛЙ info int bufid = pvm_recv ( int tid, int msgtag );
— ПУХЭЕУФЧМСЕФ ВМПЛЙТПЧБООЩК РТЙЕН, Ф.Е. ПЦЙДБЕФ РПУФХРМЕОЙС УППВЭЕОЙС У ЙДЕОФЙЖЙЛБФПТПН msgtag ПФ ЪБДБЮЙ У ЙДЕОФЙЖЙЛБФПТПН tid, РПУМЕ ЮЕЗП УПЪДБЕФ ОПЧЩК РТЙЕНОЩК ВХЖЕТ У ЙДЕОФЙЖЙЛБФПТПН bufid, РПНЕЭБЕФ Ч ОЕЗП РТЙОСФПЕ УППВЭЕОЙЕ Й ЪБЧЕТЫБЕФ ТБВПФХ.
int bufid = pvm_nrecv ( int tid, int msgtag );
— ПУХЭЕУФЧМСЕФ ОЕВМПЛЙТПЧБООЩК РТЙЕН, Ф.Е. РТЙ ПФУХФУФЧЙЙ УППВЭЕОЙС ЪБЧЕТЫБЕФ ТБВПФХ, ЧПЪЧТБЭБС ЪОБЮЕОЙЕ bufid = 0. еУМЙ УППВЭЕОЙЕ У ЪБДБООЩНЙ ЪОБЮЕОЙСНЙ tid Й msgtag РПУФХРЙМП, ФП ПОП РПНЕЭБЕФУС Ч УПЪДБООЩК ДМС ОЕЗП РТЙЕНОЩК ВХЖЕТ, ЙДЕОФЙЖЙЛБФПТ ЛПФПТПЗП СЧМСЕФУС ЧПЪЧТБЭБЕНЩН ЪОБЮЕОЙЕН
int bufid = pvm_trecv ( int tid, int msgtag, struct timeval *tmout );
— ПУХЭЕУФЧМСЕФ ВМПЛЙТПЧБООЩК РТЙЕН УППВЭЕОЙС, ЕУМЙ ЧТЕНС ЕЗП ПЦЙДБОЙС ОЕ ВПМШЫЕ ЧЕМЙЮЙОЩ tmout, Ч РТПФЙЧОПН УМХЮБЕ ЮЕТЕЪ ЧТЕНС tmout ЖХОЛГЙС ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ bufid = 0. ч УФТХЛФХТЕ ФЙРБ timeval ЙНЕЕФУС ДЧБ ГЕМПЮЙУМЕООЩИ РПМС, Ч ЛПФПТЩЕ ЪБРЙУЩЧБАФУС ЮЙУМП УЕЛХОД Й НЙММЙУЕЛХОД.
дМС ЖХОЛГЙК РТЙЕНБ УППВЭЕОЙК ЧПЪНПЦОЩ УМЕДХАЭЙЕ ЧБТЙБГЙЙ ЪОБЮЕОЙК РБТБНЕФТПЧ:
лПЗДБ ЪБДБООПЕ ЧТЕНС ПЦЙДБОЙС tmout = 0, ЖХОЛГЙС pvm_trecv(. ) ПУХЭЕУФЧМСЕФ ОЕВМПЛЙТПЧБООЩК РТЙЕН, Б ЛПЗДБ ХЛБЪБФЕМШ ОБ tmout ТБЧЕО NULL (УППФЧЕФУФЧХЕФ ВЕУЛПОЕЮОПНХ ЧТЕНЕОЙ ПЦЙДБОЙС), ПУХЭЕУФЧМСЕФУС ВМПЛЙТПЧБООЩК РТЙЕН, Ч ПУФБМШОЩИ ЦЕ УМХЮБСИ ТЕБМЙЪХЕФУС РТПНЕЦХФПЮОЩК БМЗПТЙФН РТЙЕНБ УППВЭЕОЙК.
уМЕДХАЭЙЕ ЖХОЛГЙЙ УМХЦБФ ДМС ДПРПМОЙФЕМШОПК ТБВПФЩ РТЙ РТЙЕНЕ УППВЭЕОЙК:
int bufid = pvm_probe ( int tid, int msgtag );
— РТПЧЕТСЕФ, РПУФХРЙМП МЙ ПЦЙДБЕНПЕ УППВЭЕОЙЕ. еУМЙ ПОП РПУФХРЙМП, ФП ЧПЪЧТБЭБЕФУС ЙДЕОФЙЖЙЛБФПТ РТЙЕНОПЗП ВХЖЕТБ bufid > 0, ЕУМЙ УППВЭЕОЙЕ ЕЭЕ ОЕ РПУФХРЙМП, ФП ЧПЪЧТБЭБЕФУС ЪОБЮЕОЙЕ bufid = 0.
int info = pvm_bufinfo ( int bufid, int nbytes, int msgtag, int tid );
жХОЛГЙЙ ТБУРБЛПЧЛЙ ДБООЩИ, ЪБРЙУБООЩИ Ч РТЙЕНОПН ВХЖЕТЕ, РТЙНЕОСАФУС Ч ФПК ЦЕ РПУМЕДПЧБФЕМШОПУФЙ, Ч ЛБЛПК РТЙНЕОСМЙУШ ЖХОЛГЙЙ ХРБЛПЧЛЙ ДБООЩИ Ч РПУЩМБЕНПЕ УППВЭЕОЙЕ. лБЛ Й ДМС ЖХОЛГЙК ХРБЛПЧЛЙ ДБООЩИ, ЖХОЛГЙЙ ТБУРБЛПЧЛЙ ФБЛЦЕ ЙНЕАФ 3 РБТБНЕФТБ. рЕТЧЩК РБТБНЕФТ ЖХОЛГЙЙ СЧМСЕФУС ХЛБЪБФЕМЕН УППФЧЕФУФЧХАЭЕЗП ФЙРБ ОБ РЕТЧЩК ЬМЕНЕОФ НБУУЙЧБ, РПДМЕЦБЭЕЗП ТБУРБЛПЧЛЕ, ЧФПТПК РБТБНЕФТ nitem ТБЧЕО ДМЙОЕ ЬФПЗП НБУУЙЧБ, Б ФТЕФЙК РБТБНЕФТ stride ХЛБЪЩЧБЕФ, УЛПМШЛП ЬМЕНЕОФПЧ ХЛБЪБООПЗП ФЙРБ УПУФБЧМСАФ ПДЙО ЬМЕНЕОФ НБУУЙЧБ (ЧУЕЗП ХРБЛПЧЩЧБЕФУС (nitem * stride) ЬМЕНЕОФПЧ ХЛБЪБООПЗП ФЙРБ).
уМЕДХАЭЙЕ ЖХОЛГЙЙ УМХЦБФ ДМС ТБУРБЛПЧЛЙ ДБООЩИ УППФЧЕФУФЧХАЭЕЗП ФЙРБ:
int info = pvm_upkbyte ( char *xp, int nitem, int stride );
int info = pvm_upkcplx ( float *cp, int nitem, int stride );
int info = pvm_upkdcplx ( double *zp, int nitem, int stride );
int info = pvm_upkdouble ( double *dp, int nitem, int stride );
int info = pvm_upkfloat ( float *fp, int nitem, int stride );
int info = pvm_upkint ( int *ip, int nitem, int stride );
int info = pvm_upkshort ( short *ip, int nitem, int stride );
int info = pvm_upklong ( long *ip, int nitem, int stride );
int info = pvm_upkstr ( char *cp, int nitem, int stride );
рЕТЕЮЙУМЕООЩЕ ЖХОЛГЙЙ ЧПЪЧТБЭБАФ ЪОБЮЕОЙЕ МЙВП info = 0, МЙВП ЛПД ПЫЙВЛЙ info char cp[5]; int np[3]; double dp[7]; string s[];
фПЗДБ УППВЭЕОЙЕ ХРБЛПЧЩЧБЕФУС УМЕДХАЭЙН ПВТБЪПН:
info = pvm_pkbyte ( cp, 5, 1 );
info = pvm_pkint ( np, 3, 1 );
info = pvm_pkdouble ( dp, 7, 1 );
info = pvm_pkstr ( s );
рПУМЕ РТЙЕНБ Ч ДТХЗПК ЪБДБЮЕ ДЕМБЕФУС УМЕДХАЭБС ТБУРБЛПЧЛБ РТЙ ХУМПЧЙЙ, ЮФП ДМС НБУУЙЧПЧ cp, np, dp, s ЧЩДЕМЕОБ РБНСФШ.
char cp[]; int np[]; double dp[]; string s[];
info = pvm_upkbyte ( cp, 5, 1 );
info = pvm_upkint ( np, 3, 1 );
info = pvm_upkdouble ( dp, 7, 1 );
info = pvm_upkstr ( s );
зТХРРПЧЩЕ ЖХОЛГЙЙ СЧМСАФУС ЬЖЖЕЛФЙЧОЩН УТЕДУФЧПН ДМС ЛППТДЙОБГЙЙ ДЕКУФЧЙК НОПЦЕУФЧБ ЪБДБЮ Ч PVM. пОЙ РПЪЧПМСАФ МАВПНХ РПДНОПЦЕУФЧХ ЧЩРПМОСЕНЩИ ЪБДБЮ ПВЯЕДЙОЙФШУС Ч ЗТХРРХ, ЛПФПТБС ЙДЕОФЙЖЙГЙТХЕФУС РП ЙНЕОЙ, ЪБТБОЕЕ ЙЪЧЕУФОПНХ ЕЕ ЮМЕОБН, Й ПТЗБОЙЪПЧБФШ ЧОХФТЙ ЗТХРРЩ ФБЛЙЕ ЧЙДЩ ЧЪБЙНПДЕКУФЧЙС ЪБДБЮ ЛБЛ УЙОИТПОЙЪБГЙС ДЕКУФЧЙК, ПВНЕО УППВЭЕОЙСНЙ Й УПЧНЕУФОПЕ ЧЩРПМОЕОЙЕ ЗМПВБМШОЩИ ПРЕТБГЙК.
уХЭЕУФЧЕООП ФП, ЮФП, УПЕДЙОССУШ Ч ЗТХРРХ, ЪБДБЮЙ НПЗХФ ОЕ ЪОБФШ ЙДЕОФЙЖЙЛБФПТПЧ ДТХЗ ДТХЗБ, Б РПУМЕ ПВТБЪПЧБОЙС ЗТХРРЩ МАВБС ЪБДБЮБ МЕЗЛП НПЦЕФ ПРТЕДЕМЙФШ ЙДЕОФЙЖЙЛБФПТЩ ЧУЕИ ЮМЕОПЧ ЗТХРРЩ. лТПНЕ ФПЗП, МАВБС ЪБДБЮБ НПЦЕФ ЧИПДЙФШ ПДОПЧТЕНЕООП Ч ОЕУЛПМШЛП ТБЪОЩИ ЗТХРР Ч ЪБЧЙУЙНПУФЙ ПФ ФТЕВПЧБОЙК Л ЛППТДЙОБГЙЙ ХУЙМЙК У ДТХЗЙНЙ ЪБДБЮБНЙ.
х ЧУЕИ ЗТХРРПЧЩИ ЖХОЛГЙК ЙНЕЕФУС РБТБНЕФТ char *group, ЛПФПТЩК МЙВП ХЛБЪЩЧБЕФ ОБ УФТПЛХ У ЙНЕОЕН ЗТХРРЩ, МЙВП СЧМСЕФУС УФТПЛПЧПК ЛПОУФБОФПК.
уМЕДХАЭЙЕ ЖХОЛГЙЙ УМХЦБФ ДМС ТБВПФЩ У ЪБДБЮБНЙ, Ч УПУФБЧЕ ЗТХРРЩ:
int inum = pvm_joingroup ( char *group );
— рЕТЧЩК ЧЩЪПЧ pvm_joingroup() УПЪДБЕФ ЗТХРРХ У ЙНЕОЕН group Й ЧЛМАЮБЕФ ЧЩЪЩЧБАЭХА ЪБДБЮХ Ч ОЕЕ. pvm_joingroup ЧПЪЧТБЭБЕФ ОПНЕТ ЬЛЪЕНРМСТБ РТПГЕУУБ (inum) Ч ОЕЛПФПТПК ЗТХРРЕ. оПНЕТБ ЬЛЪЕНРМСТПЧ НПЗХФ ВЩФШ Ч ДЙБРБЪПОЕ ПФ ОХМС ДП ЛПМЙЮЕУФЧБ ЮМЕОПЧ Ч ЗТХРРЕ НЙОХУ ПДЙО. ч PVM ЧЕТУЙЙ 3, ПДОБ ЪБДБЮБ НПЦЕФ УПУФПСФШ Ч ОЕУЛПМШЛЙИ ЗТХРРБИ.. рТЙ ПЫЙВЛЕ inum ПЫЙВЛЕ info
int tid = pvm_gettid ( char *group, int inum );
— ЧПЪЧТБЭБЕФ ЙДЕОФЙЖЙЛБФПТ ЪБДБЮЙ, ЛПФПТБС Ч ЗТХРРЕ «group» ЙНЕЕФ ОПНЕТ inum. рТЙ ПЫЙВЛЕ tid
int inum = pvm_getinst ( char *group, int tid );
— ЧПЪЧТБЭБЕФ ДМС ЪБДБЮЙ У ЙДЕОФЙЖЙЛБФПТПН tid ЕЕ РПТСДЛПЧЩК ОПНЕТ Ч ЗТХРРЕ «group». рТЙ ПЫЙВЛЕ inum int size = pvm _ gsize ( char * group );
— ЧПЪЧТБЭБЕФ ЮЙУМП ЪБДБЮ Ч ЗТХРРЕ «group». рТЙ ПЫЙВЛЕ size inum = pvm_joingroup ( «final» );
/* РТЙОСФШ УППВЭЕОЙЕ У ЙДЕОФЙЖЙЛБФПТПН msgtag */
bufid = pvm_recv ( (-1), msgtag );
/* ЙОЙГЙБМЙЪЙТПЧБФШ РЕТЕДБАЭЙК ВХЖЕТ */
bufid = pvm_initsend ( PvmDataRaw );
/* ХРБЛПЧБФШ ЮЙУМП РЕТЕДБЧБЕНЩИ ЬМЕНЕОФПЧ */
info = pvm_pkshort ( N, 1, 1 );
/* ХРБЛПЧБФШ ТЕЪХМШФБФЩ ТБВПФЩ */
info = pvm_pkfloat ( results, 5, 1 );
tid = pvm_gettid ( «final», 0 );
/* РПУМБФШ УППВЭЕОЙЕ У ЙДЕОФЙЖЙЛБФПТПН msgtag
ЪБДБЮЕ У ЙДЕОФЙЖЙЛБФПТПН tid */
info = pvm_send ( tid, msgtag );
дПРПМОЙФЕМШОЩЕ ЖХОЛГЙЙ ДМС ЗТХРРПЧПК ТБВПФЩ У ЪБДБЮБНЙ:
жХОЛГЙС ДМС УЙОИТПОЙЪБГЙЙ ЪБДБЮ
int info = pvm_barrier ( char *group, int count );
— ПУХЭЕУФЧМСЕФ ЫЙТПЛПЧЕЭБФЕМШОХА РЕТЕДБЮХ ЧУЕН ЮМЕОБН ЗТХРРЩ «group» (ЛТПНЕ УБНПК УЕВС) УППВЭЕОЙС У ЙДЕОФЙЖЙЛБФПТПН msgtag. дМС pvm_bcast() ФЕТНЙО «ЧУЕ ЪБДБЮЙ» ПРТЕДЕМСЕФУС ЛБЛ: ФЕ ЪБДБЮЙ, ЛПФПТЩЕ УЕТЧЕТ ЗТХРРЩ УЮЙФБЕФ ОБИПДСЭЙНЙУС Ч ЗТХРРЕ ЧП ЧТЕНС ЧЩЪПЧБ РПДРТПЗТБННЩ. еУМЙ ЪБДБЮБ РТЙУПЕДЙОСЕФУС Л ЗТХРРЕ РТЙ ЫЙТПЛПЧЕЭБФЕМШОПН ЧЩЪПЧЕ, ФП УППВЭЕОЙЕ ПОБ НПЦЕФ ОЕ РПМХЮЙФШ ЧППВЭЕ. еУМЙ ЪБДБЮБ РПЛЙДБЕФ ЗТХРРХ РТЙ ЫЙТПЛПЧЕЭБФЕМШОПН ЧЩЪПЧЕ, ФП ЛПРЙС УППВЭЕОЙС РП-РТЕЦОЕНХ ВХДЕФ ЕК РЕТЕДБЧБФШУС. еУМЙ ДМС РТЙЕНБ ЬФПЗП УППВЭЕОЙС ЙУРПМШЪПЧБФШ ЖХОЛГЙЙ У ВМПЛЙТПЧЛПК ЧЩРПМОЕОЙС ЪБДБЮЙ, ФП ЬФП УППВЭЕОЙЕ ВХДЕФ РТЙОСФП ЧУЕНЙ ПЦЙДБАЭЙНЙ ЕЗП ЪБДБЮБНЙ (ЛПФПТЩЕ ОЕ ЧЩРПМОСАФ Ч ЬФП ЧТЕНС ДТХЗХА ТБВПФХ) ПДОПЧТЕНЕООП, ЮФП ПЪОБЮБЕФ УЙОИТПОЙЪБГЙА ДЕКУФЧЙК УЧПВПДОЩИ ПФ ТБВПФЩ ЮМЕОПЧ ЗТХРРЩ.
жХОЛГЙС ДМС ТБУРТЕДЕМЕООЩИ ЧЩЮЙУМЕОЙК
int info = pvm_reduce ( void (*func)(), void *data, int item, int datatype, int msgtag, char *group, int root );
— ЧЩРПМОСЕФ ЗМПВБМШОХА ПРЕТБГЙА, ПРТЕДЕМСЕНХА ЖХОЛГЙЕК func(), У ХЮБУФЙЕН ЮМЕОПЧ ЗТХРРЩ «group» Й РПНЕЭБЕФ ТЕЪХМШФБФ ПРЕТБГЙЙ Ч ЪБДБЮХ, ДМС ЛПФПТПК ОПНЕТ Ч ЗТХРРЕ ТБЧЕО root. зМПВБМШОБС ПРЕТБГЙС УПЧЕТЫБЕФУС ОБД ДБООЩНЙ Ч НБУУЙЧЕ data, ФЙР ЛПФПТПЗП ХЛБЪБО Ч РБТБНЕФТЕ datatype (УЙНЧПМЙЮЕУЛЙЕ ЙНЕОБ ЪОБЮЕОЙК РБТБНЕФТБ datatype: PVM_BYTE, PVM_SHORT, PVM_INT, PVM_LONG, PVM_FLOAT, PVM_DOUBLE, PVM_CPLX, PVM_DCPLX). дМЙОБ НБУУЙЧБ data ТБЧОБ item, Й ТЕЪХМШФБФ ЗМПВБМШОПК ПРЕТБГЙЙ СЧМСЕФУС НБУУЙЧПН ДМЙОЩ item, Ч ЛПФПТПН j-К ЬМЕНЕОФ РПМХЮЕО РТЙНЕОЕОЙЕН ЗМПВБМШОПК ПРЕТБГЙЙ Л j-Н ЬМЕНЕОФБН НБУУЙЧПЧ data, ТБЪНЕЭЕООЩИ Ч ЪБДБЮБИ, ЧИПДСЭЙИ Ч ЗТХРРХ «group».
ч ЛБЮЕУФЧЕ РЕТЧПЗП РБТБНЕФТБ ЖХОЛГЙЙ pvm_reduce() НПЦЕФ ВЩФШ МЙВП ХЛБЪБОБ ЖХОЛГЙС, ЛПФПТХА РПМШЪПЧБФЕМШ ПРТЕДЕМЙМ УБН, МЙВП РПДУФБЧМЕОП ЙНС ПДОПК ЙЪ ХЦЕ ТЕБМЙЪПЧБООЩИ ЖХОЛГЙК:
лБЛ ЧЙДОП ЙЪ ТБУУНПФТЕОЙС ЗТХРРПЧЩИ ЖХОЛГЙК, ПОЙ РТЕДПУФБЧМСАФ ЫЙТПЛЙЕ ЧПЪНПЦОПУФЙ ДМС ПТЗБОЙЪБГЙЙ ЧЪБЙНПДЕКУФЧЙС ЪБДБЮ, РПЬФПНХ ЙНЕЕФ УНЩУМ ЙУРПМШЪПЧБФШ ЗТХРРХ У ЙНЕОЕН «All_Tasks», Л ЛПФПТПК ДПМЦОБ РТЙУПЕДЙОСФШУС ЛБЦДБС ЪБДБЮБ РПУМЕ ЪБРХУЛБ, Ч ТЕЪХМШФБФЕ ЮЕЗП УОЙНБАФУС ПЗТБОЙЮЕОЙС ОБ РТЙНЕОЕОЙЕ ЗТХРРПЧЩИ ЖХОЛГЙК.
ч РТПГЕУУЕ ТЕЫЕОЙС ЛПММЕЛФЙЧОПК ЪБДБЮЙ УПУФБЧ ЗТХРРЩ НПЦЕФ ЙЪНЕОСФШУС. рТЙ ЧЩИПДЕ МАВПК ЪБДБЮЙ ЙЪ ЗТХРРЩ ЕЕ ОПНЕТ Ч ЗТХРРЕ (ГЕМПЕ ОЕПФТЙГБФЕМШОПЕ ЮЙУМП) ПУЧПВПЦДБЕФУС, Б РТЙ ЧЛМАЮЕОЙЙ ЪБДБЮЙ Ч ЗТХРРХ ЕК РТЙУЧБЙЧБЕФУС ОБЙНЕОШЫЙК УЧПВПДОЩК ЗТХРРПЧПК ОПНЕТ. фБЛЙН ПВТБЪПН, Ч ЗТХРРЕ ЙЪ 10 ЪБДБЮ ОЕПВСЪБФЕМШОП ЙИ ОПНЕТБ СЧМСАФУС ЮЙУМБНЙ ПФ 0 ДП 9 Й ПФТБЦБАФ РПТСДПЛ ЧУФХРМЕОЙС ЪБДБЮ Ч ЗТХРРХ. вПМЕЕ ФПЗП, ЪБДБЮБ, РПЛЙОХЧЫБС ЗТХРРХ Й ЮЕТЕЪ ОЕЛПФПТПЕ ЧТЕНС ЧЕТОХЧЫБСУС Ч ОЕЕ, НПЦЕФ РПМХЮЙФШ ХЦЕ ДТХЗПК ЗТХРРПЧПК ОПНЕТ.
фБЛ ЛБЛ УПУФБЧ ЗТХРР НПЦЕФ ЙЪНЕОСФШУС ЧП ЧТЕНЕОЙ, ФП ЧПЪНПЦОБ УЙФХБГЙС, ЛПЗДБ ЧЩРПМОЕОЙЕ ОЕЛПФПТПК ЗТХРРПЧПК ЖХОЛГЙЙ, ЛБУБАЭЕКУС ЧУЕИ ЮМЕОПЧ ЗТХРРЩ, УПЧРБДЕФ РП ЧТЕНЕОЙ У ЧЩРПМОЕОЙЕН ОЕЛПФПТПК ЖХОЛГЙЙ, ЙЪНЕОСАЭЕК УПУФБЧ ЗТХРРЩ. фБЛЙЕ УПЧРБДЕОЙС УМЕДХЕФ РП ЧПЪНПЦОПУФЙ ЙУЛМАЮБФШ, МЙВП ПФДЕМШОП БОБМЙЪЙТПЧБФШ ЙИ ЧПЪНПЦОЩЕ РПУМЕДУФЧЙС, ЛПФПТЩЕ РТЕДУЛБЪБФШ ПДОПЪОБЮОП ЧЕУШНБ ФТХДОП.
уМЕДХЕФ ЙНЕФШ ЧЧЙДХ, ЮФП ЙУРПМШЪПЧБОЙЕ ПДОПЗП Й ФПЗП ЦЕ ЪОБЮЕОЙС РБТБНЕФТБ msgtag ДМС УППВЭЕОЙК, ГЙТЛХМЙТХАЭЙИ Ч ТБЪОЩИ ЗТХРРБИ, НПЦЕФ РТЙЧПДЙФШ Л ПЫЙВЛБН, Ф.Л. ПДОБ Й ФБ ЦЕ ЪБДБЮБ НПЦЕФ ЧИПДЙФШ ПДОПЧТЕНЕООП Ч ОЕУЛПМШЛП ТБЪОЩИ ЗТХРР, Й ЕУМЙ ПОБ ЙУРПМШЪХЕФ ПДЙО РТЙЕНОЩК ВХЖЕТ, ФП Ч ОЕН НПЗХФ ПЛБЪБФШУС ОЕУЛПМШЛП УППВЭЕОЙК У ПДЙОБЛПЧПК БДТЕУОПК ЙОЖПТНБГЙЕК.
ртйнет ртпзтбннщ «ъБРХУЛ ЪБДБЮ, УЙОИТПОЙЪБГЙС Й ПВНЕО УППВЭЕОЙСНЙ».
дБМЕЕ ВХДЕФ ТБУУНПФТЕО РТЙНЕТ РТПЗТБННЩ, ЙММАУФТЙТХАЭЙК ЙУРПМШЪПЧБОЙЕ ВЙВМЙПФЕЮОЩИ ЖХОЛГЙК PVM. пУПВПЕ ЧОЙНБОЙЕ УМЕДХЕФ ПВТБФЙФШ ОБ БОБМЙЪ ЪОБЮЕОЙК, ЧПЪЧТБЭБЕНЩИ ВЙВМЙПФЕЮОЩНЙ ЖХОЛГЙСНЙ PVM, Ф.Л. ОЕ ПВОБТХЦЕООБС ЧПЧТЕНС ПЫЙВЛБ РТЙ ТБВПФЕ ЛПММЕЛФЙЧБ ЪБДБЮ ПЮЕОШ ВЩУФТП НБУЛЙТХЕФУС НОПЦЕУФЧПН РПУМЕДУФЧЙК, ЮФП УЙМШОП ЪБФТХДОСЕФ ЕЕ ЙУРТБЧМЕОЙЕ.
дМС ХУЛПТЕОЙС ПФМБДЛЙ Й РПЧЩЫЕОЙС ОБДЕЦОПУФЙ ТБВПФЩ РТПЗТБНН, ЙУРПМШЪХАЭЙИ PVM, УМЕДХЕФ ЛБЛ НПЦОП ЮБЭЕ ЙУРПМШЪПЧБФШ ЖХОЛГЙА pvm_barrier(), УЙОИТПОЙЪЙТХАЭХА ДЕКУФЧЙС ХЮБУФОЙЛПЧ ЧЩЮЙУМЙФЕМШОПЗП РТПГЕУУБ, ПУПВЕООП Ч ФЕИ НЕУФБИ, ЗДЕ ЬФП ОЕ ХЧЕМЙЮЙЧБЕФ УЙМШОП ПВЭЕЕ ЧТЕНС ЧЩЮЙУМЕОЙК. рП ТЕЪХМШФБФБН ЮЙУФП РТБЛФЙЮЕУЛЙИ ОБВМАДЕОЙК, ЧУФБЧЛБ ЧЩЪПЧБ ЬФПК ЖХОЛГЙЙ ЮБУФП РТЙЧПДЙФ Л РТБЧЙМШОПНХ ЧЩРПМОЕОЙА РТПЗТБННЩ Й Л ВПМЕЕ ХУФПКЮЙЧЩН ИБТБЛФЕТЙУФЙЛБН ЕЕ ТБВПФЩ.
рТПЗТБННБ «Fork Join» ЧЩРПМОСЕФ УМЕДХАЭЙЕ ДЕКУФЧЙС. уОБЮБМБ ЪБРХУЛБЕФУС ЪБДБЮБ, ОБЪЩЧБЕНБС ТПДЙФЕМШУЛПК. ъБФЕН ЙЪ ОЕЕ ЪБРХУЛБАФУС ЪБДБЮЙ, ОБЪЩЧБЕНЩЕ ДПЮЕТОЙНЙ. дПЮЕТОЙЕ ЪБДБЮЙ УЙОИТПОЙЪЙТХАФУС НЕЦДХ УПВПК РХФЕН РПУЩМЛЙ УППВЭЕОЙК ТПДЙФЕМШУЛПК ЪБДБЮЕ, ЛПФПТБС, РПМХЮЙЧ ЬФЙ УППВЭЕОЙС, РЕЮБФБЕФ ЙОЖПТНБГЙА П ЛБЦДПК ЙЪ ДПЮЕТОЙИ ЪБДБЮ.
рТПЗТБННБ ДМС ТПДЙФЕМШУЛПК Й ДПЮЕТОЙИ ЪБДБЮ СЧМСЕФУС ПВЭЕК, Б ЧЩРПМОСЕНЩЕ ЛПОЛТЕФОПК ЪБДБЮЕК ЙОУФТХЛГЙЙ ЧЩВЙТБАФУС РП РТЙЪОБЛХ, ЛПФПТЩК ХЛБЪЩЧБЕФ, СЧМСЕФУС МЙ ЪБДБЮБ ТПДЙФЕМШУЛПК ЙМЙ ДПЮЕТОЕК.
оЙЦЕ РТЙЧПДЙФУС ФЕЛУФ РТПЗТБННЩ, УПРТПЧПЦДБЕНЩК РПДТПВОЩНЙ ЛПННЕОФБТЙСНЙ, ЛПФПТЩЕ ДМС ХДПВУФЧБ ЧУФТПЕОЩ Ч ФЕЛУФ РТПЗТБННЩ. лПННЕОФБТЙК РПНЕЭБЕФУС ОБД УППФЧЕФУФЧХАЭЕК ЙОУФТХЛГЙЕК. пФНЕФЙН, ЮФП ДМС ХДПВУФЧБ ЛПННЕОФЙТПЧБОЙС РТПЗТБННЩ ОЕЛПФПТЩЕ ЕЕ ЮБУФЙ УРЕГЙБМШОП ОБРЙУБОЩ НЕОЕЕ ЛПНРБЛФОП, ЮЕН ЬФП Ч РТЙОГЙРЕ ЧПЪНПЦОП. лТПНЕ ФПЗП, ДМС ЛТБФЛПУФЙ Ч РТПЗТБННБИ ОЕ ХЛБЪБОЩ ВЙВМЙПФЕЮОЩЕ ЖБКМЩ уЙ.
/* ПРТЕДЕМЕОЙС Й РТПФПФЙРЩ ВЙВМЙПФЕЛЙ PVM */
#define MY_NAME «ex1» /* ЙНС ЪБЗТХЦБЕНПЗП ЖБКМБ ЬФПК РТПЗТБННЩ */
#define MAXNCHILD 50 /* НБЛУЙНБМШОПЕ ЮЙУМП ДПЮЕТОЙИ ЪБДБЮ */
#define JOINTAG 11 /* ЙДЕОФЙЖЙЛБФПТ ДМС УППВЭЕОЙК, */
/* РЕТЕДБЧБЕНЩИ НЕЦДХ ЪБДБЮБНЙ */
#define INT_WIDTH (2*sizeof(int)) /* лПМЙЮЕУФЧП РПЪЙГЙК */
/* ДМС 16-ТЙЮОПЗП ЧЩЧПДБ ГЕМПЗП ЮЙУМБ */
#define msgCall » чЩЪПЧ «
#define msgIdsList «уРЙУПЛ ЙДЕОФЙЖЙЛБФПТПЧ ДПЮЕТОЙИ ЪБДБЮ Й ЛПДПЧ ПЫЙВПЛ:»
#define msgSpawnOk «цДХ УППВЭЕОЙК ПФ ЪБРХЭЕООЩИ ЪБДБЮ. «
#define msgUseTasks «юЙУМП ЪБДБЮ Ч ЛПН.УФТПЛЕ ОЕ ХЛБЪБОП, ЙУРПМШЪХА %d\n»
#define msgUsage «ч ЛПНБОДОПК УФТПЛЕ УМЕДХЕФ ЪБДБЧБФШ ГЕМПЕ ЮЙУМП ПФ 1 ДП %d\n»
#define msgTidRecv «пФ ДПЮЕТОЕК ЪБДБЮЙ РТЙОСФП УППВЭЕОЙЕ У ЕЕ ЙДЕОФЙЖЙЛБФПТПН = %0*X\n»
#define msgCall «Call «
#define msgIdsList «Childs tid’s and error codes:»
#define msgSpawnOk «Waiting messages from spawn\’ed tasks»
#define msgUseTasks «Count of tasks is not given from command line, use %d\n»
#define msgUsage «Command line must be contain integer from 1 to %d\n»
#define msgTidRecv «Received TID of child = %0*X\n»
int main (int argc, char *argv[])
int ntask = 3; /* ЮЙУМП ДПЮЕТОЙИ ЪБДБЮ (РП ХНПМЮБОЙА 3) */
int info; /* ЧПЪЧТБЭБЕНЩК ЛПД ЪБЧЕТЫЕОЙС ДМС ЖХОЛГЙК PVM */
int mytid; /* УПВУФЧЕООЩК ЙДЕОФЙЖЙЛБФПТ ЪБДБЮЙ */
int myparent; /* ЙДЕОФЙЖЙЛБФПТ ТПДЙФЕМШУЛПК ЪБДБЮЙ */
int child [ MAXNCHILD ] ; /* НБУУЙЧ ЙДЕОФЙЖЙЛБФПТПЧ ДПЮЕТОЙИ ЪБДБЮ */
int i, mydata, buf, len, tag, tid; /* ПУФБМШОЩЕ РЕТЕНЕООЩЕ */
mytid = pvm_mytid(); /* ПРТЕДЕМЙФШ УПВУФЧЕООЩК ЙДЕОФЙЖЙЛБФПТ */
else printf (msgUseTasks, ntask);
if (ntask MAXNCHILD) <
printf (msgUsage, MAXNCHILD);
info = pvm_spawn ( /* ъБРХУФЙФШ ДПЮЕТОЙЕ ЪБДБЮЙ */
MY_NAME, /* ЙНС ЪБРХУЛБЕНПК ЪБДБЮЙ: РПЧФПТОП ЪБРХУЛБЕН УБНЙ УЕВС */
(char**) 0, /* РБТБНЕФТЩ ДМС ЕЕ ЛПНБОДОПК УФТПЛЙ */
PvmTaskDefault, /* ТЕЦЙН ЪБРХУЛБ: РП ХНПМЮБОЙА */
ntask, /* ЪБРХУФЙФШ ntask ЛПРЙК */
for (i = 0; i printf («%d. %0*X\n», i+1, INT_WIDTH, child[i]);
ntask = info; /* ЪБРЙУШ Ч ntask ЮЙУМБ ХУРЕЫОП ЪБРХЭЕООЩИ ЪБДБЮ */
/* РТЙЕН Й РЕЮБФШ УППВЭЕОЙК ПФ ДПЮЕТОЙИ ЪБДБЮ */
if ((buf = pvm_recv( /* ВМПЛЙТПЧБООЩК РТЙЕН УППВЭЕОЙС: */
-1, /* ПФ МАВПК ЪБДБЮЙ */
JOINTAG /* УППВЭЕОЙЕ ДПМЦОП ЙНЕФШ ЙДЕОФЙЖЙЛБФПТ JOINTAG */
)) if ((info = pvm_upkint (&mydata, 1, 1))
pvm_perror (msgCall «pvm_upkint()»);
/* РТПЧЕТЙФШ РТБЧЙМШОПУФШ РПМХЮЕООПЗП УППВЭЕОЙС: */
/* Ч УППВЭЕОЙЙ ДПМЦЕО ВЩФШ ЙДЕОФЙЖЙЛБФПТ ЪБДБЮЙ-ПФРТБЧЙФЕМС */
printf (msgTidRecv, INT_WIDTH, tid);
pvm_exit(); /* ПФЛМАЮЙФШУС ПФ PVM Й ЪБЧЕТЫЙФШ ТБВПФХ ЗМБЧОПК ЪБДБЮЙ */
/* оЙЦЕ ОБИПДСФУС ДЕКУФЧЙС, ЧЩРПМОСЕНЩЕ ДПЮЕТОЙНЙ ЪБДБЮБНЙ */
/* ЙОЙГЙБМЙЪЙТПЧБФШ РЕТЕДБАЭЙК ВХЖЕТ У БЧФПНБФЙЮЕУЛЙН ЪБДБОЙЕН
РТЕПВТБЪПЧБОЙС ЖПТНБФПЧ РПУЩМБЕНЩИ ДБООЩИ, ПВТБВПФБФШ ЧПЪНПЦОХА ПЫЙВЛХ */
if ((info = pvm_initsend (PvmDataDefault))
pvm_perror (msgCall «pvm_initsend()»);
/* ХРБЛПЧБФШ УППВЭЕОЙЕ, УПДЕТЦБЭЕЕ УПВУФЧЕООЩК ЙДЕОФЙЖЙЛБФПТ */
if ((info = pvm_pkint (&mytid, 1, 1))
pvm_perror (msgCall «pvm_pkint»);
/* РПУМБФШ УППВЭЕОЙЕ У ЙДЕОФЙЖЙЛБФПТПН JOINTAG ТПДЙФЕМШУЛПК ЪБДБЮЕ */
/* (tid ТПДЙФЕМШУЛПК ЪБДБЮЙ ВЩМ УПИТБОЕО Ч РЕТЕНЕООПК myparent) */
if ((info = pvm_send (myparent, JOINTAG))
pvm_perror (msgCall «pvm_send()»);
pvm_exit(); /* ПФЛМАЮЙФШУС ПФ PVM Й ЪБЧЕТЫЙФШ ТБВПФХ ДПЮЕТОЕК ЪБДБЮЙ */
> /* ЛПОЕГ ЖХОЛГЙЙ main() */
урйупл йурпмшъпчбоопк мйфетбфхтщ
еЧУЕЕЧ й. йУРПМШЪПЧБОЙЕ PVM. чЧЕДЕОЙЕ Ч РТПЗТБННЙТПЧБОЙЕ.
уВЙФОЕЧ а.рТБЛФЙЮЕУЛПЕ ТХЛПЧПДУФЧП РП РБТБММЕМШОЩН ЧЩЮЙУМЕОЙСН.
оЙЛПУ дТБЛПУ. рТБЛФЙЮЕУЛПЕ ЙУРПМШЪПЧБОЙЕ ЧЩУПЛПХТПЧОЕЧЩИ УТЕДУФЧ РБТБММЕМШОПЗП РТПЗТБННЙТПЧБОЙС PVM.
- С чем связаны приливы в мировом океане
- adb appcontrol код активации для windows