Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Цей пост буде присвячений різним аспектам роботи з найбільш популярної бібліотекою для розробки паралельних програм - MS-MPI.

Аналогічно нижчеописане алгоритму проводиться настройка проекту для MPICH2, за винятком інших шляхів до бібліотек і mpiexec. Налаштування проекту і запуск паралельних програм нічим не відрізняється і в 10-й версії Visual Studio.







У даній інструкції комп'ютер, на якому здійснюється компіляція і запуск програми, має доменне ім'я hnwindows.

1 - Створити проект C ++

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

(У російській версії Visual C ++ => Загальні, «Порожній проект»)

Відкрити властивості проекту.

2 - Поміняти значення поля Subsystem в Linker => System на CONSOLE (/ SUBSYSTEM: CONSOLE) (для російської версії VS: Компоновщик => Система => Підсистема)

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

3 - Додати до компонувальнику (Linker) шлях до додаткових бібліотек (в російській версії VS необхідно зайти на вкладку Загальні)
Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

4 - Додати до компонувальнику (Linker) додаткові залежності. Вписати msmpi.libWs2_32.lib. У даній програмі використовується додаткова залежність Ws2_32.lib, дана бібліотека використовується для мережевої взаємодії, в інших проектах може бути і не задіяна.
Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

5 - додати файл C ++ до проекту (в даній інструкції ми будемо використовувати програму Hello World), натиснути правою кнопкою миші на назві проекту, Add => Add an element (для російської версії Додати => Створити елемент), де вибрати C ++ File:

6 - Викликати властивості проекту, з'явиться нова вкладка C / C ++. Додати до шляхів компілятора (Compiler) шляху для додаткових файлів (для російської версії: додаткові каталоги включення):

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

7 - Для того, щоб вузли успішно запустили програму, необхідно скомпілювати нашу програму з усіма залежностями. Для цього значення «Використання MFC» необхідно поміняти на «Використовувати MFC в статичної бібліотеці».

8 - Скомпілювати програму. Build project (в російській версії Побудувати <имя проекта>).

Необхідно звернути увагу, що, в разі, якщо проект «збирається» без вказівки «MFC як статична бібліотека», розмір бінарного файлу різко відрізняється. У випадку з даною програмою - без статичної MFC близько 28 кб, з - близько 600 кб.

Необхідно також відзначити, що, якщо необхідні багатопроцесорні розрахунки, то «збирати» MFC в статичному вигляді не потрібно - всі необхідні бібліотеки є на тому комп'ютері, на якому відбувається розробка. У разі ж запуску на кластері MFC в статичному вигляді просто необхідно, так як на вузлах можуть бути відсутні необхідні бібліотеки.

Для того, щоб програма була доступна всім вузлам, необхідно помістити бінарний файл в каталог, доступний через мережу всіх вузлів кластера.

Запуск MPI-програми в різних режимах

mpiexec -n 10 \\ hnwindows \ share \ MyMPIProject.exe

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc






Використання програми mpiexec (повний список опцій можна викликати mpiexec / help2)

mpiexec [options] executable [args] [. [Options] exe [args]. ]

mpiexec -configfile

-n <количество процессов>

-env <название переменной> <значение переменной>

-wdir <директория, в которой хранятся файлы>

-hosts n host1 [m1] host2 [m2]. hostn [mn] [список комп'ютерів в разі використання кластера, синтаксис: -hosts 1 node-12 2 node-13 3 node-14 і ін)

-cores <количество ядер, которое нужно задействовать, на каждом процессоре>

У разі успішного додавання повинна з'явитися напис:

Job has been submitted. ID: [].

Приклади ручного додавання завдань:

mpiexec -hosts 1 server1 master. -n 8 worker

job submit / numcores: 16 mpiexec \\ hnwindows \ share \ MyMPIProject.exe

запустити задачу на 16 ядрах

запустити параметричну задачу, при цьому: 6-12 - діапазон змінюваних значень, 3 - крок між ними, * - місце підстановки значень. Відповідно, дана команда запустить три завдання:

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Запуск задач за допомогою Cluster Manager

Для успішних розрахунків на кластері необхідно, щоб файл програми і все вхідні дані були доступні всім вузлам. В даному випадку (і в будь-якому іншому) найбільш оптимально використовувати файли, що лежать в мережі, куди мають доступ усі вузли (включаючи головний вузол).

Для додавання завдань необхідно використовувати консоль праворуч Actions, підміню Job Submission. Залежно від тип завдання, можна вибрати new Job, new Single-Task Job, new Parametric Sweep job

New Job: діалог для створення завдання, в якій може бути кілька підзадач. З необхідних для вибір полів відзначимо Job resources: може бути «ядро», «сокет», «вузол». Use assigned resourses exclusively for this job вказує менеджеру завдань, що обрані ресурси будуть зайняті цим завданням ексклюзивно.

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Наступна вкладка Task List, відповідає за додавання подзадач:

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Додати можна Basic Task, Parametric Task, Task From File.

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Command line: як необхідно запускати завдання.

Working directory: робоча директорія, щодо якої будуть визначатися абсолютні шляхи для standard input / output / error.

Standard input: файл з вхідними даними

Standard output: файл для вихідних даних

Standard error: файл для помилок виконання.

Після натискання Submit, якщо все було заповнено вірно, завдання буде додано до вкладці Active:

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Після закінчення розрахунків завдання змінить статус або на Finished:

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Оскільки не було вказано файл для вихідних даних, ми можемо подивитися їх, два рази натиснувши на властивостях завдання в вікні внизу.

Приклад запуску параметричної завдання з командного рядка:

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Інтеграція Visual Studio і mpiexec.

Є також додатковий спосіб інтеграції Visual Studio і mpiexec, нестандартний, але, тим не менше, що дозволяє оперувати кластерними обчисленнями безпосередньо з Visual Studio, без запуску HPC Cluster Manager, mpiexec і т.д.

Так, в підміню Tools знаходиться розділ Other tools (в російській версії Сервіс => Зовнішні інструменти).

Ms-mpi - - visual studio - windows hpc server - український блог по розробці для hpc

Command - шлях до mpiexec від необхідної реалізації MPI. В аргументах необхідно вказати шлях до проекту ($ (TargetPath)), в Initial Directory - директорію проекту.

З корисних додаткових опцій слід зазначити use output window - використовувати консоль для виведення результатів.

Command: C: \ Program Files \ Microsoft HPC Pack \ Bin \ job.exe

Ясна річ, цей приклад не ілюструє всіх можливостей конфігурації External Tools. Даний інструмент досить потужний, що дозволяє ефективно пов'язувати середу розробки з безпосередньо кластером (крім цього, можна домогтися такої конфігурації, що з workstation можна відправляти завдання на розрахунок на віддалений headnode кластера), і цього аспекту буде присвячений окремий пост.







Схожі статті