Χορεύοντας με τα teraflops

Σχετικά έγγραφα
Δθμιουργία, μελζτθ και βελτιςτοποίθςθ φωτορεαλιςτικϊν απεικονίςεων πραγματικοφ χρόνου με χριςθ προγραμματιηόμενων επεξεργαςτϊν γραφικϊν

Παράλληλος Προγραμματισμός με OpenCL

Παράλληλος προγραμματισμός σε επεξεργαστές γραφικών

Γραφικά Υπολογιστών Εισαγωγή

Προγραμματισμός GPUs μέσω του περιβάλλοντος CUDA

CUDA Compute Unified Device Architecture

Εισαγωγή στον GPGPU προγραμματισμό 50,000, ,000,000 (1 από 2) 19/5/2018

Ετήσια Τεχνική Έκθεση

Εισαγωγικά & Βασικές Έννοιες

Εισαγωγή στον προγραμματισμό γραφικών με ray tracing

Εισαγωγικά & Βασικές Έννοιες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ

GPGPU. Grover. On Large Scale Simulation of Grover s Algorithm by Using GPGPU

CUDA FFT. High Performance 3-D FFT in CUDA Environment. Akira Nukada, 1, 2 Yasuhiko Ogata, 1, 2 Toshio Endo 1, 2 and Satoshi Matsuoka 1, 2, 3

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP

Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 3 η : Παράλληλη Επεξεργασία. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ii Πυργιώτης Θεμιστοκλής

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών

OpenCL.

Παράλληλη Επεξεργασία

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Αρχιτεκτονική Υπολογιστών

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών

Παράλληλη Επεξεργασία

CYBERNET APPS. Τι είναι; Πως Είναι;

Προγραμματισμός Ταυτόχρονος Προγραμματισμός

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών

OpenMP. Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ. OpenMP p.

Βασικές Έννοιες Πρ Ταο υγρ τόα χ μ ρ μ ο α ν τισμ ος Π ό ρ ςο ΙΙΙ γραμματισμός 1

Συστήµατα Παράλληλης Επεξεργασίας. OpenMP

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών. OpenMP. Συστήματα Παράλληλης Επεξεργασίας 9 ο Εξάμηνο

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

EM 361: Παράλληλοι Υπολογισμοί

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Μηχανολόγων Μηχανικών Εργαστήριο Θερμικών Στροβιλομηχανών

EM 361: Παράλληλοι Υπολογισμοί

Αρχιτεκτονική Υπολογιστών

Κατανεμημένο Σύστημα Διαχείρισης Εργασιών Απομακρυσμένης Εκτέλεσης Κώδικα Για Επιταχυντές Γραφικών Σε Συστοιχίες Υπολογιστών ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Προσομοιώσεις Monte Carlo σε GPU

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων

Συστήµατα Παράλληλης Επεξεργασίας. Παράλληλοςπρογραµµατισµός: Υλοποίηση παράλληλων προγραµµάτων

Διεργασίες και Νήματα (2/2)

Αρχιτεκτονική Υπολογιστών

Λειτουργικά Συστήματα. Εισαγωγή

Επιτεύγµατα των Λ.Σ.

Η ΤΑΞΙΝΟΜΗΣΗ ΤΟΥ FLYNN!!! 1 ο ΕΠΑΛ ΡΟΔΟΥ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ!!!! Χατζηνικόλας Κώστας

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

ΣΥΣΤΗΜΑΤΑ ΠΑΡΑΛΛΗΛΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ 9o εξάμηνο ΗΜΜΥ, ακαδημαϊκό έτος

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΝΗΜΑΤΑ

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP (2 ο Μέρος)

Συγκριτική μελέτη διεπιφανειών παράλληλου προγραμματισμού σε εφαρμογές εύρεσης κωδικού κρυπτογραφημένου με αλγόριθμο MD5

All Pairs Shortest Path

Πολυπύρηνοι επεξεργαστές Multicore processors

Λειτουργικά Συστήματα Η/Υ

MPSoCs για εφαρμογές Video

ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΓΕΝΙΚΟ ΤΜΗΜΑ

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

GPU DD Double-Double 3 4 BLAS Basic Linear Algebra Subprograms [3] 2

Παράλληλη Επεξεργασία

ΜΕΛΕΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΠΟΛΥΠΥΡΗΝΟΥ ΕΠΕΞΕΡΓΑΣΤΗ ΜΕ ΕΦΑΡΜΟΓΕΣ PHOENIX

Αρχιτεκτονική Υπολογιστών

Παράλληλος προγραμματισμός: Υλοποίηση παράλληλων προγραμμάτων

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών Τηλεπικοινωνιών & Δικτύων

Ανάπτυξη αλγόριθμου Closest Pair με CUDA API

ΑΝΑΚΟΙΝΩΣΗ. Ανακοινώνεται προς τους ενδιαφερομένους ότι το ΕΚΚΕ προτίθεται να προβεί άμεσα στην προμήθεια των κάτωθι ειδών:

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Νέα γενιά της OpenGL: Η γλώσσα σκίασης GLSL

Παράλληλη Επεξεργασία

Τεχνικές για διαμοιρασμό φορτίου και μακροεντολές Broadcast - Scatter για αποδοτικές πολύ-επεξεργαστικές εφαρμογές

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

OpenMP. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων. Αθήνα, Νοέµβριος /11/2004 Εισαγωγή στο OpenMP 1

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Περιγραφή και Έλεγχος ιεργασιών

Ατομική Διπλωματική Εργασία

Παραλληλισμός Αλγορίθμων σε Κάρτες Γραφικών για Σχεδιασμό Κίνησης

Ατομική Διπλωματική Εργασία ΕΚΤΕΛΕΣΗ ΤΟΥ QUERY 6 ΤΟΥ BENCHMARK TPC-H ΣΕ ΚΑΡΤΑ ΓΡΑΦΙΚΩΝ, ΜΕ CUDA. Μαρία Λοϊζίδη ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

GPU. CUDA GPU GeForce GTX 580 GPU 2.67GHz Intel Core 2 Duo CPU E7300 CUDA. Parallelizing the Number Partitioning Problem for GPUs

Περιεχόμενα ΚΕΦΑΛΑΙΟ 1 EΙΣΑΓΩΓΗ...29 ΚΕΦΑΛΑΙΟ 2 ΙΣΤΟΡΙΑ ΤΗΣ ΥΠΟΛΟΓΙΣΤΙΚΗΣ ΜΕ GPU Πρόλογος Ευχαριστίες Αφιέρωση...

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Λειτουργικά Συστήματα (Λ/Σ)

Προχωρηµένα Θέµατα Αρχιτεκτονικής

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Π Τ Υ Χ Ι Α Κ Η / Δ Ι Π Λ Ω Μ ΑΤ Ι Κ Η Ε Ρ ΓΑ Σ Ι Α

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Λογικά σύμβολα των CPU, RAM, ROM και I/O module

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

Writing kernels for fun and profit

Κατανεμημένος και. Ηλίας Κ. Σάββας Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας

Κατανεμημένος και Παράλληλος Προγραμματισμός

Ε-85: Ειδικά Θέµατα Λογισµικού

Προγραμματισμός με Κοινόχρηστο Χώρο Διευθύνσεων 4

Επίλυση ιδιάστατης Ροής µε Κεντροκυψελική ιατύπωση σε Μη- οµηµένα Πλέγµατα. Προγραµµατισµός σε Επεξεργαστές Καρτών Γραφικών.

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ

Κατανεμημένος και Παράλληλος Προγραμματισμός. Ύλη μαθήματος. Βιβλιογραφία Μαθήματος 2/27/2016

Transcript:

Χορεύοντας με τα teraflops προγραμματισμός στις σύγρονες παράλληλες αρχιτεκτονικές Γιάννης Τσιομπίκας nuclear@memberfsforg 21 Απριλίου 2013

Εισαγωγή

CPU speed - Παρελθόν Εκθετική αύξηση της υπολογιστικής υσχύος τον επεξεργαστών Moore s law Αγώνας δρόμου των MHz

CPU speed - Παρόν

Παραλληλησμός Vectorization (SIMD instructions) SMP (Symmetric Multi-Processing) Multiple processors Multiple processor cores Heterogenous computing special processors (πχ CELL SPEs) Graphics processors (GPU) Distributed computing

Παράδειγμα

ray tracer

ray tracer for(int i=0; i<frame ->ysz; i++) { Color *pixel = frame ->pixels + i * frame ->xsz; for(int j=0; j<frame ->xsz; j++) { Ray ray = camera ->get_primary_ray(j, i); *pixel++ = trace_ray(scn, ray); } } trace_ray: Βρίσκει πού χτυπάει μια ακτίνα, και καλεί την shade για να υπολογίσει χρώμα σε αυτό το σημείο, το οποίο επιστρέφει shade: Κάνει υπολογισμούς φωτισμού για να βρεί το χρώμα σε κάποιο σημείο και το επιστρέφει Μπορεί να καλέσει την trace_ray, για να συλλέξει φωτισμό και απο άλλες κατευθύνσεις

Περιγραφή σκηνής environment -color 02 025 03 -texture cloudscubemap material -name foo -diffuse 1 02 01 -specular 1 1 1 -shininess 60 material -name gnd -reflect 03 -texture tilesjpg sphere -name sph -center 0 0 0 -radius 1 -material foo plane -name floor -normal 0 1 0 -distance -1 -material gnd light -position -10 10-20 -color 08 08 08 xform -name sph -time 0 -pos 0 1 0 xform -name sph -time 1 -pos 0 0 0

Single-threaded raytracer example video

Symmetric Multi-Processing

Symmetric Multi-Processing Κάθε επεξεργαστής ή core εκτελεί ένα Kernel Schedulable Entity ανα πάσα στιγμή Processes fork (UNIX) CreateProcess (Windows) Threads POSIX threads (pthread_create) C11 threads (thrd_create) C++11 threads (std::thread, std::async, std::promise/std::future) OpenMP (#pragma omp parallel)

Multithreading Διαχωρισμός του υπολογισμού σε πολλαπλά threads Στατικός διαχωρισμός (πχ 4 threads - 1/4 του frame το καθ ένα) Worker thread pool Συγχρονισμός Mutual exclusion: phtread_mutex_lock, mtx_lock, std::mutex::lock, std::unique_lock Condition variables: pthread_cond_wait/pthread_cond_signal/pthread_cond_broadcast, cnd_wait/cnd_signal/cnd_broadcast, std::condition_variable pthread_join/pthread_detatch, thrd_join/thrd_detatch, std::thread::join, std::thread::detatch

Worker thread pool n worker threads κοιμούνται με pthread_cond_wait στο work_pending condvar Το main thread: Κλειδώνει το mutex Προσθέτει work list items Ξυπνάει τους workers με pthread_cond_broadcast Ξεκλειδώνει το mutex Το worker thread: Κλειδώνει το mutex Αν υπάρχει δουλειά στη λίστα τήν αφαιρεί, και την εκτελεί (αφού αφήσει το mutex) Αν δεν υπάρχει δουλειά στη λίστα ξανα-πέφτει για ύπνο κάνοντας wait στο condvar

OpenMP High-level parallelization Αυτοματοποιεί τον παραλληλισμό τμημάτων του κώδικα που θέλουμε να εκτελεστούν παράλληλα Απαιτεί υποστίριξη απο τον compiler (ενεργοποιείται στον gcc με -fopenmp) O compiler κάνει emit κλήσεις στο OpenMP runtime library που υλοποιεί worker threads, synchronization εργαλεία, κα (στον gcc: -lgomp)

OpenMP for( int i=0; i<frame ->ysz; i++) { Color * pixel = frame -> pixels + i * frame ->xsz; for( int j=0; j<frame ->xsz; j++) { Ray ray = camera -> get_primary_ray(j, i); * pixel ++ = trace_ray(scn, ray); } }

OpenMP # pragma omp parallel for for( int i=0; i<frame ->ysz; i++) { Color * pixel = frame -> pixels + i * frame ->xsz; for( int j=0; j<frame ->xsz; j++) { Ray ray = camera -> get_primary_ray(j, i); * pixel ++ = trace_ray(scn, ray); } }

Multi-threaded raytracer example video

GPU Computing

Εξέλιξη των PC καρτών γραφικών 80s: CGA, EGA, VGA framebuffer αρχές-μέσα 90: SuperVGA framebuffer τέλη 90 - αρχές 2000: 3dfx, ATI, NVIDIA 3D accelerators αρχές-μέσα 2000: programmable shaders (Geforce3) τραγικά περιορισμένο υπολογιστικό μοντέλο τέλη 2000 - σήμερα: Geforce8800+ πλήρως προγραμματιζόμενες GPU με πολλούς πυρήνες εκτέλεσης

GPU programing languages Shader assembly dialects OpenGL ARB vertex/pixel programs Direct3D vertex/pixel shaders 20 High-level shading languages nvidia Cg (C for graphics) OpenGL Shading Language (GLSL) DirectX HLSL GPGPU computing languages nvidia cuda OpenCL (Open Computing Language) OpenGL Compute Shaders

GPU programing languages Shader assembly dialects OpenGL ARB vertex/pixel programs Direct3D vertex/pixel shaders 20 High-level shading languages nvidia Cg (C for graphics) OpenGL Shading Language (GLSL) DirectX HLSL GPGPU computing languages nvidia cuda OpenCL (Open Computing Language) OpenGL Compute Shaders

GPU programing languages Shader assembly dialects OpenGL ARB vertex/pixel programs Direct3D vertex/pixel shaders 20 High-level shading languages nvidia Cg (C for graphics) OpenGL Shading Language (GLSL) DirectX HLSL GPGPU computing languages nvidia cuda OpenCL (Open Computing Language) OpenGL Compute Shaders

GPU programing languages Shader assembly dialects OpenGL ARB vertex/pixel programs Direct3D vertex/pixel shaders 20 High-level shading languages nvidia Cg (C for graphics) OpenGL Shading Language (GLSL) DirectX HLSL GPGPU computing languages nvidia cuda OpenCL (Open Computing Language) OpenGL Compute Shaders

GPU computing architecture Multiple floating point processors Groups of processors (warps) με κοινή local μνήμη και κοινό execution control Δυναμικό scheduling των groups με αμελητέο context switching overhead Ιεραρχία μνήμης (επόμενο slide)

GPU memory hierarchy

OpenCL vs CUDA vs GLSL OpenCL CUDA GLSL work item thread fragment work group thrad block N/A global memory global memory OpenGL textures & buffers constant memory constant memory uniforms local memory shared memory N/A private memory registers local variables get_global_id(0) threadidxx + gl_fragcoordx blockidxx * blockdimx

Απλό παράδειγμα OpenCL Host code: inbuf = clcreatebuffer(ctx, CL_MEM_READ_ONLY, sz, 0, &err); outbuf = clcreatebuffer(ctx, CL_MEM_WRITE_ONLY, sz, 0, &err); clenqueuewritebuffer(cmdq, inbuf, 1, 0, sz, data, 0, 0, 0); prog = clcreateprogramwithsource(ctx, 1, &src_buf, 0, &err); clbuildprogram(prog, 0, 0, 0, 0, 0); kernel = clcreatekernel(prog, "square", &err); clsetkernelarg(kernel, 0, sz, &inbuf); clsetkernelarg(kernel, 1, sz, &outbuf); int globsz[] = {1, 0, 0}; clenqueuendrangekernel(cmdq, kernel, 1, 0, globsz, 0, 0, 0, 0); clenqueuereadbuffer(cmdq, outbuf, 1, 0, sz, data, 0, 0, 0, 0); Kernel code: kernel void square(global int *dest, global int *data) { int idx = get_global_id(0); dest[idx] = data[idx] * data[idx]; }

GPU Παράδειγμα σε GLSL Υλοποίηση σαν GLSL fragment shader (pixel shader) Κάθε thread εκτελείται για συντεταγμένες (gl_fragcoordx, gl_fragcoordy) Τα data structures της σκηνής κωδικοποιούνται σαν pixel rows σε texture images Fullscreen OpenGL polygon (quad) γιά να εκτελεστεί ο shader για κάθε pixel

Scene data buffers

GPU ray tracer example video