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

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

Párhuzamos és Grid rendszerek

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 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

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

Információs Technológia

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

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)

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

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

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

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

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

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.

Párhuzamos és Grid rendszerek

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

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

Apple Swift kurzus 3. gyakorlat

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

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

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

Párhuzamos programozási platformok

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Óbudai Egyetem. C programozási nyelv

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

Párhuzamos programozási platformok

Párhuzamos és Grid rendszerek

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

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

Programozás C és C++ -ban

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

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

Google Summer of Code OpenCL image support for the r600g driver

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

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

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

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

3. Gyakorlat Ismerkedés a Java nyelvvel

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

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

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

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

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

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

C programozás. 1 óra Bevezeté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

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

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

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

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

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

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

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

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!

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

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

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

Bevezetés a C++ programozási nyelvbe

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

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

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

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

Alprogramok, paraméterátadás

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

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

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

Informatika terméktervezőknek

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

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

Szelekció. Döntéshozatal

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

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

Architektúra, megszakítási rendszerek

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

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

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

Programozás I. gyakorlat

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

Információs Technológia

A C# programozási nyelv alapjai

Java programozási nyelv

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Fejlett programozási nyelvek C++ Iterátorok

117. AA Megoldó Alfréd AA 117.

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

2.3. A C nyelv utasításai

Osztály és objektum fogalma

PROGRAMOZÁS ALAPJAI (ANSI C NYELVEN)

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

Imperatív programozás

Átírás:

Flynn-féle architektúra modell Párhuzamos és Grid rendszerek (8. ea) egy vektorprocesszor Szeberényi Imre BME IIT <szebi@iit.bme.hu> Single INSTRUCTIONS Multiple Single Single Instruction Single Data SISD (serial machines) Multiple Instruction Single Data MISD (pipelines) DATA Multiple Single Instruction Multiple Data SIMD (vector processors) Multiple Instruction Multiple Data MIMD (multiprocesszors) M Ű E G Y E T E M 1 7 8 2 2011.03.30. -1-2011.03.30. -2- ClearSpeed gyorsító kártya Belső felépítés 2006: Tokyo Institute of Technology's TSUBAME Supercomputer 47.38 TFLOPS ClearSpeed e710 kártya Gyorsítókártya y (PCIe x8) 2 db 96 magos processzor 2 x 8 GB DRR2, 2x128K SRAM 96 Gflops 24 W 2011.03.30. -3-2011.03.30. -4- Multi-threaded Array Processor MTAP Control unit fetch, decode, -> mono, v. poly semaphore Poly controller Execution units 1 db mono 96 db poly Cache I/O 2011.03.30. -5-2011.03.30. -6-1

Szoftver komponensek, eszközök CSXL BLAS, LAPACK CSAPI SDK C n nyelv Standard lib Compiler (gcc) Debugger (gdb) Szimulator 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 2011.03.30. -7-2011.03.30. -8- Egyszerű példa #include <stdio.h> printf("hello world\n"); Kis módosítás #include <stdiop.h> printfp("hello world\n"); Fordítás és futtatás: cscn hello.cn o hello.csx csrun r hello.csx 2011.03.30. -9-2011.03.30. -10- mono és poly poly int counter; // minden PE-ben mono double data; // csak a mono unit-ban float fix; // 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); Újabb módosítás #include <stdiop.h> #include <lib_ext.h> poly int penum = get_penum(); printfp("hello world %d\n",penum); 2011.03.30. -11-2011.03.30. -12-2

mono int * mono p; pointerek poly int* mono p; pointerek /2 mono int * poly p; poly int* poly p; 2011.03.30. -13-2011.03.30. -14- struct és union pointer cast és tömb 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. nem lehet pointer multiplicitását megváltoztatni cast-tal! Másik memória terület! poly int tomb[100] poly int* mono tomb; 2011.03.30. -15-2011.03.30. -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. 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?? 2011.03.30. -17-2011.03.30. -18-3

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. 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! 2011.03.30. -19-2011.03.30. -20- Adatmozgatás memcpym2p memcpyp2m memcpym2p_strided memcpyp2m_strided Van aszinkron változatuk is. Használatuk figyelmet igényel. 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 2011.03.30. -21-2011.03.30. -22-1. példa: integrálás 1. példa: integrálás / 2 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 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 2011.03.30. -23-2011.03.30. -24-4

1. példa: integrálás (PI) 2. péda: rendezés csővel #include <lib_ext.h> #include <stdiop.h> #include <stdlibp.h> #include <reduction.h> y 0 y 1 y 2 y 3 y x 1 x 4 2 x 3 x 4 x 5 #define fx(x) (4.0/(1.0+x*x)) #define N 1000000L printf("pi(%10ld): %15.13lf\n", N, integ(0, 1, N)); 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 2011.03.30. -25-2011.03.30. -26-2. péda: rendezés csővel /2 Szoftver komponensek, eszközök unsigned int vec[num_pes]; int i; 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); // előző Y if (y > x) { tmp = x; x = y; y = tmp; y = swazzle_up(y); // új y // x-ek nagyság szerint csökkenően 2011.03.30. -27-2011.03.30. -28- CSPX Processz és objektum Device driver CSAPI CSPX RPC Processz + objektum modell CSPX::State<> numprocesses, call, sync CSPX::Object<> move CSPX::Parameter<> 2011.03.30. -29-2011.03.30. -30-5

Példa Vektor elemek négyzetgyöke Objektumok: input, output vektor Processzek: hoszt processz gyorsító kártyák processzei 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);. 2011.03.30. -31-2011.03.30. -32- Példa (cpp #2) Példa (cpp #3) 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); int main(void) { processes.call(pars, "square_root"); // RPC! processes.sync(resultobj); for (int i = 0; i < SIZE; i++) inp[i] = i*i; processes.move(inputobj); processes.move(resultobj); for (int i=0; i < SIZE; i++) { printf("%d: %.2f\n", i, res[i]); 2011.03.30. -33-2011.03.30. -34- Példa (cn #1) struct sqrt_args { // ebben a sorrendben CSPXObject inputs; // ment a pars.push CSPXObject results; int count; ; #pragma cspx_export(square_root) 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); 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); 2011.03.30. -35-2011.03.30. -36-6