IMPROVING PROGRAMMABILITY AND PERFORMANCE PORTABILITY ON MANY-CORE PROCESSORS

Größe: px
Ab Seite anzeigen:

Download "IMPROVING PROGRAMMABILITY AND PERFORMANCE PORTABILITY ON MANY-CORE PROCESSORS"

Transkript

1 IMPROVING PROGRAMMABILITY AND PERFORMANCE PORTABILITY ON MANY-CORE PROCESSORS michel steuwer aus Duisburg

2 Die Manycore Ära 10,000,000 1,000, ,000 10,000 1,000 Transistors (in 1000s) Clock Frequency (in Mhz) Power (in Watt) Number of Cores Intel CPUs von 1970 bis Inspiriert von Herb Sutter The Free Lunch is Over: A Fundamental Turn Towards Concurrency in Software

3 Die Manycore Ära multicore CPUs GPUs Beschleuniger FPGAs

4 Agenda Meine Dissertation adressiert zwei zentrale Herausforderungen: I. Die Herausforderung der Programmierbarkeit II. Die Herausforderung der Performance-Portabilität

5 TEIL I Die Herausforderung der Programmierbarkeit

6 Programmierung mit OpenCL Beispiel: Parallele Summation eines Arrays in OpenCL kernel void reduce(global float* g_idata, global float* g_odata, unsigned int n, local float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_global_id(0); l_data[tid] = (i < n)? g_idata[i] : 0; barrier(clk_local_mem_fence); // do reduction in local memory for (unsigned int s=1; s < get_local_size(0); s*= 2) { if ((tid % (2*s)) == 0) { l_data[tid] += l_data[tid + s]; barrier(clk_local_mem_fence); // write result for this work-group to global memory if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

7 Programmierung mit OpenCL Beispiel: Parallele Summation eines Arrays in OpenCL Kernel Funktion wird parallel von vielen work-items ausgeführt kernel void reduce(global float* g_idata, global float* g_odata, unsigned int n, local float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_global_id(0); l_data[tid] = (i < n)? g_idata[i] : 0; barrier(clk_local_mem_fence); // do reduction in local memory for (unsigned int s=1; s < get_local_size(0); s*= 2) { if ((tid % (2*s)) == 0) { l_data[tid] += l_data[tid + s]; barrier(clk_local_mem_fence); // write result for this work-group to global memory if (tid == 0) g_odata[get_group_id(0)] = l_data[0]; Work-items werden durch eine globale id identifizier

8 Programmierung mit OpenCL Beispiel: Parallele Summation eines Arrays in OpenCL Work-items werden zu work-groups zusammengefasst Lokale id innerhalb einer work-group kernel void reduce(global float* g_idata, global float* g_odata, unsigned int n, local float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_global_id(0); l_data[tid] = (i < n)? g_idata[i] : 0; barrier(clk_local_mem_fence); // do reduction in local memory for (unsigned int s=1; s < get_local_size(0); s*= 2) { if ((tid % (2*s)) == 0) { l_data[tid] += l_data[tid + s]; barrier(clk_local_mem_fence); // write result for this work-group to global memory if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

9 Programmierung mit OpenCL Beispiel: Parallele Summation eines Arrays in OpenCL Großer, aber langsamer globaler Speicher Kleiner, aber schneller lokaler Speicher kernel void reduce(global float* g_idata, global float* g_odata, unsigned int n, local float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_global_id(0); l_data[tid] = (i < n)? g_idata[i] : 0; barrier(clk_local_mem_fence); // do reduction in local memory for (unsigned int s=1; s < get_local_size(0); s*= 2) { if ((tid % (2*s)) == 0) { l_data[tid] += l_data[tid + s]; barrier(clk_local_mem_fence); // write result for this work-group to global memory if (tid == 0) g_odata[get_group_id(0)] = l_data[0]; Barrieren für Speicherkonsistenz

10 Programmierung mit OpenCL Beispiel: Parallele Summation eines Arrays in OpenCL kernel void reduce(global float* g_idata, global float* g_odata, unsigned int n, local float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_global_id(0); l_data[tid] = (i < n)? g_idata[i] : 0; barrier(clk_local_mem_fence); // do reduction in local memory for (unsigned int s=1; s < get_local_size(0); s*= 2) { if ((tid % (2*s)) == 0) { l_data[tid] += l_data[tid + s]; barrier(clk_local_mem_fence); // write result for this work-group to global memory if (tid == 0) g_odata[get_group_id(0)] = l_data[0]; Funktional korrekte Implementierungen in OpenCL sind schwierig!

11 DAS SKELCL PROGRAMMIERMODEL

12 Das SkelCL Programmiermodel Drei Abstraktionen zu OpenCL hinzugefügt: Parallele Datencontainer für eine einheitliche Speicherverwaltung zwischen CPU und (mehreren) GPUs implizite Speichertransfers zwischen CPU und GPU lazy copying minimiert den Datentransfer Wiederkehrende Muster paralleler Programmierung (Algorithmische Skelette) für eine vereinfachte Beschreibung paralleler Berechnungen zip ( ) [x1,, xn] [y1,, yn] = [x1 y1,, xn yn] reduce ( ) id [x1,, xn] = id x1 xn Daten Verteilungen für einen transparenten Datentransfer in Systemen mit mehreren GPUs. CPU CPU CPU 0 GPUs 1 0 GPUs 1 0 GPUs 1 single copy block

13 Die SkelCL Softwarebibliothek am Beispiel dotproduct A B = reduce (+) 0 (zip ( ) A B) #include <SkelCL/SkelCL.h> #include <SkelCL/Zip.h> #include <SkelCL/Reduce.h> #include <SkelCL/Vector.h> float dotproduct(const float* a, const float* b, int n) { using namespace skelcl; skelcl::init( 1_device.type(deviceType::ANY) ); auto mult = zip([](float x, float y) { return x*y; ); auto sum = reduce([](float x, float y) { return x+y;, 0); Vector<float> A(a, a+n); Vector<float> B(b, b+n); Vector<float> C = sum( mult(a, B) ); return C.front();

14 Neue Algorithmische Skelette Stencil Berechnungen Beispiel: Gaußscher Weichzeichner Allpairs Berechnungen Example: Matrix Multiplication 2 B T gauss M = stencil f 1 0M wo f die Funktion is welche den Gaußschen Weichzeichner beschreibt Unterstützung für mehre GPUs: CPU 1 3 A C (b) A B = allpairs dotproduct A B T Optimierung für zipreduce Muster: dotproduct a b = zipreduce (+) 0 ( ) a b 0 GPUs 1 overlap Verteilung Unterstützung für mehrere GPUs mit block und copy Verteilung

15 SkelCL Evaluation Geschwindigkeit mandelbrot linear algebra (dot product) matrix multiplication image processing (gaussian blur) medical imaging (LM OSEM) physics simulation (FDTD) 2.0 Relative Runtime OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL SkelCL nahe an der Geschwindigkeit von OpenCL! (Ausnahme: dot product mehr dazu in Teil II)

16 SkelCL Evaluation Produktivität CPU code GPU code Relative Lines of Code mandelbrot linear algebra (dot product) matrix multiplication image processing (gaussian blur) medical imaging (LM OSEM) OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL OpenCL SkelCL SkelCL Programme sind signifikant kürzer!

17 TEIL II Die Herausforderung der Performance-Portabilität

18 EIN NEUER ANSATZ ZUR PERFORMANCE PORTABLEN CODEGENERIERUNG

19 OpenCL und Performance-Portabilität Beispiel: Parallele Summation eines Arrays in OpenCL Vergleich von 7 OpenCL Implementierungen von Nvidia 200 Hardware Bandwidth Limit Bandwidth (GB/s) Impl. 1 Impl. 2 Impl. 3 Impl. 4 Impl. 5 Impl. 6 Impl. 7 cublas (a) Nvidia s GTX 480 GPU.

20 OpenCL und Performance-Portabilität 200 Hardware Bandwidth Limit Beispiel: Parallele Summation eines Arrays in OpenCL Vergleich von 7 OpenCL Implementierungen von Nvidia Bandwidth (GB/s) Impl. 1 Impl. 2 Impl. 3 Impl. 4 Impl. 5 Impl. 6 Impl. 7 cublas (a) Nvidia s GTX 480 GPU. 300 Hardware Bandwidth Limit 30 Hardware Bandwidth Limit Bandwidth (GB/s) Bandwidth (GB/s) Impl. 1 Impl. 2 Impl. 3 Impl. 4 Impl. 5 Impl. 6 Impl. 7 clblas 0 Impl. 1 Impl. 2 Impl. 3 Impl. 4 Failed Failed Failed Impl. 5 Impl. 6 Impl. 7 MKL (b) AMD s HD 7970 GPU. (c) Intel s E5530 dual-socket CPU. Performance in OpenCL ist nicht portabel!

21 Performance portable Codegenerierung mit Transformationsregeln BlackScholes Dot product Vector reduction... High-level programming High-level Expression Algorithmic Patterns iterate split map... reorder join reduce Algorithmic choices & Hardware optimizations Exploration with rewriting rules Low-level Expression OpenCL Patterns map-workgroup vectorize... tolocal map-local Code generation OpenCL Program Hardware Paradigms local memory workgroups... barriers vector units Figure 5.3: Overview of our code generation approach. Problems expressed

22 Beispiel: Parallele Summation vecsum = reduce (+) 0 rewrite rules code generation kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); vecsum = reduce join map-workgroup join toglobal (map-local (map-seq id)) split 1 join map-warp join map-lane (reduce-seq (+) 0) split 2 reorder-stride 1 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 2 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 4 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 8 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 16 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 32 split 64 join map-local (reduce-seq (+) 0) split 2 reorder-stride 64 join tolocal (map-local (reduce-seq (+) 0)) split (blocksize/128) reorder-stride 128 split blocksize Listing 5.13: Expression resembling the seventh implementation of parallel if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

23 Beispiel: Parallele Summation vecsum = reduce (+) 0 rewrite rules code generation kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); vecsum = reduce join map-workgroup join toglobal (map-local (map-seq id)) split 1 join map-warp join map-lane (reduce-seq (+) 0) split 2 reorder-stride 1 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 2 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 4 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 8 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 16 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 32 split 64 join map-local (reduce-seq (+) 0) split 2 reorder-stride 64 join tolocal (map-local (reduce-seq (+) 0)) split (blocksize/128) reorder-stride 128 split blocksize Listing 5.13: Expression resembling the seventh implementation of parallel if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

24 Algorithmische Primitive map A,B,I :(A! B)! [A] I! [B] I zip A,B,I :[A] I! [B] I! [A B] I reduce A,I :((A A)! A)! A! [A] I! [A] 1 split A,I :(n :size)! [A] n I! [[A] n ] I join A,I,J :[[A] I ] J! [A] I J iterate A,I,J :(n :size)! ((m :size)! [A] I m! [A] m )! [A] I n J! [A] J

25 High-Level Programme scal = a.map ( a) asum = reduce (+) 0 map abs dot = xs ys.(reduce (+) 0 map ( )) (zip xs ys) gemv = mat xs ys.map (+) ( zip (map (scal dot xs) mat) (scal ys) )

26 Beispiel: Parallele Summation vecsum = reduce (+) 0 rewrite rules code generation kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); vecsum = reduce join map-workgroup join toglobal (map-local (map-seq id)) split 1 join map-warp join map-lane (reduce-seq (+) 0) split 2 reorder-stride 1 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 2 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 4 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 8 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 16 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 32 split 64 join map-local (reduce-seq (+) 0) split 2 reorder-stride 64 join tolocal (map-local (reduce-seq (+) 0)) split (blocksize/128) reorder-stride 128 split blocksize Listing 5.13: Expression resembling the seventh implementation of parallel if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

27 Beispiel: Parallele Summation vecsum = reduce (+) 0 rewrite rules code generation kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); vecsum = reduce join map-workgroup join toglobal (map-local (map-seq id)) split 1 join map-warp join map-lane (reduce-seq (+) 0) split 2 reorder-stride 1 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 2 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 4 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 8 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 16 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 32 split 64 join map-local (reduce-seq (+) 0) split 2 reorder-stride 64 join tolocal (map-local (reduce-seq (+) 0)) split (blocksize/128) reorder-stride 128 split blocksize Listing 5.13: Expression resembling the seventh implementation of parallel if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

28 Algorithmische Transformationsregeln Transformationsregeln sind semantikerhaltend Drücken Auswahl bei der algorithmische Implementierungen aus Split-Join Zerlegung: map f! join map (map f) split n Map Zusammenschluss: map f map g! map (f g) Reduktionsregeln: reduce fz! reduce fz reducepart fz reducepart fz! reducepart fz reorder reducepart fz! join map (reducepart fz) split n reducepart fz! iterate n (reducepart fz)

29 OpenCL Primitive Primitive mapglobal OpenCL Konzept Work-items mapworkgroup / maplocal Work-groups mapseq / reduceseq Sequentielle Implementierungen tolocal / toglobal Speicherbereiche mapvec / splitvec / joinvec Vektorisierung

30 OpenCL Transformationsregeln Drücken hardware-spezifische Optimierungen aus Map: map f! mapworkgroup f maplocal f mapglobal f mapseq f Lokaler/ Globaler Speicher: maplocal f! tolocal (maplocal f) maplocal f! toglobal (maplocal f) Vektorisierung: map f! joinvec map (mapvec f) splitvec n Map-Reduktion Zusammenschluss: reduceseq fz mapseq g! reduceseq ( (acc, x). f(acc, g x)) z

31 Beispiel: Parallele Summation vecsum = reduce (+) 0 rewrite rules code generation kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); vecsum = reduce join map-workgroup join toglobal (map-local (map-seq id)) split 1 join map-warp join map-lane (reduce-seq (+) 0) split 2 reorder-stride 1 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 2 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 4 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 8 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 16 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 32 split 64 join map-local (reduce-seq (+) 0) split 2 reorder-stride 64 join tolocal (map-local (reduce-seq (+) 0)) split (blocksize/128) reorder-stride 128 split blocksize Listing 5.13: Expression resembling the seventh implementation of parallel if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

32 Beispiel: Parallele Summation vecsum = reduce (+) 0 rewrite rules code generation kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); vecsum = reduce join map-workgroup join toglobal (map-local (map-seq id)) split 1 join map-warp join map-lane (reduce-seq (+) 0) split 2 reorder-stride 1 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 2 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 4 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 8 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 16 join map-lane (reduce-seq (+) 0) split 2 reorder-stride 32 split 64 join map-local (reduce-seq (+) 0) split 2 reorder-stride 64 join tolocal (map-local (reduce-seq (+) 0)) split (blocksize/128) reorder-stride 128 split blocksize Listing 5.13: Expression resembling the seventh implementation of parallel if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0];

33 Muster basierte OpenCL Codegenerierung Generiere OpenCL Code für jedes OpenCL Primitiv mapglobal fxs for (int g_id = get_global_id(0); g_id < n; g_id += get_global_size(0)) { output[g_id] = f(xs[g_id]); reduceseq fzxs T acc = z; for (int i = 0; i < n; ++i) { acc = f(acc, xs[i]);..

34 Transformationsregeln definieren einen Suchraum gültiger Implementierungen reduce (+) 0 reduce (+) 0 reducepart (+) 0

35 Transformationsregeln definieren einen Suchraum gültiger Implementierungen reduce (+) 0 reduce (+) 0 reducepart (+) 0 reduce (+) 0 reducepart (+) 0 reorder reduce (+) 0 iterate n (reducepart (+) 0)

36 Transformationsregeln definieren einen Suchraum gültiger Implementierungen reduce (+) 0 reduce (+) 0 reducepart (+) 0 reduce (+) 0 reducepart (+) 0 reorder reduce (+) 0 iterate n (reducepart (+) 0)

37 Transformationsregeln definieren einen Suchraum gültiger Implementierungen reduce (+) 0 reduce (+) 0 reducepart (+) 0 reduce (+) 0 reducepart (+) 0 reorder reduce (+) 0 iterate n (reducepart (+) 0) reduce (+) 0 join map (reducepart (+) 0) split n

38 Transformationsregeln definieren einen Suchraum gültiger Implementierungen reduce (+) 0 reduce (+) 0 reducepart (+) 0 reduce (+) 0 reducepart (+) 0 reorder reduce (+) 0 iterate n (reducepart (+) 0) reduce (+) 0 join map (reducepart (+) 0) split n Vollautomatische Suche nach guten Implementierungen möglich! (Eine einfache Suchstrategie ist in der Dissertation beschrieben)

39 Evaluation Geschwindigkeit gegenüber einer funktional portablen Implementierung 4 Nvidia GPU AMD GPU Intel CPU Speedup small large small large small large small large scal asum dot gemv Black Scholes MD Bis zu 20x Speedup gegenüber der funktional portablen clblas Implementierung

40 Evaluation Geschwindigkeit gegenüber Hardware spezifischen Implementierungen Speedup over CUBLAS CUBLAS Generated small large small large small large small large scal asum dot gemv Speedup over clblas clblas Generated small large small large small large small large scal asum dot gemv Speedup over MKL MKL Generated small large small large small large small large scal asum dot gemv (a) Nvidia GPU (b) AMD GPU (c) Intel CPU Automatisch generierter Code vs. handoptimierten Code Konkurrenzfähige Ergebnisse vs. hochoptimierte Implementierungen Bis zu 4.5x Speedup für gemv auf der AMD GPU

41 Zusammenfassung Um die Herausforderung der Programmierbarkeit zu adressieren: Ein neuer Ansatz zur Programmierung von Systemen mit mehreren GPUs Zwei neue formell definierte und implementierte algorithmische Skelette Um die Herausforderung der Performance-Portabilität zu adressieren: Ein formelles System zur Transformation muster-basierter Programme Ein Codegenerator der Performance-Portabilität erreicht

42 Ergebnisse der Suche Automatisch Gefundene Ausdrücke asum = reduce (+) 0 map abs Nvidia GPU AMD GPU Intel CPU x.(reduceseq join join mapworkgroup ( toglobal maplocal (reduceseq ( (a, b). a+(abs b)) 0) reorderstride 2048 ) split 128 split 2048) x x.(reduceseq join joinvec join mapworkgroup ( maplocal (reduceseq (mapvec 2( (a, b). a+(abs b))) 0 reorderstride 2048 ) split 128 splitvec 2 split 4096) x x.(reduceseq join mapworkgroup (join joinvec maplocal ( reduceseq (mapvec 4( (a, b). a+(abs b))) 0 ) splitvec 4 split 32768) split 32768) x Gesucht für: Nvidia GTX 480 GPU, AMD Radeon HD 7970 GPU, Intel Xeon E5530 CPU

43 Ergebnisse der Suche Effizienz der Suche Absolute performance in GB/s Absolute performance in GB/s Absolute performance in GB/s Number of evaluated expressions Number of evaluated expressions Number of evaluated expressions (a) Nvidia GPU (b) AMD GPU (c) Intel CPU Die Suche hat auf jeder Platform weniger als 1 Stunde gedauert Durchschnittliche Zeit zur Ausführung eines Kandidaten weniger als 1/2 Sekunde

44 Fazit des Beispiels Optimieren in OpenCL ist kompliziert Verständnis für die Zielarchitektur benötigt Veränderungen im Program nicht offensichtlich kernel void reduce6(global float* g_idata, global float* g_odata, unsigned int n, local volatile float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_group_id(0) * (get_local_size(0)*2) + get_local_id(0); unsigned int gridsize = WG_SIZE * get_num_groups(0); l_data[tid] = 0; while (i < n) { l_data[tid] += g_idata[i]; if (i + WG_SIZE < n) l_data[tid] += g_idata[i+wg_size]; i += gridsize; barrier(clk_local_mem_fence); kernel void reduce0(global float* g_idata, global float* g_odata, unsigned int n, local float* l_data) { unsigned int tid = get_local_id(0); unsigned int i = get_global_id(0); l_data[tid] = (i < n)? g_idata[i] : 0; barrier(clk_local_mem_fence); for (unsigned int s=1; s < get_local_size(0); s*= 2) { if ((tid % (2*s)) == 0) { l_data[tid] += l_data[tid + s]; barrier(clk_local_mem_fence); if (tid == 0) g_odata[get_group_id(0)] = l_data[0]; Nicht Optimierte Implementierung if (WG_SIZE >= 256) { if (tid < 128) { l_data[tid] += l_data[tid+128]; barrier(clk_local_mem_fence); if (WG_SIZE >= 128) { if (tid < 64) { l_data[tid] += l_data[tid+ 64]; barrier(clk_local_mem_fence); if (tid < 32) { if (WG_SIZE >= 64) { l_data[tid] += l_data[tid+32]; if (WG_SIZE >= 32) { l_data[tid] += l_data[tid+16]; if (WG_SIZE >= 16) { l_data[tid] += l_data[tid+ 8]; if (WG_SIZE >= 8) { l_data[tid] += l_data[tid+ 4]; if (WG_SIZE >= 4) { l_data[tid] += l_data[tid+ 2]; if (WG_SIZE >= 2) { l_data[tid] += l_data[tid+ 1]; if (tid == 0) g_odata[get_group_id(0)] = l_data[0]; Voll Optimierte Implementierung

45 Matrix Multiplikation C A B A x B = map(λ rowa map(λ colb dotproduct(rowa, colb), transpose(b)), A)

46 Suche für Matrix Multiplikation Phases: Algorithmic Exploration OpenCL speci c Exploration Parameter Exploration Code Generation......

47 Suchraum für Matrix Multiplikation 600 Fermi Kepler Tahiti 1500 Throughput (GFlop/s) Nur einige generierte OpenCL Programme mit sehr guter Performance

48 Performance Entwicklung für Matrix Multiplikation Selbst mit einer einfachen zufälligen Strategie kann man erwarten schnell ein Program mit guter Performance zu finden

49 Evaluation für Matrix Multiplikation Generated MAGMA cublas Nvidia GeForce GTX 480 (Fermi) Generated MAGMA cublas Nvidia GeForce GTX TITAN Black (Kepler) Throughput (Gflop/s) Generated clmagma clblas clblas Tuned Input Size 3000 AMD Radeon HD 7970 (Tahiti) Performance nahe oder sogar besser als handoptimierte MAGMA Bibliothek

50 Performance-Portabilität von Matrix Multiplikation 100 Executed on Fermi Kepler Tahiti Relative performance X X X X X X Executed with input size 0 X X 1K 2K 1K 2K 1K 2K Fermi Kepler Tahiti X X 1K 2K 1K 2K 1K 2K Fermi Kepler Tahiti The six specialized OpenCL kernels X X 1K 2K 1K 2K 1K 2K Fermi Kepler Tahiti Generierte Programmer sind spezialisiert für GPU und Eingabegröße

Verbesserung der Programmierbarkeit und Performance-Portabilität von Manycore-Prozessoren 1

Verbesserung der Programmierbarkeit und Performance-Portabilität von Manycore-Prozessoren 1 Steffen Hölldobler et. al. (Hrsg.): Ausgezeichnete Informatikdissertationen 2015, Lecture Notes in Informatics (LNI), Gesellschaft für Informatik, Bonn 2016 269 Verbesserung der Programmierbarkeit und

Mehr

> High-Level Programmierung heterogener paralleler Systeme

> High-Level Programmierung heterogener paralleler Systeme > High-Level Programmierung heterogener paralleler Systeme Projektseminar im SoSe 2012 Prof. Sergei Gorlatch, Michel Steuwer, Tim Humernbrum AG Parallele und Verteilte Systeme, Westfälische Wilhelms-Universität

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

General Purpose Computation on GPUs

General Purpose Computation on GPUs General Purpose Computation on GPUs Matthias Schneider, Robert Grimm Universität Erlangen-Nürnberg {matthias.schneider, robert.grimm}@informatik.stud.uni-erlangen.de M. Schneider, R. Grimm 1 Übersicht

Mehr

Programmierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de

Programmierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de > Programmierbeispiele und Implementierung Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de 2 > Übersicht > Matrix Vektor Multiplikation > Mandelbrotmenge / Apfelmännchen berechnen > Kantendetektion

Mehr

Compute Unified Device Architecture CUDA

Compute Unified Device Architecture CUDA Compute Unified Device Architecture 06. Februar 2012 1 / 13 Gliederung 2 / 13 : Compute Unified Device Architecture entwickelt von Nvidia Corporation spezifiziert Software- und Hardwareeigenschaften Ziel:

Mehr

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs) Fakultätsname XYZ Fachrichtung XYZ Institutsname XYZ, Professur XYZ Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs) im Rahmen des Proseminars Technische Informatik Juni

Mehr

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg CUDA Seminar Multi-Core Architectures and Programming 1 Übersicht Einleitung Architektur Programmierung 2 Einleitung Computations on GPU 2003 Probleme Hohe Kenntnisse der Grafikprogrammierung nötig Unterschiedliche

Mehr

Beispielvortrag: HPCG auf Intel Haswell-EP

Beispielvortrag: HPCG auf Intel Haswell-EP Beispielvortrag: HPCG auf Intel Haswell-EP Johannes Hofmann 1 Seminarvortrag Architekturen von Multi- und Vielkern-Prozessoren Erlangen, 19.4.2016 1 Computer Architecture, University Erlangen-Nuremberg

Mehr

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, 27.03.2014, Ingo Josopait

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, 27.03.2014, Ingo Josopait Der Goopax Compiler GPU-Programmierung in C++ AMD R9 290X: 5.6 TFLOPS (SP MulAdd) Programmierung ~10000 Threads Entwicklungsumgebungen Entwicklungsumgebungen CUDA, OpenCL Compiler: kernel GPU Maschinencode

Mehr

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr: Yilmaz, Tolga MatNr: 157317 Mesaud, Elias MatNr: 151386 1. Aufbau und Funktionsweise einer Grafikkarte 2. CPU vs. GPU 3. Software 4. Beispielprogramme Kompilierung und Vorführung 5. Wo wird Cuda heutzutage

Mehr

LEISTUNGSVERGLEICH VON FPGA, GPU UND CPU FÜR ALGORITHMEN ZUR BILDBEARBEITUNG PROSEMINAR INF-B-610

LEISTUNGSVERGLEICH VON FPGA, GPU UND CPU FÜR ALGORITHMEN ZUR BILDBEARBEITUNG PROSEMINAR INF-B-610 LEISTUNGSVERGLEICH VON FPGA, GPU UND CPU FÜR ALGORITHMEN ZUR BILDBEARBEITUNG PROSEMINAR INF-B-610 Dominik Weinrich dominik.weinrich@tu-dresden.de Dresden, 30.11.2017 Gliederung Motivation Aufbau und Hardware

Mehr

OpenCL. OpenCL. Boris Totev, Cornelius Knap

OpenCL. OpenCL. Boris Totev, Cornelius Knap OpenCL OpenCL 1 OpenCL Gliederung Entstehungsgeschichte von OpenCL Was, warum und überhaupt wieso OpenCL CUDA, OpenGL und OpenCL GPUs OpenCL Objekte Work-Units OpenCL Adressbereiche OpenCL API Codebeispiel

Mehr

PGI Accelerator Model

PGI Accelerator Model PGI Accelerator Model Philip Höhlein, Nils Werner Supervision: R. Membarth, P. Kutzer, F. Hannig Hardware-Software-Co-Design Universität Erlangen-Nürnberg Philip Höhlein, Nils Werner 1 Übersicht Motivation

Mehr

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck RST-Labor WS06/07 GPGPU General Purpose Computation On Graphics Processing Units (Grafikkarten-Programmierung) Von: Marc Blunck Ablauf Einführung GPGPU Die GPU GPU Architektur Die Programmierung Programme

Mehr

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg Einführung CUDA Friedrich-Alexander-Universität Erlangen-Nürnberg PrakParRA, 18.11.2010 Outline 1 GPGPU-Architekturen 2 CUDA Programmiermodell 3 Beispielprogramm Outlook 1 GPGPU-Architekturen 2 CUDA Programmiermodell

Mehr

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen Cilk Sprache für Parallelprogrammierung IPD Snelting, Lehrstuhl für Programmierparadigmen David Soria Parra Geschichte Geschichte Entwickelt 1994 am MIT Laboratory for Computer Science Cilk 1: Continuations

Mehr

OpenCL. Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer tim.wiersdoerfer@student.uni-siegen.

OpenCL. Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer tim.wiersdoerfer@student.uni-siegen. OpenCL Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer tim.wiersdoerfer@student.uni-siegen.de Abstract: In diesem Dokument wird ein grundlegender Einblick in das relativ

Mehr

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Institut für Betriebssysteme und Rechnerverbund TU Braunschweig 25.10., 26.10.

Mehr

Masterpraktikum Scientific Computing

Masterpraktikum Scientific Computing Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Prof. Dr. Michael Bader Technische Universität München, Germany Outline Organisatorisches Entwicklung

Mehr

Effektive Nutzung der Simulationsumgebung Anregungen für die Praxis

Effektive Nutzung der Simulationsumgebung Anregungen für die Praxis 1 2017 ANSYS, 14. Inc. Juni 2017 in June Winterthur 20, 2017 22. SCHWEIZER CADFEM ANSYS SIMULATION CONFERENCE Effektive Nutzung der Simulationsumgebung Anregungen für die Praxis Martin Mann Sales & Acount

Mehr

Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern

Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern Bachelorarbeit Moritz Lüdecke 8. Juli 2014 INSTITUT FÜR TECHNISCHE INFORMATIK - LEHRSTUHL FÜR RECHNERARCHITEKTUR UND PARALLELVERARBEITUNG

Mehr

Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation

Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation Christoph Winter Fakultät für Informatik und Mathematik Ostbayerische Technische Hochschule Regensburg 93049 Regensburg

Mehr

Multi- und Many-Core

Multi- und Many-Core Multi- und Many-Core Benjamin Warnke Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2016-12-15 Benjamin

Mehr

OpenCL Implementierung von OpenCV Funktionen

OpenCL Implementierung von OpenCV Funktionen Multi-Core Architectures and Programming OpenCL Implementierung von OpenCV Funktionen julian.mueller@e-technik.stud.uni-erlangen.de Hardware/Software Co-Design August 18, 2011 1 Table of content 1 OpenCL

Mehr

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick Christopher Schleiden Bachelor Kolloquium 15.09.2009 Einleitung Evaluation Implementierung Integration Zusammenfassung Ausblick Einleitung laperf Lineare Algebra Bibliothek für C++ Möglichkeit zur Integration

Mehr

Programmierung von Graphikkarten

Programmierung von Graphikkarten Programmierung von Graphikkarten Stefan Lang Interdisziplinäres Zentrum für Wissenschaftliches Rechnen Universität Heidelberg INF 368, Raum 532 D-69120 Heidelberg phone: 06221/54-8264 email: Stefan.Lang@iwr.uni-heidelberg.de

Mehr

Seminar GPU-Programmierung/Parallelverarbeitung

Seminar GPU-Programmierung/Parallelverarbeitung Seite iv Literaturverzeichnis 1) Bengel, G.; et al.: Masterkurs Parallele und Verteilte Systeme. Vieweg + Teubner, Wiesbaden, 2008. 2) Breshears, C.: The Art of Concurrency - A Thread Monkey's Guide to

Mehr

Grafikkarten-Architektur

Grafikkarten-Architektur > Grafikkarten-Architektur Parallele Strukturen in der GPU Name: Sebastian Albers E-Mail: s.albers@wwu.de 2 > Inhalt > CPU und GPU im Vergleich > Rendering-Pipeline > Shader > GPGPU > Nvidia Tesla-Architektur

Mehr

CUDA. (Compute Unified Device Architecture) Thomas Trost. May 31 th 2016

CUDA. (Compute Unified Device Architecture) Thomas Trost. May 31 th 2016 CUDA (Compute Unified Device Architecture) Thomas Trost May 31 th 2016 Introduction and Overview platform and API for parallel computing on GPUs by NVIDIA relatively straightforward general purpose use

Mehr

GPGPU mit NVIDIA CUDA

GPGPU mit NVIDIA CUDA 01.07.12 GPGPU mit NVIDIA CUDA General-Purpose on Formatvorlagecomputing des Graphics Processing durch Units Untertitelmasters mit KlickenCompute bearbeiten NVIDIA Unified Device Architecture Gliederung

Mehr

FPGA Systementwurf. Rosbeh Etemadi. Paderborn University. 29. Mai 2007

FPGA Systementwurf. Rosbeh Etemadi. Paderborn University. 29. Mai 2007 Paderborn Center for Parallel l Computing Paderborn University 29. Mai 2007 Übersicht 1. FPGAs 2. Entwicklungssprache VHDL 3. Matlab/Simulink 4. Entwicklungssprache Handel-C 5. Fazit Übersicht FPGAs 1.

Mehr

Grundlagen von CUDA, Sprachtypische Elemente

Grundlagen von CUDA, Sprachtypische Elemente Grundlagen von CUDA, Sprachtypische Elemente Stefan Maskanitz 03.07.2009 CUDA Grundlagen 1 Übersicht 1. Einleitung 2. Spracheigenschaften a. s, Blocks und Grids b. Speicherorganistion c. Fehlerbehandlung

Mehr

Chapel Dennis Appelt. Seminar: Sprachen für Parallelverarbeitung.

Chapel Dennis Appelt. Seminar: Sprachen für Parallelverarbeitung. Chapel Dennis Appelt Seminar: Sprachen für Parallelverarbeitung INSTITUTE FOR PROGRAM STRUCTURES AND DATA ORGANIZATION, FACULTY OF INFORMATICS KIT University of the State of Baden-Wuerttemberg and National

Mehr

GPU-Programmierung: OpenCL

GPU-Programmierung: OpenCL Seminar: Multicore Programmierung Sommerstemester 2009 04.06.2009 Inhaltsverzeichnis 1 GPU-Programmierung von Grafikkarten von GPU-Computing 2 Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

Mehr

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006 12. Juni 2006 Bibliothek für Lineare Algebra GPGPU-Programming: Low-Level High-Level Bibliothek Bibliothek für Lineare Algebra Gliederung 1 Bibliothek für Lineare Algebra 2 Skalare Bibliothek für Lineare

Mehr

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke, 2013-05-08

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke, 2013-05-08 Parallele Algorithmen mit OpenCL Universität Osnabrück, Henning Wenke, 2013-05-08 Aufräumen Ressourcen in umgekehrter Abhängigkeitsreihenfolge freigeben Objekte haben Reference-Count (RC), initial 1 clrelease

Mehr

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12 12 GPGPU-Programming Constantin Timm Informatik 12 TU Dortmund 2012/04/09 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation

Mehr

High-level software transformations

High-level software transformations 12 Peter Marwedel TU Dortmund Informatik 12 Germany Graphics: Alexandra Nolte, Gesine Marwedel, 2003 High-level software transformations Impact of memory allocation on efficiency Array p[j][k] Row major

Mehr

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff Parallel Computing Einsatzmöglichkeiten und Grenzen Prof. Dr. Nikolaus Wulff Vorüberlegungen Wann ist paralleles Rechnen sinnvoll? Wenn die Performance/Geschwindigkeit steigt. Wenn sich größere Probleme

Mehr

TecNews: Sandy Bridge

TecNews: Sandy Bridge TecNews: Sandy Bridge Werner Fischer, Technology Specialist Thomas-Krenn.AG Thomas Krenn Herbstworkshop & Roadshow 2011 23.09. in Freyung 06.10. in Wien (A) 10.10. in Frankfurt 11.10. in Düsseldorf 12.10.

Mehr

technische universität dortmund Lehrstuhl für Hochfrequenztechnik Übertragungssysteme

technische universität dortmund Lehrstuhl für Hochfrequenztechnik Übertragungssysteme Lehrstuhl für Hochfrequenztechnik GPU-beschleunigte numerische Simulation faseroptischer Übertragungssysteme, Marius Helf, Peter Krummrich Übersicht Motivation Split-Step p Fourier Methode Ansätze für

Mehr

Automatische Parallelisierung

Automatische Parallelisierung MPI und OpenMP in HPC Anwendungen findet man immer häufiger auch den gemeinsamen Einsatz von MPI und OpenMP: OpenMP wird zur thread-parallelen Implementierung des Codes auf einem einzelnen Rechenknoten

Mehr

Die beste Infrastruktur ist nur so schnell, wie der Code der darauf läuft. Fallbeispiel Wettervorhersage

Die beste Infrastruktur ist nur so schnell, wie der Code der darauf läuft. Fallbeispiel Wettervorhersage Die beste Infrastruktur ist nur so schnell, wie der Code der darauf läuft Fallbeispiel Wettervorhersage VPE Swiss Workshop, HSR 24. Januar 2013 David Müller, Tobias Gysi Vision trifft Realität. Supercomputing

Mehr

GPUs. Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg

GPUs. Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg GPUs Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg Vorgelegt von: Johannes Coym E-Mail-Adresse: 4coym@informatik.uni-hamburg.de

Mehr

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg GPU-Versuch andreas.schaefer@cs.fau.de Friedrich-Alexander-Universität Erlangen-Nürnberg Praktikum Parallele Rechnerarchitekturen SS2014 Outline 1 Einführung 2 Outlook 1 Einführung 2 Eine kurze Geschichte

Mehr

Kick-Off Paralleles Programmieren

Kick-Off Paralleles Programmieren Fakultät Informatik Institut für Software- und Multimediatechnik, Lehrstuhl für Softwaretechnologie Kick-Off Paralleles Programmieren Thomas Kühn Motivation Moore's Law The complexity for minimum component

Mehr

Multicore Herausforderungen an das Software-Engineering. Prof. Dr.-Ing. Michael Uelschen Hochschule Osnabrück 15.09.2010

Multicore Herausforderungen an das Software-Engineering. Prof. Dr.-Ing. Michael Uelschen Hochschule Osnabrück 15.09.2010 Multicore Herausforderungen an das Software-Engineering Prof. Dr.-Ing. Michael Uelschen Hochschule Osnabrück 15.09.2010 Inhalt _ Motivation _ Herausforderung 1: Hardware _ Herausforderung 2: Software-Partitionierung

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 OpenMP-Programmierung Teil III Multikern-Praktikum Wintersemester 06-07 Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung

Mehr

Exascale Computing. = Exascale braucht Manycore-Hardware...und was für Software??? 46/58

Exascale Computing. = Exascale braucht Manycore-Hardware...und was für Software??? 46/58 Exascale Computing Die FLOP/s-Tabelle: Name Faktor erreicht heute Giga 10 9 1976 CPU-Kern Tera 10 12 1997 Graphikkarte (GPU) Peta 10 15 2009 Supercomputer Exa 10 18 2020(?) Der gegenwärtig schnellste Rechner

Mehr

Outline. Cell Broadband Engine. Application Areas. The Cell

Outline. Cell Broadband Engine. Application Areas. The Cell Outline 21.March 2006 Benjamin Keck Why Cell?!? Application Areas Architectural Overview Programming Model Programming on the PPE C/C++ Intrinsics 1 2 The Cell Supercomputer on a chip Multi-Core Microprocessor

Mehr

2 Rechnerarchitekturen

2 Rechnerarchitekturen 2 Rechnerarchitekturen Rechnerarchitekturen Flynns Klassifikation Flynnsche Klassifikation (Flynn sche Taxonomie) 1966 entwickelt, einfaches Modell, bis heute genutzt Beschränkung der Beschreibung auf

Mehr

Modellierung und Simulation optischer Strahlführungen. Diplomarbeit Timon Bätz

Modellierung und Simulation optischer Strahlführungen. Diplomarbeit Timon Bätz Modellierung und Simulation optischer Strahlführungen Diplomarbeit Timon Bätz Übersicht Ziele Physikalische Hintergründe Architektur und Implementierung Ergebnisse Ausblick Demo 2 Ziele Entwicklung eines

Mehr

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler Friedrich-Alexander-Universität Erlangen-Nürnberg 05.10.2010 Outline 1 GPGPU-Architekturen 2 CUDA Programmiermodell 3 Beispielprogramm 4 Organiosatorisches Outlook 1 GPGPU-Architekturen 2 CUDA Programmiermodell

Mehr

Klausur zu High Performance Computing 09. Juli 2011, SS 2011

Klausur zu High Performance Computing 09. Juli 2011, SS 2011 Alexander Vondrous, Britta Nestler, Fakultät IWI, Hochschule Karlsruhe Klausur zu High Performance Computing 09. Juli 2011, SS 2011 Es sind keine Hilfsmittel zugelassen. Bearbeitungszeit: 90 Minuten Aufgabe

Mehr

Cell Broadband Engine & CellSs: ein Programmiermodel für den Cell Prozessor

Cell Broadband Engine & CellSs: ein Programmiermodel für den Cell Prozessor Cell Broadband Engine & CellSs: ein Programmiermodel für den Cell Prozessor Hardware-Software-Co-Design Universität Erlangen-Nürnberg mark.duchon@mb.stud.uni-erlangen.de Ziegler_Matthias@web.de andreas.fall@googlemail.com

Mehr

Cell Broadband Engine

Cell Broadband Engine Cell Broadband Engine 21.March 2006 Benjamin Keck Outline Why Cell?!? Application Areas Architectural Overview SPU Programming Model Programming on the PPE C/C++ Intrinsics The Cell Supercomputer on a

Mehr

FPGA Beschleuniger. Your Name. Armin Jeyrani Mamegani Your Organization (Line #2)

FPGA Beschleuniger. Your Name. Armin Jeyrani Mamegani Your Organization (Line #2) FPGA Beschleuniger 15.12.2008 Armin Jeyrani Mamegani Your Name HAW Hamburg Your Title Department Your Organization Informatik (Line #1) Your Organization (Line #2) Einleitung Wiederholung aus AW1: Handy

Mehr

Machine Learning Hardware

Machine Learning Hardware Machine Learning Hardware Dominik Scherer 06.11.2017 Seminar Neuste Trends in Big Data Analytics Betreuer: Dr. Julian Kunkel Motivation Maschinelles Lernen in vielen Bereichen angewendet, z.b. Spracherkennung

Mehr

Neue Dual-CPU Server mit Intel Xeon Scalable Performance (Codename Purley/Skylake-SP)

Neue Dual-CPU Server mit Intel Xeon Scalable Performance (Codename Purley/Skylake-SP) Neue Dual-CPU Server mit Intel Xeon Scalable Performance (Codename Purley/Skylake-SP) @wefinet Werner Fischer, Thomas-Krenn.AG Webinar, 17. Oktober 2017 Intel Xeon Scalable Performance _ Das ist NEU: Neue

Mehr

Effiziente GPU-Algorithmen

Effiziente GPU-Algorithmen Effiziente GPU-Algorithmen Martin Vielsmaier 24. November 2011 Inhalt Warum GPGPU? Geschichte SIMD OpenCL Begriffe Speichermodell OpenCL C Algorithmen Matrixmultiplikation Sortieren Variable-length encoding

Mehr

Prozessor- und Rechnerarchitekturen (Master)

Prozessor- und Rechnerarchitekturen (Master) Prozessor- und Rechnerarchitekturen (Master) Themen am 28.06.17: Semesterrückblick, Terminplanung Ihrer Vorträge ProRecArc17_V10 Ulrich Schaarschmidt HS Düsseldorf, SS 2017 V1 (5.4.): Termine + mögliche

Mehr

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14 C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung

Mehr

PRIP-Preis. Effizientes Object Tracking durch Programmierung von Mehrkernprozessoren und Grafikkarten

PRIP-Preis. Effizientes Object Tracking durch Programmierung von Mehrkernprozessoren und Grafikkarten Masterarbeit @ PRIP-Preis Effizientes Object Tracking durch Programmierung von Mehrkernprozessoren und Grafikkarten Michael Rauter Pattern Recognition and Image Processing Group Institute of Computer Aided

Mehr

Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner

Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Dipl.-Inform. Korbinian Molitorisz M. Sc. Luis Manuel Carril Rodriguez KIT Universität des Landes Baden-Württemberg

Mehr

GPGPUs am Jülich Supercomputing Centre

GPGPUs am Jülich Supercomputing Centre GPGPUs am Jülich Supercomputing Centre 20. April 2012 Jochen Kreutz Jülich Supercomputing Centre (JSC) Teil des Forschungszentrums Jülich und des Institute for Advanced Simulation (IAS) betreibt Supercomputer

Mehr

Grundlagen der Informatik 6. Arrays I

Grundlagen der Informatik 6. Arrays I 6. Arrays I Motivation Array (konstante Länge) Speicherbereich Eingabe von Arrays Grundlagen der Informatik (Alex Rempel) 1 Motivation Beispiel: Bildschirmpixel zeichnen Auflösung 800x600, d.h. insgesamt

Mehr

Informatik II Übung, Woche 10

Informatik II Übung, Woche 10 Giuseppe Accaputo 10. März, 2016 Plan für heute 1. Typumwandlung (Typecasts) 2. Ordnerstruktur für Übungen 3. Vorbesprechung Übung 3 4. Nachbesprechung Übung 2 (inkl. Live Programmierung) Informatik II

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 7: Matrizen, Vektoren und dynamische Speicherverwaltung Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg

Mehr

Ferienakademie Erik Muttersbach

Ferienakademie Erik Muttersbach Ferienakademie 2009 - Erik Muttersbach 1. Einführung 2. Kernels, Threads, Blocks 3. CUDA Execution Model 4. Software Stack 5. Die CUDA Runtime API 6. Speichertypen/ Zugriff 7. Profiling und Optimierung

Mehr

Seminarvortrag: Direktivenbasierte Programmierung von Beschleunigern mit OpenMP 4.5 und OpenACC 2.5 im Vergleich

Seminarvortrag: Direktivenbasierte Programmierung von Beschleunigern mit OpenMP 4.5 und OpenACC 2.5 im Vergleich Seminarvortrag: Direktivenbasierte Programmierung von Beschleunigern mit Direktivenbasierte Programmierung von Beschleunigern mit Agenda Einführung / Motivation Überblick zu OpenMP und OpenACC Asynchronität

Mehr

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung CUDA und Python Christian Wilms Integriertes Seminar Projekt Bildverarbeitung Universität Hamburg WiSe 2013/14 12. Dezember 2013 Christian CUDA und Python 1 Gliederung 1 Motivation 2 (GP)GPU 3 CUDA 4 Zusammenfassung

Mehr

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke, Parallele Algorithmen mit OpenCL Universität Osnabrück, Henning Wenke, 2013-04-17 Kapitel I OpenCL Einführung Allgemeines Open Compute Language: API für einheitliche parallele Programmierung heterogener

Mehr

OpenMP. Viktor Styrbul

OpenMP. Viktor Styrbul OpenMP Viktor Styrbul Inhaltsverzeichnis Was ist OpenMP Warum Parallelisierung Geschichte Merkmale von OpenMP OpenMP-fähige Compiler OpenMP Ausführungsmodell Kernelemente von OpenMP Zusammenfassung Was

Mehr

IDS Lizenzierung für IDS und HDR. Primärserver IDS Lizenz HDR Lizenz

IDS Lizenzierung für IDS und HDR. Primärserver IDS Lizenz HDR Lizenz IDS Lizenzierung für IDS und HDR Primärserver IDS Lizenz HDR Lizenz Workgroup V7.3x oder V9.x Required Not Available Primärserver Express V10.0 Workgroup V10.0 Enterprise V7.3x, V9.x or V10.0 IDS Lizenz

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Architekturen von Multi- und Manycore-Prozessoren

Architekturen von Multi- und Manycore-Prozessoren Architekturen von Multi- und Manycore-Prozessoren Johannes Hofmann Einführungsveranstaltung, 12.04.2016 Inhalt Es gibt zwei Varianten zum absolvieren des Seminars: Evaluation eines Benchmarks aus der Mantevo-Suite

Mehr

2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"

2. Der ParaNut-Prozessor Parallel and more than just another CPU core 2. Der ParaNut-Prozessor "Parallel and more than just another CPU core" Neuer, konfigurierbarer Prozessor Parallelität auf Daten- (SIMD) und Thread-Ebene Hohe Skalierbarkeit mit einer Architektur neues

Mehr

ThinkStation P-Series Anwendungsbreiche

ThinkStation P-Series Anwendungsbreiche 39 ThinkStation P-Series Anwendungsbreiche Thinkstation Vertikale Lösungen Öl & Gas Produktentwicklung Media & Entertainment Finanz, Wertpapierhandel Medizin & Forschung 40 2014 LENOVO INTERNAL. ALL RIGHTS

Mehr

Coupling GIS and hydraulics using the example of the Dornbirnerach

Coupling GIS and hydraulics using the example of the Dornbirnerach Coupling GIS and hydraulics using the example of the Dornbirnerach Michaela Jud Department for Geoinformatics Technical University of Munich (TUM), Germany San Diego, 13 th of July 2011 Storm event august

Mehr

Datenflussrechnen mit FPGAs für die biomedizinische Bildverarbeitung

Datenflussrechnen mit FPGAs für die biomedizinische Bildverarbeitung Datenflussrechnen mit FPGAs für die biomedizinische Bildverarbeitung Frederik Grüll, Udo Kebschull Infrastruktur und Rechnersysteme in der Informationsverarbeitung Goethe-Universität Frankfurt ZKI-Frühjahrstagung

Mehr

Digitale Farbbildverarbeitung mit der GPU

Digitale Farbbildverarbeitung mit der GPU 4. Kollaboration Forum NEMO-SpectroNet Digitale Farbbildverarbeitung mit der GPU Dipl.-Ing. (FH) Peter Keppler Vertriebsleiter Systemlösungen PORTRAIT STEMMER IMAGING Bildverarbeitung mit Mehrwert. STEMMER

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 6 Cache-freundliche Programmierung (1) Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Quadratische Matrizen Musterlösung

Mehr

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Programmierung Wintersemester 2016/17 Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Gültigkeitsbereiche Inhalt Lokale und globale

Mehr

Software Engineering für moderne, parallele Plattformen

Software Engineering für moderne, parallele Plattformen Software Engineering für moderne, parallele Plattformen b. Ergänzungen zur Performanz Dr. Victor Pankratius Dr. Victor Pankratius IPD Lehrstuhl für Programmiersysteme-Tichy KIT die Kooperation von Forschungszentrum

Mehr

Multicore-Architekturen

Multicore-Architekturen Universität Erlangen- Nürnberg Technische Universität München Universität Stuttgart Multicore-Architekturen Vortrag im Rahmen der Ferienakademie 2009 Kurs 1: Programmierkonzepte für Multi-Core Rechner

Mehr

Thema: Hardware-Shader

Thema: Hardware-Shader Seminar Grafikprogrammierung Thema: Hardware-Shader Christian Bauer 03.07.08 Überblick Entwicklung Die Shader im Detail Programmierung GPGPU Zusammenfassung & Ausblick 1/19 Entwicklung (1) Früher: Berechnung

Mehr

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Dipl. Inf. Thorsten Blaß Programming Systems Group Martensstraße 3 91058 Erlangen Ausblick Motivation Einführung Java/OpenMP (JaMP) JaMP Sprache

Mehr

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker Diplomarbeit 5HDO7LPH6SHFLDO (IIHFWV Neue Möglichkeiten durch programmierbare Shader Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker Betreut von: Paul Grimm, Ralf Dörner Beginn: 01.04.02 Abgabe: 30.09.02

Mehr

ABSCHLUSSARBEIT FAKULTÄT INFORMATIK UND WIRTSCHAFTSINFORMATIK SEMI-GLOBAL MATCHING IN O PENCL

ABSCHLUSSARBEIT FAKULTÄT INFORMATIK UND WIRTSCHAFTSINFORMATIK SEMI-GLOBAL MATCHING IN O PENCL ABSCHLUSSARBEIT FAKULTÄT INFORMATIK UND WI RTSC HAFT SINFOR MATIK SEMI-GLOBAL MATCHING IN OPENCL ERKLÄRUNG Kurzfassung Abstract Inhaltsverzeichnis 1 EINFÜHRUNG... 1 2 THEORETISCHE GRUNDLAGEN... 3 3 IMPLEMENTIERUNG...

Mehr

Programmierung von Many-Cores. Seminar: Software Engineering für Exascale Computing

Programmierung von Many-Cores. Seminar: Software Engineering für Exascale Computing Programmierung von Many-Cores Seminar: Software Engineering für Exascale Computing Patrizia Peller April 18, 2013 Programmierung von Many-Cores Hardware-Architekturen Anforderungen an Programmiersprachen

Mehr

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5 Informatik 1 (251-0832-00) D-MAVT F2010 Schleifen, Felder Nachbesprechung Blatt 3 Aufgabe 1 ASCII... A > a Vorsicht: Lösen Sie sich von intuitiven Schlussfolgerungen. A ist nicht grösser als a, denn in

Mehr

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1 CUDA Jürgen Pröll Multi-Core Architectures and Programming Jürgen Pröll 1 Image-Resize: sequentiell resize() mit bilinearer Interpolation leicht zu parallelisieren, da einzelne Punkte voneinander unabhängig

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Lokale und globale Variablen Namensräume Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund

Mehr

ANALYSE DER LATENZEN IM KOMMUNIKATIONSSTACK EINES PCIE-GEKOPPELTEN FPGA-BESCHLEUNIGERS. Sascha Kath

ANALYSE DER LATENZEN IM KOMMUNIKATIONSSTACK EINES PCIE-GEKOPPELTEN FPGA-BESCHLEUNIGERS. Sascha Kath ANALYSE DER LATENZEN IM KOMMUNIKATIONSSTACK EINES PCIE-GEKOPPELTEN FPGA-BESCHLEUNIGERS Sascha Kath Dresden, Gliederung 1. Motivation & Zielstellung 2. Systembeschreibung 3. Implementierung und Messungen

Mehr

Industrial USB3.0 Miniature Camera with color and monochrome sensor

Industrial USB3.0 Miniature Camera with color and monochrome sensor Welcome to the presentation Industrial USB3.0 Miniature Camera with color and monochrome sensor & Data rates of modern image sensors S. 1/12 Vortrag_Spectronet_USB3.0_Datenverarbeitung_ENGLISCH_Vorlage_für_pdf_v1_MH20032014

Mehr

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic THE GO PROGRAMMING LANGUAGE Part 1: Michael Karnutsch & Marko Sulejic Gliederung Geschichte / Motivation Compiler Formatierung, Semikolons Variablen, eigene Typen Kontrollstrukturen Funktionen, Methoden

Mehr

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, 13.00-14.45 Uhr Bearbeitungszeit: 105 Minuten Schalten Sie ihr Mobiltelefon aus. Bei der Klausur ist als einziges

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 5 Software Engineering für moderne, parallele Plattformen b. Ergänzungen zur Performanz Dr. Victor Pankratius Agenda Das Roofline Model [Williams

Mehr

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code

Mehr