Masszívan párhuzamos alkalmazások fejlesztése. Dr. Szénási Sándor Kertész Gábor, Kiss Dániel

Hasonló dokumentumok
Párhuzamos és Grid rendszerek

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Számítógépek felépítése

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

OpenCL - The open standard for parallel programming of heterogeneous systems

Párhuzamos programozási platformok

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Párhuzamos programozási platformok

Számítógép architektúra

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

AliROOT szimulációk GPU alapokon

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

EGYÜTTMŰKÖDŐ ÉS VERSENGŐ ERŐFORRÁSOK SZERVEZÉSÉT TÁMOGATÓ ÁGENS RENDSZER KIDOLGOZÁSA

Magas szintű optimalizálás

Grafikus csővezeték 1 / 44

Utolsó módosítás:

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

Objektumorientált paradigma és programfejlesztés Bevezető

9. MPI

FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN

Első sor az érdekes, IBM PC ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat

Konkurens TCP Szerver

CUDA haladó ismeretek

KX-NCP500/KX-NCP1000: PBMPR

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

GPU alkalmazása az ALICE eseménygenerátorában

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

Adatfolyam alapú RACER tömbprocesszor és algoritmus implementációs módszerek valamint azok alkalmazásai parallel, heterogén számítási architektúrákra

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Ár: Ft Garancia: 2 Év

CUDA alapok CUDA projektek. CUDA bemutató. Adatbányászat és Webes Keresés Kutatócsoport SZTAKI

Operációs rendszerek Folyamatok 1.1

Programozási nyelvek és módszerek Java Thread-ek

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

Cloud computing Dr. Bakonyi Péter.

8.3. AZ ASIC TESZTELÉSE

Számítógép felépítése

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Számítógépek felépítése, alapfogalmak

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

++Buy( Kaspersky Anti- Virus 2014 top sites for computer software ]

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

GPGPU. GPU-k felépítése. Valasek Gábor

Digitális rendszerek. Digitális logika szintje

BME MOGI Gépészeti informatika 4.

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

Négyprocesszoros közvetlen csatolású szerverek architektúrája:

Matematikai és Informatikai Intézet. 4. Folyamatok

Pénzügyi algoritmusok

Feladatok (task) kezelése multiprogramozott operációs rendszerekben

Fejlett programozási nyelvek C++ Iterátorok

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

BME MOGI Gépészeti informatika 7.

Grafikus kártyák, mint olcsó szuperszámítógépek - I.

Using the CW-Net in a user defined IP network

A PET-adatgy informatikai háttereh. Nagy Ferenc Elektronikai osztály, ATOMKI

egy szisztolikus példa

Nagy mennyiségű adatok elemzése és előrejelzési felhasználása masszívan párhuzamosítható architektúrával

elektronikus adattárolást memóriacím

GPU-Accelerated Collocation Pattern Discovery

*#Discount~ Kaspersky Internet Security - multidevice 2015 best software to buy for mac ]

Ismétlés: Moore törvény. Tranzisztorok mérőszáma: n*százmillió, n*milliárd.

A Geant4 használatának alapjai

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

TANÚSÍTVÁNY KARBANTARTÁS Jegyzıkönyv

Győri HPC kutatások és alkalmazások

A számítógép-hálózatok használata

INFORMATIKAI ALAPISMERETEK

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

A LabVIEW 8.5 támogatja a többmagos processzorok lehetőségeinek kihasználását

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Laborsegédlet 3. Labor

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Osztott algoritmusok

Szenzorhálózatok programfejlesztési kérdései. Orosz György

LÉTRADIAGRAM FORDÍTÓK ELMÉLETE PLC VEZÉRLÉSEK SZÁMÁRA II.

Memória játék. Felhasználói dokumentáció

Hogyan kell 3D tartalmat megtekinteni egy BenQ kivetítőn? Minimális rendszerkövetelmények 3D tartalom lejátszásához BenQ kivetítőn:

5. tétel. A számítógép sematikus felépítése. (Ábra, buszok, CPU, Memória, IT, DMA, Periféria vezérlő)

Véletlenszám generátorok és tesztelésük HORVÁTH BÁLINT

Algoritmusok és adatszerkezetek II.

ios alkalmazásfejlesztés Koltai Róbert

efocus Content management, cikkírás referencia

Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor

Fábián Zoltán Hálózatok elmélet

Szekvenciális hálózatok és automaták

Bevezetés a kvantum-informatikába és kommunikációba 2015/2016 tavasz

A számítógép egységei

Átírás:

Masszívan párhuzamos alkalmazások fejlesztése Dr. Szénási Sándor Kertész Gábor, Kiss Dániel

For over a decade prophets have voiced the contention that the organization of a single computer has reached its limits and that truly significant advances can be made only by interconnection of a multiplicity of computers in such a manner as to permit cooperative solution. - Gene Amdahl

Bevezetés A párhuzamos feldolgozás alapjai

Többszálúság Az operációs rendszer a programjaink futtatásakor azokhoz memóriaterületet és végrehajtó egységet rendel A szál (thread) a folyamaton belüli egységnyi végrehajtási szekvencia Egy folyamaton belül több szál is lehet Ezek ugyanazt a memóriaterületet és műveletvégzőt használják A CPU esetén időosztásos ütemezés, ergo ez nem valódi párhuzamosság

Párhuzamosság Több műveletvégző dolgozik ugyanazon probléma megoldásán, egyidejűleg Probléma párhuzamosan feldolgozható részegységekre bontható Az egyes részeredmények átvitele, a közösen használt erőforrások elérésekor alkalmazott szinkronizáció teljesítményvesztéssel jár

Amdahl törvénye Gene Amdahl 1969-ben publikálta a róla elnevezett törvényt, amely azt modellezi, hogy egy szekvenciális program párhuzamos implementációjának futtatása során milyen kapcsolat jelenik meg a processzorok száma és a várható sebességnövekedés közötti.

Szekvenciális vs. párhuzamos Nagyobb teljesítmény (?) Költséghatékony hardverkihasználás Párhuzamosan programozni nehéz Bizonyos feladatok esetén nehezen megoldható

Problémafelvetés Biológiai szimuláció

Sejtek interakciója Az egyedi sejt-alapú modelleket széleskörűen használják különféle problémákra. többsejtes rendszerek kollektív viselkedése tumor invazív viselkedésének modellezése mintázatképződés Egy modell érzékenysége tesztelhető a paramétereinek perturbálásával. A paramétertér mintavételezése Nagy számú lehetséges paraméterkombinációk Többszörös futtatások különböző bemeneti készleteken Gabor Kertesz, Daniel Kiss, Anna Lovrics, Sandor Szenasi, Zoltan Vamossy: Multiprocessing of an Individual-Cell Based Model for Parameter Testing In: 11th IEEE International Symposium on Applied Computational Intelligence and Informatics SACI 2016. Konferencia helye, ideje: Timisoara, Románia, 2016.05.12-2016.05.14.: IEEE, 2016. pp. 491-495. (ISBN:978-1-5090-2379-0)

Sejtmozgékonyság és -burjánzás A sejtek elmozdulásai a Metropolis-algoritmussal szimulálhatók. az elmozdulás az interakciós energiával függ össze a sebesség a gamma-eloszlásból származik Sejtosztódás, duplázódás Sejtciklus átlagos hossza - duplázódás ideje Ha a sejt belső órájának értéke meghaladja a duplázódási időt, akkor osztódás

Fizikai jellemzők, mechanika A sejtek részben összenyomhatóak, rugalmasak, ragadósak és kölcsönható részecskék. Egy modell egyszerűsített változata (Drasdo et. al., 1995) Egymásba ágyazott gömbök A mechanikai kölcsönhatások a energiafüggvényekből származnak

Térbeli eloszlás Az interakciós energia megállapítása nagy számításigényű művelet Véges interakciós távolságok Csak a közeli szomszédok figyelembe vétele Sejt láncolt-listák

Szimuláció A szimuláció teljes időtartama T. Tipikus értékek: 24-72 óra A folyamat t hosszú lépésekre oszlik. Tipikus értékek: 5-15 perc Az ágens életciklusa próbák sorozatából áll. displacement trial - mozgékonyság clock increment trial - osztódás

Sejt ágens Minden ágens hét paraméterrel definiálható.

Szekvenciális megvalósítás Python

cell.py class Cell(object): def init (self, position, mechanics_properties, cellcycle_properties, domain=none): self.position = position # 3-dimensional coordinates of the centre of the cell body (NumPy array) self.mechanics_properties = CellMechanicsProperties(mechanics_properties) self.cellcycle_properties = CellCycle(cellcycle_properties) self.domain = domain # ID of the corresponding computational domain (if available) class CellMechanicsProperties(object): def init (self, mechanics_properties): self.diameter = mechanics_properties['cell_diameter'] self.nucleus_diameter = mechanics_properties['cell_nucleus_diameter'] self.adhesion_diameter = mechanics_properties['cell_adhesion_diameter'] self.equilibrium_spacing = mechanics_properties['equilibrium_spacing'] self.potential_well_depth = mechanics_properties['potential_well_depth'] self.velocity_gamma_shape = mechanics_properties['velocity_gamma_shape'] self.velocity_gamma_rate = mechanics_properties['velocity_gamma_rate']

well.py class Well(object): def init (self, x_size, y_size, z_size): self.x_size = x_size # size in micrometers self.y_size = y_size # size in micrometers self.z_size = z_size # size in micrometers self.domain_map = [] self.domain_x_distance = None self.domain_y_distance = None self.domain_z_distance = None

simulation.py for t in range(total_time_steps + 1): //(...) for k in range(z_domains): for j in range(y_domains): for i in range(x_domains): if well.domain_map[i][j][k].items: for cell in well.domain_map[i][j][k].items: # Monte Carlo trial migration_trial(cell, well, simulation_resolution) # proliferation trial cellcycle_transition_trial(cell, parameters, cell_population, simulation_resolution)

Párhuzamos implementáció

Párhuzamos megoldás Multithreading az entitások állapotát a környezet változása nagyban befolyásolja az egyes szomszédos sejtek állapotváltozása atomi művelet kell legyen versenyhelyzet szinkronizáció szükséges többszörös függés a sejtadatok között Multiprocessing különböző szimulációk párhuzamos futtatása: nincs közös adat több műveletvégző felhasználása az egyes szimulációk jó időzítésével az összidő optimalizálható job scheduling

Job Scheduler ütemezés sorban (LS) ütemezés leghosszabb feldolgozási idő szerint (LPT)

LS vs LPT feladatok között nincs közös adat vagy bármilyen függés az ütemezés kulcsfontosságú LPT ütemezés feltételezi a feldolgozási idők hosszának ismeretét első körben mondhatjuk, hogy: sejtszám ~ feldolgozási idő

Egyszerű C# Scheduler

Scheduler.cs static class Scheduler { static PythonProcess[] processes; static Queue<TestResult> tests = new Queue<TestResult>(); public static event EventHandler Finished; public static void Start(int numofprocesses) { // processes = new PythonProcess[numofprocesses]; ResetTests(); OrderTests(); for (int i = 0; i < numofprocesses; i++) NewProcess(i); }

Scheduler.cs static void OrderTests() { if (VM.Tests == null) throw new Exception("ViewModel not initialized!"); foreach (var a in VM.Tests.OrderBy(x => x.complexity).reverse()) tests.enqueue(a); }

Scheduler.cs static void NewProcess(int i) { lock (tests) { if (tests.count == 0) return; Log("Creating process on #" + i + "..."); TestResult t = tests.dequeue(); t.processorid = i; processes[i] = new PythonProcess(t) { SchId = i }; processes[i].exited += Scheduler_Exited; processes[i].startwithtimer(); Log("Created and started process " + t.scriptend + " with complexity " + t.complexity + " on #" + i); } }

Scheduler.cs static void Scheduler_Exited(object sender, EventArgs e) { PythonProcess p = (PythonProcess)sender; Log("Process "+ p.testresult.scriptend +" exited on #"+p.schid+" after " + p.timeelapsed / 1000.0 + " sec"); if (isfinished()) { if (Finished!= null) Finished(null, EventArgs.Empty); return; } NewProcess(p.SchId); } static bool isfinished() { return (tests.count == 0 && processes.where(x =>!x.testresult.finished).count() == 0); }

A szimulációs feladat számításigényének becslése Feltételezés: r(t) futásidő megbecsülhető a bemeneti paraméterek alapján. tanítóminta generálás paraméterek választása linear model fitting alapján legszignifikánsabb paraméterek:

Eredmények

Tesztkörnyezet Processor: Intel Core i7-2600 @ 3.40 GHz Operating System: Microsoft Windows 10 64 bit Number of physical cores: 4 Memory: 12 GB DDR2

Egy szimuláció átlagos futásideje és eloszlása másodpercben megadva a két ütemező sémára, 100 szimuláció esetén

Eredmények

Simultaneous Multithreading 4 fizikai processzor 8 logikai processzor

Masszívan párhuzamos processzorok

GPU vs CPU multiprocessing GPU pro: - nagyon sok végrehajtó egység gyors(abb) memória GPU con: - egyszerűbb és lassabb ALU GPU memória!= PC RAM, átvitel szükséges összetartozó ALU (közös control SIMD (+SIMT), cache)

Architektúra

CUDA NVIDIA, 2007 fejlesztők által elérhető motor a GPU-n történő programfuttatáshoz C jellegű programozási nyelv az SDK-ban Visual Studio plugin

sample.cu

SIMT: Single Instruction, Multiple Threads SIMD: ugyanazon utasítások futtatása különböző adatokon SMT: különböző szálak egyidejű futtatása ugyanazon műveletvégzőn SIMT: különböző műveletvégzőkön történő egyidejű munkavégzés, hasonló feladatok

Multithreading minta global void vectormul(float* A) { inti = threadidx.x; A[i] = A[i] * 2; } float* A =... //... Transfer data... vectormul<<<1, 200>>>(A); //... Transfer results...

CUDA architektúra Eszközönként egy vagy több multiprocesszor Minden multiprocesszoron több SIMT műveletvégző Minden műveletvégzőhöz tartozik saját memória (registers / local memory) Közös memóriájuk is van (shared memory) És persze a blokkok közösen elérik az eszközmemóriát is

Több blokkos példa global void vectormul(float* A, int N) { int i = blockidx.x * blockdim.x + threadidx.x; if(i < N) { A[i] = A[i] * 2; } } float *A =... //... transfer data CPU-GPU... vectormul<<<4, 250>>>(A, 1000); //... transfer results GPU-CPU...

GPU megoldás Memória átviteli idők Feladat részekre bontása (blokkok, szálak) Memória felépítésének figyelembe vétele Egyszerűbb utasításkészletű ALU (CUBLAS lib) Szinkronizációs pontok, atomi utasítások

Köszönjük a figyelmet!

Köszönetnyilvánítás Az Emberi Erőforrások Minisztériuma ÚNKP-16-4/III. kódszámú Új Nemzeti Kiválóság Programjának támogatásával készült