Acest post va fi dedicat diferitelor aspecte ale colaborării cu cea mai populară bibliotecă pentru dezvoltarea programelor paralele - MS-MPI.
Similar cu algoritmul descris mai jos, proiectul este configurat pentru MPICH2, cu excepția altor căi de bibliotecă și mpiexec. Configurarea proiectului și executarea programelor paralele nu este diferită în cea de-a zecea versiune a Visual Studio.
În acest manual, computerul care compilează și execută programul are numele de domeniu hnwindows.
1 - Creați un proiect C ++
(În versiunea rusă a Visual C ++ => General, "Empty Project")
Deschideți proprietățile proiectului.
2 - Modificați valoarea câmpului subsistemului în Linker => System to CONSOLE (/ SUBSYSTEM: CONSOLE) (pentru versiunea rusă VS: Linker => System => Subsystem)
3 - Adăugați calea către biblioteci suplimentare la linker (în versiunea rusă a VS trebuie să mergeți la fila General)
4 - Adăugați dependențe suplimentare la linker. Introduceți msmpi.libWs2_32.lib. Acest program folosește o dependență suplimentară Ws2_32.lib, această bibliotecă este utilizată pentru comunicații în rețea, în alte proiecte nu pot fi implicate.
5 - adăugați un fișier C ++ la proiect (în acest manual vom folosi programul Hello World), faceți clic dreapta pe numele proiectului, Add => Adăugați un element, unde să alegeți fișierul C ++:
6 - Apelați proprietățile proiectului, va apărea o nouă filă C / C ++. Adăugați pe traseele compilatorului căile pentru fișiere suplimentare (pentru versiunea rusă: directoare de includere suplimentară):
7 - Pentru ca nodurile să lanseze cu succes programul, este necesar să ne compilam programul cu toate dependențele. Pentru a face acest lucru, valoarea "Utilizarea MFC" trebuie modificată la "Utilizați MFC într-o bibliotecă statică".
8 - Compilați programul. Construiți proiectul (în versiunea rusă) <имя проекта>).
Este necesar să se acorde atenție că, în cazul în care proiectul "se întâlnește" fără a specifica "MFC ca o bibliotecă statică", dimensiunea fișierului binar este foarte diferită. În cazul acestui program - fără MFC static de aproximativ 28 kb, cu - aproximativ 600 kb.
Trebuie de asemenea remarcat faptul că, dacă sunt necesare calcule multiprocesoare, atunci nu este necesară "colectarea" MFC într-o formă statică - toate bibliotecile necesare sunt pe calculatorul pe care are loc dezvoltarea. În cazul aceluiași start pe clusterul MFC într-o formă statică, este pur și simplu necesar, deoarece nodurile ar putea să nu aibă bibliotecile necesare.
Pentru ca programul să fie accesibil tuturor nodurilor, este necesar să se pună fișierul binar în directorul accesibil prin rețea la toate nodurile clusterului.
Rularea programului MPI în diferite moduri
mpiexec -n 10 \\ hnwindows \ share \ MyMPIProject.exe
Utilizarea programului mpiexec (lista completă a opțiunilor poate fi numită mpiexec / help2)
mpiexec [opțiuni] executabil [args] [. [opțiuni] exe [args]. ]
mpiexec -configfile
-n <количество процессов>
-env <название переменной> <значение переменной>
-wdir <директория, в которой хранятся файлы>
-găzduiește host1 [m1] host2 [m2]. hostn [mn] [listă de computere în cazul utilizării clusterului, sintaxă: -hosts 1 node-12 2 nod-13 3 nod-14 etc.)
-miezuri <количество ядер, которое нужно задействовать, на каждом процессоре>
În cazul adăugării cu succes, trebuie să apară inscripția:
Jobul a fost trimis. ID: [].
Exemple de adăugare manuală a sarcinilor:
mpiexec -hosts 1 server1 master. - la 8 lucrători
job submit / numere: 16 mpiexec \\ hnwindows \ share \ MyMPIProject.exe
executați sarcina pe 16 nuclee
executați sarcina parametrică, cu: 6-12 - intervalul valorilor care trebuie modificate, 3 - pasul dintre ele, * - locul pentru înlocuirea valorilor. În consecință, această comandă va începe trei sarcini:
Executarea sarcinilor utilizând Managerul de cluster
Pentru calculele de succes într-un cluster, fișierul programului și toate datele de intrare trebuie să fie accesibile tuturor nodurilor. În acest caz (și în orice altul), este optimă utilizarea fișierelor situate în rețea, unde toate nodurile (inclusiv nodul principal) au acces.
Pentru a adăuga sarcini, trebuie să utilizați consola din partea dreaptă a acțiunilor, submeniul de depunere a lucrărilor. În funcție de tipul de activitate, puteți selecta o nouă lucrare, o nouă lucrare cu o singură sarcină, o nouă lucrare Parametric de ștergere
New Job: dialog pentru crearea unei sarcini în care pot fi mai multe sub-sarcini. Din câmpurile necesare pentru selectare, să marcăm resursele pentru locuri de muncă: poate fi "nucleu", "soclu", "nod". Utilizarea resurselor alocate exclusiv pentru această lucrare îi spune administratorului de sarcini că resursele selectate vor fi ocupate exclusiv de această sarcină.
Următoarea fila Listă sarcini este responsabilă pentru adăugarea sub-sarcinilor:
Puteți adăuga funcția de bază, sarcina parametrică, sarcina din fișier.
Linia de comandă: cum să porniți sarcina.
Director de lucru: directorul de lucru, care va fi folosit pentru a determina căile absolute pentru intrarea / ieșirea / eroarea standard.
Intrare standard: fișier de intrare
Ieșire standard: fișier pentru datele de ieșire
Eroare standard: fișier pentru erorile de execuție.
După ce faceți clic pe Trimiteți, dacă totul a fost completat corect, sarcina va apărea în fila Activ:
După finalizarea calculelor, sarcina își va schimba starea fie la Terminat:
Deoarece fișierul pentru datele de ieșire nu a fost specificat, le putem vedea făcând dublu clic pe proprietățile de activitate din fereastra din partea de jos.
Exemplu de rulare a unei sarcini parametrice din linia de comandă:
Integrarea Visual Studio și mpiexec.
Există, de asemenea, o modalitate suplimentară de a integra Visual Studio și mpiexec, una non-standard, dar vă permite să efectuați calcule de clustere direct de la Visual Studio, fără a rula HPC Cluster Manager, mpiexec etc.
Deci, în submeniul Instrumente este secțiunea Alte instrumente (în versiunea rusă Instrumente => Instrumente externe).
Command - calea spre mpiexec de la implementarea MPI necesară. În argumente, trebuie să specificați calea către proiect ($ (TargetPath)), în directorul inițial - directorul proiectului.
Dintre opțiunile suplimentare utile, trebuie notat utilizarea ferestrei de ieșire - utilizați consola pentru a afișa rezultatele.
Comandă: C: \ Program Files \ pachetul HPC HP \ Bin \ job.exe
Desigur, acest exemplu nu ilustrează toate opțiunile de configurare ale instrumentelor externe. Acest instrument este suficient de puternic pentru a conecta în mod eficient mediul de dezvoltare la cluster-ul însuși (în plus, puteți realiza configurația pe care o puteți trimite la stația de lucru pentru a calcula banda de susținere a clusterului) și acest aspect va fi dedicat unui post separat.