GoGPT Best VPN GoSearch

Значок OnWorks

mpy.openmpi - онлайн у хмарі

Запустіть mpy.openmpi у постачальнику безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда mpy.openmpi, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


mpy - повідомлення, яке передається Йоріку

СИНТАКСИС


mpirun -np mp_size MPY [-j pfile1.i [-j pfile2.i [ ... ]]] [ -і файл1.i [-i файл2.i [
...]]]
mpirun -np mp_size MPY - партія файл.i

ОПИС


Yorick це інтерпретована мова, як Basic або Lisp, але набагато швидша. Побачити йорик (1) на
дізнатися більше про це.
Mpy є паралельною версією Yorick на основі інтерфейсу передачі повідомлень (MPI). The
точний синтаксис для запуску паралельного завдання залежить від середовища MPI. Може бути
перед викликом необхідно запустити спеціальний демон миран або еквівалентну команду.

Пояснення
Пакет mpy підключає yorick до бібліотеки паралельного програмування MPI. MPI означає
Інтерфейс передачі повідомлень; ідея полягає в тому, щоб з'єднати кілька екземплярів yorick що
спілкуватися між собою за допомогою повідомлень. Mpy може виконувати як прості, так і дуже паралельні
завдання як чисті інтерпретовані програми, або він може запускати і керувати довільно складними компіляціями
пакети, які можуть безкоштовно використовувати скомпільований API MPI. Інтерпретований API не призначений
бути обгорткою MPI; натомість вона зведена до мінімуму.

Це версія 2 mpy (випущена в 2010 році); він несумісний з версією 1 mpy
(випущена в середині 1990-х), оскільки версія 1 мала численні недоліки дизайну, що робить її дуже
важко писати програми без гонок і неможливо масштабувати до мільйонів
процесорів. Однак ви можете запустити більшість програм mpy версії 1 під версією 2, зробивши
mp_include,"mpy1.i" перед тим, як mp_include будь-який файл, що визначає паралельне завдання mpy1 (тобто
перед будь-яким файлом, що містить виклик mp_task.)

Використання ноти
Середовище MPI насправді не визначено стандартом; існуючі середовища є
дуже грубий і рішуче віддає перевагу неінтерактивним пакетним завданням. Кількість процесів є
фіксується перед початком MPI; кожен процес має ранг, число від 0 до одиниці менше за число
кількість процесів. Ви використовуєте ранг як адресу для надсилання повідомлень та процесу
одержуючи повідомлення, можна перевірити, які ранги надіслали йому повідомлення, і, звичайно
отримувати ці повідомлення.

Основною проблемою при написанні програми передачі повідомлень є обробка подій або повідомлень
прибуття в незапланованому порядку. MPI гарантує лише те, що послідовність повідомлень надсилається
ранг A до рангу B прибуде в порядку надісланому. Немає гарантії щодо порядку
надходження цих повідомлень відносно повідомлень, надісланих B із третього рангу C. In
Зокрема, припустимо, що A надсилає повідомлення B, потім A надсилає повідомлення C (або навіть обмінюється
кілька повідомлень із C), що призводить до того, що C надсилає повідомлення B. Повідомлення від C
може прийти до B перед повідомленням від A. Програма MPI, яка не дозволяє цього
У можливості є помилка, яка називається "станом гонки". Умови перегонів можуть бути надзвичайно поганими,
особливо коли кількість процесів велика.

Базовий інтерфейс, що інтерпретується mpy, складається з двох змінних:
mp_size = кількість процесів
mp_rank = ранг цього процесу та чотирьох функцій:
mp_send, to, msg; // відправити повідомлення про ранг "кому"
повідомлення = mp_recv(від); // отримувати повідомлення з рангу "від"
ранги = mp_probe(block); // запитувати відправників повідомлень, що очікують на розгляд
mp_exec, рядок; // аналізувати та виконувати рядок для кожного рангу

Ви викликаєте mp_exec рангу 0, щоб почати паралельне завдання. Коли основна програма створена таким чином
закінчується, усі ранги, крім рангу 0, повертаються до неактивного циклу, чекаючи наступного
mp_exec. Ранг 0 підбирає наступний рядок введення з stdin (тобто чекає на введення в його
запитувати під час інтерактивного сеансу) або завершує всі процеси, якщо введення більше не буде
доступні в пакетній сесії.

Пакет mpy змінює те, як yorick обробляє директиву синтаксичного аналізатора #include і include
і вимагають функцій. А саме, якщо виконується паралельне завдання (тобто запущена функція
від mp_exec), усі вони стають колективними операціями. Тобто ранг 0 читає весь
вміст файлу та надсилає вміст іншим процесам у вигляді повідомлення MPI (наприклад
mp_exec вмісту файлу). Кожен процес, крім рангу 0, виконується лише під час
паралельні завдання; поза паралельним завданням, коли виконується лише ранг 0 (і всі інші ранги
чекають наступного mp_exec), директиви #include і include і require
функції повертаються до їх звичайної послідовної роботи, впливаючи лише на ранг 0.

Коли mpy запускається, він працює в паралельному режимі, тому всі файли yorick включає в себе
запуски (файли в Y_SITE/i0) включені як колективні операції. Без цього
кожен процес yorick намагатиметься відкрити та прочитати файли запуску,
перевантаження файлової системи до того, як mpy почнеться. Передача змісту цих
файли як повідомлення MPI – це єдиний спосіб забезпечити достатню пропускну здатність для кожного
процес для читання вмісту окремого файлу.

Останнім файлом, включеним під час запуску, є файл, зазначений у параметрі -batch, або
файл custom.i. Щоб уникнути проблем із кодом у custom.i, який може бути небезпечним для
паралельне виконання, mpy шукає не custom.i, а custommp.i. The
інструкції в пакетному файлі або в custommp.i виконуються в послідовному режимі на ранзі 0
тільки Аналогічно, mpy замінює звичайну функцію process_argv, так що -i та інші
Параметри командного рядка обробляються лише на ранзі 0 у послідовному режимі. Намір у всьому цьому
Випадки полягає в тому, щоб файли -batch або custommp.i або -i включають виконувались лише на ранзі 0, як
якби ви ввели їх там інтерактивно. Ви можете викликати mp_exec з будь-якого з них
файли для запуску паралельних завдань, але сам файл є послідовним.

До звичайного набору додається додатковий параметр командного рядка:
mpy -j деякий файл.i
включає somefile.i у паралельному режимі на всіх рівнях (знову ж таки, -i other.i включає тільки other.i
на ранзі 0 у послідовному режимі). Якщо є кілька параметрів -j, відбувається паралельне включення
в порядку командного рядка. Однак, якщо параметри -j і -i змішані, трапляються всі -j, що включає
перед будь-яким -i включає.

Як побічний ефект від складності функцій include в mpy, функція автозавантаження є
інваліди; якщо ваш код справді ініціює включення, викликаючи автоматично завантажену функцію, mpy
зупиниться з помилкою. Ви повинні явно завантажити всі функції, необхідні для паралелі
завдання, які використовують самі виклики функцій у паралельній задачі.

Функція mp_send може надсилати будь-який числовий масив yorick (типів char, short, int, long,
float, подвійне або комплексне) або значення скалярного рядка. Процес відправлення повідомлення
Через MPI зберігається лише кількість елементів, тому mp_recv видає лише скалярне значення або
одновимірний масив значень, незалежно від того, яка розмірність була передана mp_send.

Функція mp_recv вимагає, щоб ви вказали відправника повідомлення, якому ви маєте намір
отримувати. Він блокується, доки повідомлення фактично не надійде від цього відправника, ставлячи будь-яке в чергу
повідомлення від інших відправників, які можуть надійти заздалегідь. Повідомлення в черзі будуть
отримує замовлення, отримане під час виклику mp_recv для відповідного відправника. The
Функція черги значно полегшує уникнення найпростіших типів умов гонки
коли ви пишете інтерпретовані паралельні програми.

Функція mp_probe повертає список усіх відправників повідомлень у черзі (або nil if
черга порожня). Телефонуйте mp_probe(0), щоб повернутися негайно, навіть якщо черга порожня.
виклик mp_probe(1) блокувати, якщо черга порожня, повертаючись лише тоді, коли принаймні одне повідомлення
доступний для mp_recv. Телефонуйте mp_probe(2) блокувати, доки не надійде нове повідомлення, навіть якщо
деякі повідомлення наразі доступні.

Функція mp_exec використовує логарифмічне розгалуження - ранг 0 надсилає до F процесів, кожен із
який надсилає F більше, і так далі, доки всі процеси не отримають повідомлення. Раз процес
завершує всі свої операції надсилання, аналізує та виконує вміст повідомлення.
Алгоритм розгалуження досягає N процесів у журналі до основи F з N кроків. Процеси F
ранг 0 посилає на ранги 1, 2, 3, ..., F. Загалом, процес з рангом r надсилає до
ранги r*F+1, r*F+2, ..., r*F+F (коли вони менші за N-1 для N процесів). Цей набір
називається «персоналом» рангу r. Ранги з r>0 отримують повідомлення від рангу (r-1)/F,
якого називають «босом» р. Виклик mp_exec взаємодіє з чергою mp_recv;
іншими словами, повідомлення від іншого рангу, ніж бос, під час розгалуження mp_exec будуть
поставлено в чергу для подальшого отримання mp_recv. (Без цієї функції будь-яке паралельне завдання, яке
використаний шаблон повідомлення, відмінний від логарифмічного розгалуження, буде сприйнятливим до перегонів
умови.)

Логарифмічне розгалуження та його внутрішній еквівалент настільки корисні, що mpy надає пару
функцій вищого рівня, які використовують той самий шаблон розгалуження, що й mp_exec:
mp_handout, повідомлення;
всього = mp_handin(значення);
Щоб використовувати mp_handout, ранг 0 обчислює повідомлення, потім усі ранги викликають mp_handout, який надсилає повідомлення
(вихід для всіх рангів, відмінних від 0) скрізь за допомогою того ж розгалуження, що й mp_exec. Використовувати
mp_handin, кожен процес обчислює значення, а потім викликає mp_handin, який повертає суму
власне значення та весь їхній персонал, так що на ранзі 0 mp_handin повертає суму
цінності кожного процесу.

Ви можете викликати mp_handin як функцію без аргументів, щоб діяти як синхронізація; коли
ранг 0 продовжується після такого виклику, ви знаєте, що всі інші ранги досягли цієї точки.
Усі паралельні завдання (все, що розпочато з mp_exec) повинні закінчуватися викликом mp_handin,
або еквівалентна гарантія того, що всі процеси повернулися в стан очікування під час виконання завдання
фінішує на 0 ранзі.

Ви можете отримати або змінити параметр розгортання F за допомогою функції mp_nfan. За замовчуванням
значення дорівнює 16, що має бути розумним навіть для дуже великої кількості процесів.

Одна спеціальна паралельна задача називається mp_connect, яку можна використовувати для інтерпретації
командних рядків до будь-якого окремого рангу, відмінного від 0, тоді як усі інші ранги залишаються бездіяльними. Ранг 0 займає а
цикл читання з клавіатури і відправлення рядків у "з'єднаний" ранг, який виконується
їх і надсилає підтвердження назад до рангу 0. Ви запускаєте функцію mp_disconnect для
виконайте паралельне завдання та поверніться до рангу 0.

Нарешті, примітка про відновлення помилок. У разі помилки під час паралельного завдання,
mpy намагається витончено вийти з mp_exec, так що, коли повертається ранг 0, усі інші ранги
відомо, що вони неактивні, готові до наступного mp_exec. Ця процедура буде зависати назавжди, якщо така буде
один із процесів перебуває в нескінченному циклі або в іншому стані, коли він ніколи не буде
виклик mp_send, mp_recv або mp_probe, оскільки MPI не надає засобів для відправки сигналу, що
перериває всі процеси. (Це один із способів функціонування середовища MPI
"сирий".) Процесу рангу 0 залишається ранг першого процесу, який повідомив a
fault, плюс кількість процесів, які вийшли з ладу з інших причин
надіслав повідомлення про те, що винен інший ранг. Перший процес з помилкою може ввести dbug
режим через mp_connect; використовуйте mp_disconnect або dbexit, щоб повернутися до послідовного режиму на ранзі 0.

Опції
-j файл.i включає вихідний файл Yorick файл.i оскільки mpy запускається в паралельному режимі
на всіх рангах. Це еквівалентно функції mp_include після mpy
розпочато.

-i файл.i включає вихідний файл Yorick файл.i під час запуску mpy у послідовному режимі.
Це еквівалентно директиві #include після запуску mpy.

- партія файл.i включає вихідний файл Yorick файл.i під час запуску mpy у послідовному режимі.
Ваш файл налаштування custommp.i, якщо є НЕ читати, і mpy є
переведено в пакетний режим. Використовуйте команду help для пакетної функції
(довідка, пакет), щоб дізнатися більше про пакетний режим. У пакетному режимі все
помилки є фатальними; як правило, mpy зупиняє виконання та чекає більше
введення після помилки.

Використовуйте mpy.openmpi онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

Команди Linux

Ad




×
реклама
❤️Робіть покупки, бронюйте або купуйте тут — безкоштовно, це допомагає зберегти послуги безкоштовними.