FACULTY OF INFORMATICS Masaryk University IA039: Architektura superpočítačů a náročné výpočty PVM Luděk Matýska Jaro 2019 Luděk Matýska • PVM • Jaro 2019 1/19 FACULTY OF INFORMATICS Masaryk University Základní vlastnosti ■ ParaLLeL Virtual Machine (PVM) ■ Vyvinut koncem na přelomu 80. a 90. let minulého století ■ Primární motivace: tvorba paralelního virtuálního superpočítače ■ Nedostatečný výkon ■ Původně pouze superpočítače byly propojeny vysokorychlostní sítí ■ Postupně propojování pracovních stanic ■ Distribuované prostředí pro vývoj a spouštění distribuovaných programů Luděk Matýska • PVM • Jaro 2019 2/19 FACULTY OF INFORMATICS I Masaryk University Komponenty ■ Sít pvmd démonů ■ Odpovídají za vlastní prostředí virtuálního paralelního (distribuovaného) počítače ■ Knihovna funkcí ■ API pro meziproceso(ro)vou komunikace ■ API pro manipulaci s jednotlivými procesy ■ Přilinkována k programu Luděk Matýska • PVM • Jaro 2019 3/19 FACULTY OF INFORMATICS Masaryk University Programování ■ PVM podporuje primárně programy tvořené kooperujícími úlohami ■ Samostatné procesy na různých procesorech ■ Komunikace pomocí výměny zpráv ■ Přirozená podpora taskparalelismus ■ Odpovídá MPMD (Multiple Programs Multiple Data) ■ Vhodný i pro SPMD výpočetní model Je možné realizovat i data para/e//?/'programy ■ API dostupné pro jazyky ■ C, C++, Fortran 77 (a Fortran 90) Luděk Matýska • PVM • Jaro 2019 4/19 FACULTY OF INFORMATICS Masaryk University Základní třídy příkazů ■ Řízení procesů ■ Posílání zpráv ■ Přijímání zpráv ■ Správa bufferů ■ Skupinové operace ■ Informace ■ Signály Luděk Matýska • PVM • Jaro 2019 5/19 FACULTY OF INFORMATICS Masaryk University Řízení procesů ■ Každý proces má vlastní identifikátor ■ TID -Task Identifier ■ Jedinečný v rámci celé PVM ■ Nese informace o úloze i o jejím umístění v PVM ■ Umístění - uzel, na němž proces běží ■ Vydáván master PVM démonem ■ Každá PVM má jeden master démon ■ Potenciální slabé míst ■ Nebezpeční přetížení ■ Single point offailure Luděk Matýska • PVM • Jaro 2019 6/19 FACULTY OF INFORMATICS I Masaryk University Příkazy řízení procesů int tid = pvm_mytid(void) int info = pmv_exit(void) int info = pvm_kill(int tid) int info = pvm_addhosts(char **tiosts, int nhosts, int *infos) int info = pvm_delhosts(char **tiosts, int nhosts, int *infos) Luděk Matýska • PVM • Jaro 2019 7/19 FACULTY OF INFORMATICS Masaryk University Spuštění nového procesu int numt = pvm_spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids) flag: PvmTaskDefault PvmTaskHost PvmTaskArch PvmTaskDebug PvmTaskTrace PvmMppFront PvmHostCompl Luděk Matýska • PVM • Jaro 2019 8/19 FACULTY OF INFORMATICS Masaryk University Posílání a přijímání zpráv ■ Předávání zpráv zprostředkováno pvmd démony ■ Odpovídají za spolehlivý přenos a doručení ■ Zprávu vždy přebírá lokální (procesu příslušný) pvmd ■ Následně z TID cílové procesu určí jeh umístění a zprávu zašle vzdálenému pvmd procesu. ■ Musí zajistit převod dat mezi různými architekturami Luděk Matýska • PVM • Jaro 2019 9/19 FACULTY OF INFORMATICS Masaryk University Jednoduchý příklad ■ VLastní zaslání dat může realizovat např. následující jednoduchý příklad: int buf id = pvm_initsend(int encoding) ■ Encoding udává způsob překódování dat ■ PvmDataDefault ■ Data jsou překódována do systémového bufferu ■ PvmDataRaw ■ Data se průchodem sítí nemění (vhodné pokud víme, že používáme identickou architekturu a prostředí) ■ Pvm Data In Pláce ■ Data jsou konvertována přímo v bufferu Luděk Matýska • PVM • Jaro 2019 10/19 FACULTY OF INFORMATICS Masaryk University Zasílání zpráv int info = pvm_buf inf o(int bufid, int *bytes, int "*msgtag, int *tid) int info = pvm_send(int tid, int msgtag) int info = pvm_psend(int tid, int msgtag, char *buf, int len, int datatype) int info = pvm_mcast(int *tids, int ntask, int msgtag) Luděk Matýska • PVM • Jaro 2019 11/19 FACULTY OF INFORMATICS I Masaryk University Přijímání zpráv int info = pvm_recv(int tid, int msgtag) int info = pvm_precv(int tid, int msgtag, char *buf, int len, int datatype, int atid, int atag, int alen) int info = pvm_nrecv(int tid, int msgtag) int info = pvm_trecv(int tid, int msgtag, struct timeval trnout) Luděk Matýska • PVM • Jaro 2019 12/19 FACULTY OF INFORMATICS Masaryk University Ověření dostupnosti zprávy int info = pvm_probe(int tid, int msgtag) Luděk Matýska • PVM • Jaro 2019 13/19 FACULTY OF INFORMATICS Masaryk University Příprava a rozebírání dat pvm_pk( *data, int cnt, int stride) pvm_upk( *data, int cnt, int stride) byte char short short int int long long float float double double cplx float dcplx double str char Luděk Matýska • PVM • Jaro 2019 14/19 FACULTY OF INFORMATICS Masaryk University Skupinové operace ■ PVM podporuje tvorbu skupin procesu ■ Proces se může kdykoliv ke skupině přidat ■ Proces může skupinu kdykoliv opustit ■ Není nutná žádná synchronizace ■ Je implementován model slabé konzistence Luděk Matýska • PVM • Jaro 2019 15/19 FACULTY OF INFORMATICS Masaryk University Příkazy skupinové komunikace int inum = pvm_joingroup(char *group) int info = pvm_lvgroup(char *group) int info = pvm_bcast(char *group, int msgtag) int info = pvm_barrier(char *group, int count) int info = pvm_reduce(void *op, void *data, int cnt, int datatype, int msgtag, char *group, int root) void op(int ^datatype, void *x, void *y, int *num, int *info) int size = pvm_gsize(char *group) int tid = pvm_gettid(char *group, int inum) int inum = pvm_getinst(char *group, int tid) Luděk Matýska • PVM • Jaro 2019 16/19 FACULTY OF INFORMATICS Masaryk University Množina informačních příkazů int tid = pvm_parent(void) int dtid = 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) int oldval = pvm_setopt(int what, int val) int val = pvm_getopt(int what) Luděk Matýska • PVM • Jaro 2019 17/19 FACULTY OF INFORMATICS Masaryk University Pokročilé funkce int info = pvm_regJhosterO int info = pvm_reg_tasker() int info = pvm_reg_rm(struct hostinfo **hip) ■ Všechny tři uvedené procedury slouží k nahrazení defauLtních funkcí PVM při spouštění nových uzLů (pvmd) i nových úLoh. ■ pvm.regJhosterO a pvm_reg_tasker() zajištují konkrétní činnosti (addhost či spawn) ■ pvm_reg_rmQ umožní definovat nový plánovač (scheduler) Luděk Matýska • PVM • Jaro 2019 18/19 FACULTY OF INFORMATICS Masaryk University PVM shrnutí ■ ParaLLeL Virtual Machine ■ Důraz na virtuální stroj ■ Nástroje pro stavbu (rozebírání) tohoto stroje ■ Ovládání úloh ■ „Následníkem" je Message Passing Interface (MPI) ■ Důraz na práci s daty (zprávami) ■ Dlouho žádná podpora práce s úlohami (tasks) ■ Podpora paralelního l/O Luděk Matýska • PVM • Jaro 2019 19/19