Lukáš Beran
Lukáš Beran

Vítejte na mém blogu! Pokud hledáte návody, tipy a triky ze světa IT, jste tu správně. Najdete zde primárně články k produktům a službám Microsoftu, jako například operační systémy, servery, virtualizace, sítě, správa, ale také cloud. Občas přidám i nějaké další zajímavé články.

Červenec 2013
PoÚtStČtSoNe
« Kvě Srp »
1234567
891011121314
15161718192021
22232425262728
293031 

Rubriky


Vytváření MPI úloh

Lukáš BeranLukáš Beran

V minulém článku jsem zveřejnil návod, jak vytvořit výpočetní cluster založený na Microsoft HPC. V dnešním článku ukáži, jak vytvářet MPI úlohy, které mohou běžet na takovém výpočetním clusteru.

Specifikace MPI

V počítačových clusterech se využívá specifikace Message Passing Interface (MPI) implementující stejnojmenný protokol pro podporu paralelního řešení výpočetních problémů v počítačových clusterech. Často používané označení jako knihovna (library) není v tomto případě zcela správné, jedná se totiž pouze o specifikaci, jak by taková knihovna mohla vypadat.

Finální specifikace první verze MPI-1.0 byla vydána v květnu roku 1994, aktuální verze MPI-3.0 byla schválena v září roku 2012. MPI není ISO nebo IEEE standard, ale jedná se o jakýsi průmyslový standard pro HPC platformu.

MPI bylo původně navržené pro architektury s distribuovanou pamětí. Jak se ale později měnily trendy, systémy se sdílenou pamětí byly propojeny sítí a vytvářely tím hybridní distribuovanou paměť. MPI tedy podporuje všechny architektury — distribuovaná paměť, sdílená paměť i hybridní scénáře. Z pohledu referenčního modelu ISO/OSI je protokol posazen do páté, tedy relační vrstvy, přičemž většina implementací používá jako transportní protokol TCP. Data jsou přesouvána z adresního prostoru jednoho procesu do adresního prostoru jiného procesu přes kooperativní operace obou procesů. API Message Passing Interface je závislé na programovacím jazyce, jelikož se jedná především o síťový protokol. Nejčastěji se používají jazyky C, C++, Java, Python nebo Fortran, ale existují i podpory přímo na úrovni hardwaru.

MPI aplikace

V následující části textu zjednodušeně popíši základní vlastnosti MPI aplikací se zaměřením na jazyk C.

Struktura MPI aplikace

Struktura MPI aplikace je vidět na následujícím obrázku.

 

Hlavičkové soubory

Všechny MPI aplikace musí mít připojený hlavičkový soubor mpi.h.

MPI volání

MPI rutiny používají prefix MPI_.

Komunikátory a skupiny

MPI používá objekty zvané komunikátory a skupiny pro určení, které kolekce procesů spolu mohou komunikovat. Většina MPI rutin požaduje specifikaci komunikátoru ve svém argumentu. Pokud není vyžadováno omezení, je možné použít předdefinovaný komunikátor MPI_COMM_WORLD, který umožní komunikaci mezi všemi MPI procesy.

Ranky

Uvnitř komunikátoru má každý proces unikátní identifikátor typu integer, který je procesu přidělen systémem při jeho inicializaci. Čísla ranků začínají od nuly a jsou postupná. Ranky se používají pro určení zdroje a cíle zasílaných zpráv.

Zpracování chyb

Většina MPI rutin má return/error code parametr. Podle MPI standardu je však výchozí chování volání prostřednictvím MPI zrušit, pokud dojde k chybě, což znamená, že pravděpodobně nebude možné odchytit jiné return/error code než MPI_SUCCESS (code zero).

Ukázka konkrétní MPI aplikace

Ukázková MPI aplikace na výpočet čísla π v jazyce C, která využívá MPI a je tedy vhodná pro paralelní běh na výpočetním clusteru. V následující části textu rozeberu základní části zdrojového kódu aplikace.

Hlavičkové soubory, funkce main, deklarace a inicializace proměnných.

Inicializace MPI prostředí. Funkce musí být volána v každém MPI programu před jinými MPI funkcemi a může být v programu maximálně jednou.

Vrací celkové množství MPI procesů ve specifikovaném komunikátoru MPI_COMM_WORLD.

Vrací rank volaného MPI procesu ve specifikovaném komunikátoru.

Validace argumentů a převod druhého argumentu na integer.

Rozeslání dat (hodnoty n) všem procesům ve skupině MPI_COMM_WORLD. Zdrojovým procesem je proces s rankem 0. Další možností rozesílání dat jsou například MPI_Scatter, který více dat z jednoho procesu rozešle na ostatní procesy ve skupině, případně MPI_Gather, který naopak data z více procesů ve skupině pošle jednomu procesu.

Výpočet velikosti intervalu.

Sbírání částečných výsledků a jejich spojování. Posbírá částečné výsledky (hodnota mypi) a spojený výsledek (hodnota pi) uloží do jednoho nového procesu (rank 0). Alternativou by mohlo být MPI_Allreduce, které uloží výsledek do všech procesů. Alternativou k MPI_SUM, které dělá součet, může být například MPI_MAX, který bere maximum hodnot nebo například MPI_LAND, který dělá logický AND.

Ukončení MPI prostředí. Tato funkce je poslední MPI rutinou zavolanou v každém MPI programu.

Celý kód aplikace pro výpočet π vypadá následovně:

Další informace včetně příkladů je možné najít na webu Livermore Computing Center.

Nadšenec do nových technologií se zájmem primárně o technologie a služby společnosti Microsoft. Občasný blogger a cestovatel.

Komentáře 0
Nejsou zde žádné komentáře.