C2115 Praktický úvod do superpočítání -1- C2115 Praktický úvod do superpočítání Petr Kulhánek, Jakub Štěpán kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta, Masarykova univerzita, Kotlářská 2, CZ-61137 Brno V. lekce C2115 Praktický úvod do superpočítání -2- Obsah  Víceuživatelské prostředí proces, vlákno, multitasking, přepnutí kontextu  Cvičení efektivita souběžného spouštění aplikací a souběžného síťového přenosu C2115 Praktický úvod do superpočítání -3- Víceuživatelské prostředí C2115 Praktický úvod do superpočítání -4Proces a vlákno Proces (anglicky process) je v informatice název pro spuštěný počítačový program. Proces je umístěn v operační paměti počítače v podobě sledu strojových instrukcí vykonávaných procesorem. Obsahuje nejen kód vykonávaného programu, ale i dynamicky měnící se data, která proces zpracovává. Jeden program může v počítači běžet jako více procesů s různými daty. Správu procesů vykonává operační systém, který zajišťuje jejich oddělený běh, přiděluje jim systémové prostředky počítače a umožňuje uživateli procesy spravovat. Vlákno (též vlákno řízení, anglicky thread) označuje v informatice odlehčený proces, pomocí něhož se snižuje režie operačního systému při změně kontextu, které je nutné pro zajištění multitaskingu nebo při masivních paralelních výpočtech. Zatímco běžné procesy jsou navzájem striktně odděleny, sdílí vlákna nejen společný paměťový prostor, ale i další struktury. V rámci jediného procesu je možné vytvořit mnoho vláken. Vlákna usnadňují díky sdílené paměti vzájemnou komunikaci, což však přináší možné komplikace v podobě souběhu (anglicky race condition). zdroj: www.wikipedia.cz, upraveno C2115 Praktický úvod do superpočítání -5- Multitasking Multitasking (z angličtiny, multi = mnoho, task = úloha, používán ve víceúlohovém systému) označuje v informatice schopnost operačního systému provádět (přinejmenším zdánlivě) několik procesů současně. Jádro operačního systému velmi rychle střídá na procesoru běžící procesy (tzv. změna kontextu), takže uživatel počítače má dojem, že běží současně. V preemptivním multitaskingu o přidělování a odebírání procesoru jednotlivým úlohám plně rozhoduje operační systém. V pravidelných intervalech (typicky zhruba 100× až 1000× za sekundu) přeruší provádění běžícího programu, vyhodnotí aktuální situaci (které úlohy žádají o přidělení procesoru, jejich priority atd.) a nechá běžet buď opět úlohu, kterou přerušil, nebo jinou úlohu, která má zájem o přidělení procesoru. Při přepnutí úlohy dochází ke změně kontextu. Úloha může v preemptivním multitaskingu dobrovolně požádat o přepnutí kontextu a vzdát se zbytku svého kvanta (úloha takzvaně „usne“ nebo se zablokuje provedením pomalé vstupně-výstupní operace, jako je například čtení dat z pevného disku). zdroj: www.wikipedia.cz, upraveno Typy:  nepreemptivní multitasking (dnes se příliš nepoužívá)  preemptivní multitasking (všechny moderní OS) C2115 Praktický úvod do superpočítání -6Změna kontextu Kontext Pod tímto pojmem si můžeme představit stav procesoru (obsah registrů), stav případného koprocesoru, případně i stav dalších zařízení v momentě kdy dojde ke změně kontextu. Tento současný stav procesoru se ukládá buď na zásobník procesu, nebo do připravené oblasti dat v adresním prostoru procesu. Do kontextu můžeme zahrnout i obsahy různých cache procesoru (např L1 cache nebo TLB): ty se sice při vlastní změně neukládají ani nenačítají, ale změna kontextu explicitně nebo implicitně zneplatní jejich obsah a nutnost jejich nového naplnění patří mezi příčiny, proč je přepnutí kontextu na moderních procesorech tak časově náročné. Změna kontextu (anglicky context switch) je operace, při níž multitaskingový operační systém přepíná řízení mezi procesy. Při tom se ukládá a načítá aktuální stavu procesoru. Tento děj se u moderních procesorů opakuje mnohokrát za sekundu. Změny kontextu jsou obvykle výpočetně intenzivní. zdroj: www.wikipedia.cz, upraveno C2115 Praktický úvod do superpočítání -7Cvičení LV.1 1. Kolik procesorů obsahuje vaše pracovní stanice? Uveďte jméno stroje, typ CPU a počet CPU. K řešení použijte příkaz lscpu. 2. Informace získané v předchozí úloze porovnejte a rozšiřte o informace získané ze souboru /proc/cpuinfo. 3. Jaká je velikost vyrovnávací paměti L1, L2 a L3 CPU ve vaší pracovní stanici? 4. Na jaké frekvenci CPU pracuje? 5. Zkompilujte program load_cpu.f90, který je dostupný v adresáři /home/kulhanek/Data/C2115/programs 6. Určete dobu běhu programu load_cpu pomocí příkazu: 7. Proč není přímo použit příkaz time? Jaký má význam volba --format? $ gfortran -O3 load_cpu.f90 -o load_cpu $ /usr/bin/time --format=%e ./load_cpu C2115 Praktický úvod do superpočítání -8Cvičení LV.2 1. Ke spuštění programu load_cpu použijte následující skript v jazyce bash. 2. Proveďte analýzu funkce skriptu. 3. Změřte dobu běhu skriptu. Měření proveďte pro N=1, 2, 3, ..., NCPU, 2*NCPU, 3*NCPU, 4*NCPU, 5*NCPU, 6*NCPU, kde NCPU je počet CPU dostupných na vaší pracovní stanici. Běžící procesy dále monitorujte příkazem top spuštěným v jiném terminálu. 4. Naměřené časy porovnejte s teoretickou délkou běhu vypočtenou z doby běhu programu load_cpu na 1 CPU. Určete režii souběžného běhu procesů vztaženou na teoretickou délku běhu. Výsledky diskutujte. #!/bin/bash N=4 # pocet soubezneho spusteni for((I=1;I<=N;I++)); do ./load_cpu & # spusti aplikaci na pozadi done wait # ceka na dokonceni vsech aplikaci na pozadi C2115 Praktický úvod do superpočítání -9Cvičení LV.3 1. Příkazem scp zkopírujte ze stroje wolf01 soubor /home/kulhanek/Data/C2115/iso/ubuntu-12.04.3-server-amd64.iso do vašeho domovského adresáře. Dobu kopírování změřte příkazem time. Zkopírovaný soubor smažte. 2. Příkazem scp zkopírujte ze stroje wolf01 soubor /home/kulhanek/Data/C2115/iso/ubuntu-12.04.3-server-amd64.iso do vašeho scratch adresáře. Dobu kopírování změřte příkazem time. Zkopírovaný soubor smažte. 3. Příkazem scp zkopírujte ze stroje wolf01 soubor /scratch/kulhanek/C2115/iso/ubuntu-12.04.3-server-amd64.iso do vašeho scratch adresáře. Dobu kopírování změřte příkazem time. 4. Příkazem cp zkopírujte z adresáře scratch soubor ubuntu-12.04.3-server-amd64.iso do podadresáře iso. Dobu kopírování změřte příkazem time. Soubor v adresaři iso smažte. 5. Určete přenosové rychlosti pro různý počet stahování. Určete místo/a, které limituje/í datový přenos. Týmová organizace!!! Navrhněte zátěžový test a realizujte jej.