Párhuzamos és Grid rendszerek

Hasonló dokumentumok
Párhuzamos és Grid rendszerek. Flynn-féle architektúra modell. ClearSpeed gyorsító kártya. 2006: Tokyo Institute of Technology's

Flynn-féle architektúra modell. Párhuzamos és Grid rendszerek (8. ea) egy vektorprocesszor. Belső felépítés. ClearSpeed gyorsító kártya MTAP

Párhuzamos és Grid rendszerek

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Információs Technológia

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Szoftvertechnológia alapjai Java előadások

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás 5. Dr. Iványi Péter

Párhuzamos és Grid rendszerek

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Párhuzamos és Grid rendszerek

Párhuzamos és Grid rendszerek. Áttekintés. Szálak. Eddig általános eszközöket láttunk, melyek

A C programozási nyelv II. Utasítások. A függvény.

Mintavételes szabályozás mikrovezérlő segítségével

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Párhuzamos és Grid rendszerek. Parallel programozás áttekintése. Történelmi áttekintés

Apple Swift kurzus 3. gyakorlat

3. Gyakorlat Ismerkedés a Java nyelvvel

ISA szimulátor objektum-orientált modell (C++)

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

Óbudai Egyetem. C programozási nyelv

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Internet programozása. 3. előadás

Programozás 6. Dr. Iványi Péter

Programozás C és C++ -ban

Párhuzamos programozási platformok

Programozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Párhuzamos programozási platformok

S z á m í t ó g é p e s a l a p i s m e r e t e k

Google Summer of Code OpenCL image support for the r600g driver

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Algoritmizálás + kódolás C++ nyelven és Pascalban

Occam 1. Készítette: Szabó Éva

Programozási nyelvek JAVA EA+GY 1. gyakolat

Rekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

117. AA Megoldó Alfréd AA 117.

Programozás II. 4. Dr. Iványi Péter

Programozás. Programozás villamosmérnököknek

Bevezetés a C++ programozási nyelvbe

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Smalltalk 2. Készítette: Szabó Éva

C programozás. 1 óra Bevezetés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Szelekció. Döntéshozatal

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Informatika terméktervezőknek

Programozás I gyakorlat. 5. Struktúrák

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Alprogramok, paraméterátadás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás

Java programozási nyelv

Programozás I. gyakorlat

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

A C# programozási nyelv alapjai

Információs Technológia

Programozás alapjai 9.Gy: Struktúra 2.

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

AWK programozás, minták, vezérlési szerkezetek

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Fejlett programozási nyelvek C++ Iterátorok

AVR assembly és AVR C modulok együttes használata AVR C projektben. Összeállította: Sándor Tamás

Programozás II. 2. Dr. Iványi Péter

Bevezetés a számítástechnikába

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

BASH script programozás II. Vezérlési szerkezetek

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

10. gyakorlat Tömb, mint függvény argumentum

Vezérlési szerkezetek

Programozás alapjai II. (1. ea) C++

Architektúra, megszakítási rendszerek

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

Programozás 1. Dr. Iványi Péter

7. fejezet: Mutatók és tömbök


Programozás alapjai. 5. előadás

Átírás:

Párhuzamos és Grid rendszerek (10. ea) egy vektorprocesszor Szeberényi Imre BME IIT <szebi@iit.bme.hu> M Ű E G Y E T E M 1 7 8 2 Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 1 -

Flynn-féle architektúra modell Single DATA Multiple Single INSTRUCTIONS Multiple Single Instruction Single Data SISD (serial machines) Multiple Instruction Single Data MISD (pipelines) Single Instruction Multiple Data SIMD (vector processors) Multiple Instruction Multiple Data MIMD (multiprocesszors) Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.02.11. - 2 -

ClearSpeed gyorsító kártya 2006: Tokyo Institute of Technology's TSUBAME Supercomputer 47.38 TFLOPS ClearSpeed e710 kártya Gyorsítókártya (PCIe x8) 2 db 96 magos processzor 2 x 8 GB DRR2, 2x128K SRAM 96 Gflops 24 W Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 3 -

Belső felépítés Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 4 -

Multi-threaded Array Processor Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 5 -

MTAP Control unit fetch, decode, -> mono, v. poly semaphore Poly controller Execution units 1 db mono 96 db poly Cache I/O Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 6 -

Szoftver komponensek, eszközök CSXL BLAS, LAPACK CSAPI SDK C n nyelv Standard lib Compiler (gcc) Debugger (gdb) Szimulator Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 7 -

C n nyelv Standard ANSI C + 2 db új kulcsszó: poly mono Szabályok a két új tárolási osztály elérésére, automatikus konverziójára. pointerek kezelési szabályai tömb, struct és union kezelési szabályai vezérlési szerkezetek speciális értelmezése Számos fv. a hw. kezelésére Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 8 -

Egyszerű példa #include <stdio.h> int main() { printf("hello world\n"); return 0; } Fordítás és futtatás: cscn hello.cn o hello.csx csrun r hello.csx Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 9 -

Kis módosítás #include <stdiop.h> int main() { printfp("hello world\n"); return 0; } Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 10 -

poly int counter; mono double data; float fix; mono és poly // minden PE-ben // csak a mono unit-ban // ua. mint mono // poly visszatérési értékű függvény: poly int fx(poly int, poly float); // mono visszatérési értékű függvény mono int fx(poly int, poly int); Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 11 -

Újabb módosítás #include <stdiop.h> #include <lib_ext.h> int main() { poly int penum = get_penum(); printfp("hello world %d\n",penum); return 0; } Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 12 -

pointerek mono int * mono p; mono int * poly p; Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 13 -

pointerek /2 poly int* mono p; poly int* poly p; Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 14 -

struct és union A multiplicitást csak a típuson keresztül lehet megadni. struct str_t { int a; double d; }; mono struct str_t str1; poly struct str_t str1; A typedef-fel is ugyanez a helyzet. Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 15 -

pointer cast és tömb nem lehet pointer multiplicitását megváltoztatni cast-tal! Másik memória terület! poly int tomb[100] poly int* mono tomb; Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 16 -

vegyes multiplicitás mono a; poly b; mono változó mindig konvertálható polyvá. A konverzió automatikus. b = a; Kifejezésben is lehet vegyesen, a kifejezés értéke poly típusú lesz. a + b Értelmetlen, és nem is lehet mono változóba poly-t tenni. Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 17 -

vezérlési szerkezetek (if) mono a; poly b; if (a < 10) utas1 else utas2 // normál if (b < 10) utas1 else utas2 // minden PE-ben Azok a PE-k melyekben a kif. nem teljesül letiltódnak, majd az else végrehatásakor azok tiltódnak, amelyekben teljesült. Végül mindkét ág végrehajtódik. if (b < 1) a = 5; else a = 8; // mennyi a?? Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 18 -

Vezérlés divergencia Az gyakori elágazás rontja a párhuzamosítás hatékonyságát. Branch Path A Path B Grir és OO labor BME-IIT Sz.I. 2012.11.13. - 19 -

for, while, do mono a; for (a = 0; a < 10; a++) utas // normál poly b, i; // tfh., hogy i minden PE-ben más for (b = 0; b < i; b++) utas // minden PE-ben Azok a PE-k melyekben a kif. nem teljesül letiltódnak, a többiben fut a ciklus. Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 20 -

egyéb vezérlési szerkezet goto nem léphet át poly kifejezésre alapozott feltételt! helyette címkézett break és continue használható: for_i: for (i=...) { if (...) break for_i; } switch csak a mono vezérlőben futhat! Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 21 -

Adatmozgatás memcpym2p memcpyp2m memcpym2p_strided memcpyp2m_strided Van aszinkron változatuk is. Használatuk figyelmet igényel. Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 22 -

szemaforok értékük: nem negatív egész azonosítójuk: 0-92 (93-127: foglalt) műveletek: sem_wait sem_sig sem_put sem_get sem_sync Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 23 -

1. példa: integrálás double integ(double low, double high, long n) { double w, pew, sum; // mono-k poly int penum; // PE sorszám poly double sump; // PE részösszege poly double l, h; // határok // PE sorszámának lekérdezése (0..95) penum = get_penum(); w = (high-low)/n; // lépésköz pew = (high-low)/96;// PE-nkénti lépés Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 24 -

1. példa: integrálás / 2 l = pew*penum+low; // alsó határ h = l + pew; // felső határ sump = 0.0; // téglányösszeg l += w/2.0; // fél lépéssel while (l < h) { sump += fx(l); // összegzés l += w; // egész lépés } } // minden PE sump-jét összeadja sum = cs_reduce_sum(sump); return sum * w; // szorzás Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 25 -

1. példa: integrálás (PI) #include <lib_ext.h> #include <stdiop.h> #include <stdlibp.h> #include <reduction.h> #define fx(x) (4.0/(1.0+x*x)) #define N 1000000L...... int main() { printf("pi(%10ld): %15.13lf\n", N, integ(0, 1, N)); return 0; } Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 26 -

2. péda: rendezés csővel y 0 y 1 y 2 y 3 y x 1 4 x1 x 2 x 3 x 4 x 5 Minden feldolgozóra, minden lépésben: x i = max(x i, y i-1 ), i = 1,2,3 n y i = min(x i, y i-1 ), i = 1,2,3 n Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 27 -

2. péda: rendezés csővel /2 unsigned int vec[num_pes]; int i, j; poly int x, y, tmp; // PE-kben x = y = -1; // speciális érték for (i = 0; i < NUM_PES; i++) { set_swazzle_low(vec[i]); // új érték y = swazzle_up(y); // belép + előző y for (j = 0; j <= i; j++) { // i+1-szer if (y > x) { tmp = x; x = y; y = tmp; } y = circular_swazzle_up(y); // kisebb -> } } // x-ek nagyság szerint csökkenően Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 28 -

Szoftver komponensek, eszközök Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 29 -

CSPX Device driver CSAPI CSPX RPC Processz + objektum modell Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 30 -

Processz és objektum CSPX::State<> numprocesses, call, sync CSPX::Object<> move CSPX::Parameter<> Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 31 -

Példa Vektor elemek négyzetgyöke Objektumok: input, output vektor Processzek: hoszt processz gyorsító kártyák processzei Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 32 -

Példa (cpp #1) int main(void) { static double inp[size], res[size]; CSPX::State<> processes("sqrt.csx"); int numproc = processes.numprocesses();// CPU-k } CSPX::Object<double> inputobj(inp, SIZE, numproc, CSPX_OBJECT_WRITE); CSPX::Object<double> resultobj(res, SIZE, numproc, CSPX_OBJECT_READ);... Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 33 -

Példa (cpp #2) int main(void) {... CSPX::Parameter pars(numproc); pars.push(inputobj); // sorrend ua. mint a pars.push(resultobj); // cn prog struktúrában pars.push(size/numproc); for (int i = 0; i < SIZE; i++) inp[i] = i*i; processes.move(inputobj); processes.move(resultobj);... } Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 34 -

Példa (cpp #3) int main(void) {... processes.call(pars, "square_root"); // RPC! processes.sync(resultobj); } for (int i=0; i < SIZE; i++) { printf("%d: %.2f\n", i, res[i]); } Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 35 -

Példa (cn #1) struct sqrt_args { }; CSPXObject inputs; CSPXObject results; int count; // ebben a sorrendben // ment a pars.push #pragma cspx_export(square_root) // elérhető lesz int square_root(cspxprocess parent, void* pars) { struct s_args *arg = (struct s_args *) pars; double *inp, *res; int i; CSPXErrno e; CSPX_object_sync(&args->inputs); // átveszi CSPX_object_sync(&args->results);... } Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 36 -

Példa (cn #2) int square_root(cspxprocess parent, void* pars)... } inp = CSPX_object_get_pointer(&arg->inp, &e); res = CSPX_object_get_pointer(&arg->res, &e); for (i = 0; i < args->cnt; i += get_num_pes()){ } poly double d; poly int index; index = i + get_penum(); memcpym2p(&d, &inp[index], sizeof(double)); d = sqrtp(d); memcpyp2m(&res[index], &d, sizeof(double)); CSPX_object_move(parent, &args->results); Grir és OO labor BME-IIT Sz.I. 2013.04.15. - 37 -