College 10: OpenCL (1)

Maat: px
Weergave met pagina beginnen:

Download "College 10: OpenCL (1)"

Transcriptie

1 Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 College 10: OpenCL (1) Welkom!

2 Previously in Concurrency

3 Concurrency College 8 Patronen 3 SIMD System.Numerics.Vectors namespace System.Numerics { public struct Vector3 : IEquatable<Vector3>, IFormattable { public float X; public float Y; public float Z; public Vector3(float value); public Vector3(Vector2 value, float z); public Vector3(float x, float y, float z); public static Vector3 operator -(Vector3 value); public static Vector3 operator -(Vector3 left, Vector3 right); public static bool operator!=(vector3 left, Vector3 right); public static Vector3 operator *(float left, Vector3 right); public static Vector3 operator *(Vector3 left, float right); public static Vector3 operator *(Vector3 left, Vector3 right); public static Vector3 operator /(Vector3 value1, float value2); public static Vector3 operator /(Vector3 left, Vector3 right); public static Vector3 operator +(Vector3 left, Vector3 right); public static bool operator ==(Vector3 left, Vector3 right);

4 Concurrency College 8 Patronen 4 SIMD System.Numerics.Vectors Voorbeeld: C# code: Vector3 D = Vector3.Normalize( T - P ); Assembler: vsubps xmm0,xmm1,xmm6 ; subtract vmovaps xmm1,xmm0 vdpps xmm1,xmm1,xmm0,0f1h ; dot vcvtss2sd xmm1,xmm1,xmm1 ; float to double vsqrtsd xmm1,xmm0,xmm1 ; square root vcvtsd2ss xmm1,xmm1,xmm1 ; double to float vmovupd xmmword ptr [rsp+40h],xmm0 vmovss xmm0,dword ptr [7FE90EEA518h] vdivss xmm0,xmm0,xmm1 ; division...

5 Concurrency College 8 Patronen 5 SIMD Klaar? Nee. Vector3 D = Vector3.Normalize( T - P ); Vector3 A = T P // 75% float B = dot( A, A ) // 75% Vector3 C = { B, B, B } // 75% Vector3 D = A / C // 75%

6 Concurrency College 8 Patronen 6 SIMD Scalar Flow Vector3 D = Vector3.Normalize( T - P ); Wat gebeurt hier nu eigenlijk echt? Vector3 d = T P; float dot = d.x * d.x + d.y * d.y + d.z * d.z; float length = sqrt( dot ); d /= length; D = D;

7 Concurrency College 8 Patronen 7 SIMD Scalar Flow Vector3 D = Vector3.Normalize( T - P ); Wat gebeurt hier nu eigenlijk echt? float dx = T.x P.x; float dy = T.y P.y; float dz = T.z P.z; float dot = d.x * d.x; float v1 = d.y * d.y; float v2 = d.z * d.z; dot += v1; dot += v2; float length = sqrt( dot ); D.x = dx / length; D.y = dy / length; D.z = dz / length; Scalar flow: Het programma, teruggebracht tot de kleinste elementen, waarbij elke berekening een of twee operanden transformeert in een resultaat.

8 Concurrency College 8 Patronen 8 SIMD Scalar Flow Vector3 D = Vector3.Normalize( T - P ); Vectorizatie: Optimaal normaliseren met SIMD: input is 4x T, 4x P opgedeeld in componenten: Tx4, Ty4, Tz4 en Px4, Py4, Pz4 output is 4x D: Dx4, Dy4, Dz4 float dx = T.x P.x; float dy = T.y P.y; float dz = T.z P.z; float dot = d.x * d.x; float v1 = d.y * d.y; float v2 = d.z * d.z; dot += v1; dot += v2; float length = sqrt( dot ); D.x = dx / length; D.y = dy / length; D.z = dz / length; float4 dx4 = sub4( Tx4, Px4 ); float4 dy4 = sub4( Ty4, Py4 ); float4 dz4 = sub4( Tz4, Pz4 ); float4 dot4 = mul4( dx4, dx4 ); float4 v1 = mul4( dy4, dy4 ); float4 v2 = mul4( dz4, dz4 ); dot4 = add4( dot4, v1 ); dot4 = add4( dot4, v2 ); float4 length4 = sqrt4( dot4 ); Dx4 = div4( dx4 / length4 ); Dy4 = div4( dy4 / length4 ); Dz4 = div4( dz4 / length4 );

9 Concurrency College 8 Patronen 9 SIMD SIMD Data class Particle { Vector3 position; Vector3 velocity; float mass; } Particle p[1024]; Optimaal normaliseren met SIMD: input is 4x T, 4x P opgedeeld in componenten: Tx4, Ty4, Tz4 en Px4, Py4, Pz4 output is 4x D: Dx4, Dy4, Dz4 = AoS Array of Structures Structure of Arrays SoA float px[1024]; float py[1024]; float pz[1024]; float vx[1024]; float vy[1024]; float vz[1024]; float mass[1024]; Vector4 px4[256]; Vector4 py4[256]; Vector4 pz4[256]; Vector4 vx4[256]; Vector4 vy4[256]; Vector4 vz4[256]; Vector4 mass4[256];

10 Concurrency College 8 Patronen 10 SIMD Vectorization Digest: Vectorizatie begint met het identificeren van een scalar flow. Uitgevoerd met vector artithmetic voeren we 4 onafhankelijke, identieke flows in parallel uit. De data moet passend zijn voor de vector flow: waar we eerst pos.x gebruiken, gebruiken we nu pos.x4 (en dus niet pos.xyzw!), waar we eerst de constante PI gebruiken, gebruiken we nu { PI, PI, PI, PI }. We noemen deze data layout struct of arrays. Theoretische winst is 4x. Maar: Er is bijna altijd sprake van enige overhead om data in het juiste formaat te krijgen. De C# JIT compiler is niet optimaal.

11 Concurrency College 8 Patronen 11 SIMD SIMD en Control Flow Wat doen we wanneer niet alle lanes hetzelfde willen?? A B

12 Concurrency College 8 Patronen 12 SIMD

13 Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot

14 Concurrency College 10 OpenCL (1) 14 Introductie Heterogene Systemen Een modern system heeft naast 1 (of 2) CPUs een grafische co-processor: de GPU.

15 Concurrency College 10 OpenCL (1) 15 Introductie AMD: RX Vega NVidia: GTX1080Ti 709 Intel: i9-7980xe 1899 Xeon Phi 7120P GB/s 13.7 TFLOPS 320 GB/s 11.3 TFLOPS 50 GB/s 1.1 TFLOPS 352 GB/s ~6 TFLOPS

16 Concurrency College 10 OpenCL (1) 16 Introductie Heterogene Systemen Een modern system heeft naast 1 (of 2) CPUs een grafische co-processor: de GPU. GPU: veel rekenkracht: >10 Tflops (i9: ~1 Tflops) veel bandbreedte: 512GB/s (i9: 50GB/s)

17 Concurrency College 10 OpenCL (1) 17 Introductie GPU Performance Rekenkracht: Beperkt executiemodel 32-wide SIMT Bandbreedte: Streaming executiemodel Expliciete geheugenarchitectuur

18 Concurrency College 10 OpenCL (1) 18 Introductie Beperkt Executiemodel Geen branch prediction Een taak tegelijk Geen context switching Beperkte super-scalar pipeline Geen out-of-order execution En: Lage kloksnelheid (~1Ghz)

19 Concurrency College 10 OpenCL (1) 19 Introductie GPU: Massively Parallel Een GPU bestaat uit: * 24 Shading Multiprocessors Per SM: 128 CUDA cores (4 groepen van 32) Totaal: 3072 CUDA cores. Eén SM kan maximaal 2048 threads uitvoeren: 16 per CUDA core. Het mechanisme wat hier voor gebruikt wordt lijkt op hyperthreading. Het maximale aantal threads is dus * Titan X / Maxwell architectuur

20 Concurrency College 10 OpenCL (1) 20 Introductie Beperkt Executiemodel Een GPU groepeert de threads in warps van 32 threads, en voert deze uit met SIMT: Single Instruction, Multiple Thread Een GPU is dus eigenlijk een 32-wide vector machine.

21 Concurrency College 10 OpenCL (1) 21 Introductie GPGPU Samenvatting: Tienduizenden threads In groepen van 32 Een GPU is ongeschikt voor taak-parallellisme. Een GPU is zeer geschikt voor data parallellisme, maar: alleen wanneer de parallelle taken een identieke flow hebben.

22 Concurrency College 10 OpenCL (1) 22 Introductie GPGPU CPU GPU

23 Concurrency College 10 OpenCL (1) 23 If you were plowing a field, which would you rather use? Two strong oxen, or 1024 chickens? - Seymour Cray

24 Concurrency College 10 OpenCL (1) 24 Introductie Heterogene Systemen In een heterogeen systeem kan een applicatie zowel de CPU als de GPU benutten. Doel: data-parallelle taken uitvoeren op de GPU; taak-parallel werk en serieel werk op de CPU. De GPU is dus géén vervanging voor de CPU.

25 Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot

26 Concurrency College 10 OpenCL (1) 26 OpenCL OpenCL Standaard Framework voor het ontwikkelen van software die uitgevoerd kan worden op heterogene platformen, bestaande uit CPUs, GPUs, DSPs, FPGAs en andere processoren. Computing System Compute Devices Compute Units Processing Elements OpenCL Memory Hierarchy: Global memory Read-only memory Local memory Per-element private memory CPU Cores SIMD Lanes GPU SMs CUDA cores

27 Concurrency College 10 OpenCL (1) 27 OpenCL OpenCL Standaard Het OpenCL executiemodel is fundamenteel parallel, en gaat uit van regular parallelism: meerdere processing elements voeren dezelfde code uit: een kernel.

28 Concurrency College 10 OpenCL (1) 28 OpenCL Kernel #define C(p) min(1.,sqrt(10.*abs(length(p-.5)-.4))) #define D(p,o) ((d=length(p-o)*5.)<=.6? d:1.) void mainimage( out vec4 O, in vec2 pos ) { vec2 res = iresolution.xy; vec2 C = vec2( 0.5, 0.5 ); vec2 d = pos / res - C; if (length( d ) <.2) O.xyz = vec3( 1, 0, 0 ); else O.xyz = vec3( 0, 0, 0 ); }

29 Concurrency College 10 OpenCL (1) 29 OpenCL Kernel bool test( out vec3 N, in vec3 D, in vec3 s, in float r ) { float A = dot( D, D ), B = dot( D, s )*(-2.0); float C = dot( s, s ) - r*r, det = B*B - 4.0*A*C; if (det < 0.0 ) return false; float t = (-B+sqrt(det)) / (2.0*A); N = normalize( D*t - s ); return true; } void mainimage( out vec4 color, in vec2 pos ) { float Y = pos.y / iresolution.y; vec3 N, Sky = vec3( 0.45, 0.75, 1.0 )*Y*0.4; vec3 V = normalize( vec3( (pos.xy - iresolution.xy*0.5) / iresolution.xx, 1.0 )); color = vec4(sky,1.0); if (!test( N, V, vec4(0,0,5), 1.0 )) return; vec3 H = normalize( V - reflect(v,n)), L = normalize( vec3(1.0,1.0,1.0)); float dotnl = max(dot(n,l),0.), dothl = max(dot(h,l),0.), spec = pow(dothl,32.); color = vec4(vec3(1,0.5,0.5)*dotnl*0.9 + vec3(1,1,1)*spec*0.9 + Sky,1.); }

30 Concurrency College 10 OpenCL (1) 30 OpenCL Kernel Shaders op Shadertoy: korte programma s die uitgevoerd worden voor elke pixel van een bitmap. Regular parallelism / Map Geen synchronisatie tussen threads. Uitvoer is 1 pixel, op een vaste locatie. pos pos pos pos pos pos pos pos K K K K K K K K Executie op GPU hardware: Elke pixel van de bitmap is een thread. Groepering van threads in warps en de verdeling over SMs wordt overgelaten aan WebGL / de driver. Eventuele input data voor een kernel wordt aangeboden in de vorm van textures. color color color color color color color color

31 Concurrency College 10 OpenCL (1) 31 OpenCL Kernel Kernels in OpenCL: korte programma s die uitgevoerd worden voor elke taak in een lijst. Regular parallelism / Map Synchronisatie tussen threads is mogelijk. In- en uitvoer kan complex zijn. in in in in in in in in K K K K K K K K Executie op GPU hardware: Elke taak in de lijst is een thread. Groepering van threads in warps en de verdeling over SMs kan expliciet gespecificeerd worden. Input- en output data in de vorm van textures en/of generieke buffers. Expliciete controle over de memory hierarchy. out out out out out out out out

32 Concurrency College 10 OpenCL (1) 32 OpenCL OpenCL Specificatie Gebaseerd op C99 Extensies: address space qualifiers work-items workgroups vector types synchronizatie Ingebouwde functies: image manipulation work item manipulation math functies Beperkingen: geen functiepointers geen recursie kernel void SAXPY( global float* x, global float* y, float a, write_only image2d_t image ) { int i = get_global_id( 0 ); y[i] += a * cos( x[i] ); y[i] += a * native_cos( x[i] ); float3 tmp = (float3)(a, a, a ); int2 pos = (int2)(i,0); write_imagef( image, pos, tmp ); tmp = native_cos( tmp ); y[i] += tmp.x; y[i] += tmp.y; y[i] += tmp.z; }

33 Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot

34 Concurrency College 10 OpenCL (1) 34 OpenCL / C# OpenTK / Cloo OpenCL kan in C# gebruikt worden via de Cloo library: using Cloo; Om een OpenCL kernel te kunnen gebruiken hebben we nodig: een compute platform een OpenCL context een OpenCL command queue een OpenCL program de kernel

35 Concurrency College 10 OpenCL (1) 35 OpenCL / C# Devices & Vendors: Compute Platform Het Compute Platform is de interface naar de vendor-specific implementatie van OpenCL. In een systeem met een NVidia GPU zijn in principe twee OpenCL platforms aanwezig: 1. De NVidia OpenCL implementatie; 2. De Intel OpenCL implementatie (voor de CPU). Platform ComputePlatform platform = ComputePlatform.Platforms[0]; Console.Write( platform.name ); // NVIDIA CUDA Console.Write( platform.profile ); // FULL PROFILE

36 Concurrency College 10 OpenCL (1) 36 OpenCL / C# OpenCL Context In de context wordt de state van de OpenCL API bijgehouden. ComputeContext context = new ComputeContext( ComputeDeviceTypes.Gpu, new ComputeContextPropertyList( platform ), null, IntPtr.Zero ); Platform Context

37 Concurrency College 10 OpenCL (1) 37 OpenCL / C# Program Een OpenCL program is een collectie kernels. Ook wanneer we maar één kernel hebben wordt deze ondergebracht in een program. var streamreader = new StreamReader( "../../program.cl" ); string clsource = streamreader.readtoend(); streamreader.close(); // create program with opencl source ComputeProgram program = new ComputeProgram( context, clsource ); Compileren van OpenCL code: program.build( null, null, null, IntPtr.Zero ); Platform Context Program

38 Concurrency College 10 OpenCL (1) 38 OpenCL / C# Kernel We kunnen nu de kernel opvragen: ComputeKernel kernel = program.createkernel( "device_function" ); Platform Context Program Kernel

39 Concurrency College 10 OpenCL (1) 39 OpenCL / C# Kernel Arguments Stel dat we de volgende kernel willen uitvoeren: kernel void device_function( global float* x, float a ) { int i = get_global_id( 0 ); x[i] *= a; } Deze kernel heeft twee arguments. We geven de data door vanuit C# met: kernel.setmemoryargument( 0, buffer ); kernel.setvalueargument( 1, f ); Platform Context Program Kernel Arguments

40 Concurrency College 10 OpenCL (1) 40 OpenCL / C# Buffers In het voorbeeld is een van de argumenten een array van floats. kernel void device_function( global float* x, float a ) { int i = get_global_id( 0 ); x[i] *= a; } Platform Context Program Kernel Arguments Buffers In C#: float [] data = new float[65536]; We maken hier een buffer van waarmee OpenCL kan werken: var flags = ComputeMemoryFlags.ReadWrite ComputeMemoryFlags.UseHostPointer; buffer = new ComputeBuffer<float>( context, flags, data );

41 Concurrency College 10 OpenCL (1) 41 OpenCL / C# Queue Alles staat nu klaar om uitgevoerd te worden. Kernel execution gaat via een job queue: ComputeCommandQueue queue = new ComputeCommandQueue( context, context.devices[0], 0 ); queue.execute( kernel, null, new long [] { 512 * 512 }, null, null ); queue.finish(); Als laatste stap lezen we de GPU buffer terug naar de C# array. queue.readfrombuffer( buffer, ref data, true, null ); Platform Context Program Kernel Arguments Buffers Queue

42 Concurrency College 10 OpenCL (1) 42 OpenCL / C# Recap Voor het uitvoeren van een kernel hebben we nodig: een OpenCL platform: platform = ComputePlatform.Platforms[0]; een OpenCL context: context = new ComputeContext( ); een program: program = new ComputeProgram( context, clsource ); de kernel: kernel = program.createkernel( "device_function" ); een job queue: queue = new ComputeCommandQueue( ); We zetten (eenmalig / voor updates) de arguments van de kernel met: SetMemoryArgument / SetValueArgument De kernel wordt uitgevoerd door een job aan de queue toe te voegen: queue.execute( kernel, null, new long [] { N }, null, null ); Platform Context Program Kernel Arguments Buffers Queue

43 Concurrency College 10 OpenCL (1) 43 OpenCL / C# Voorbeeld Het berekenen van de Mandelbrot set: M = cεc lim n Z n, Z 0 = c, Z n+1 = Z n 2 + c De verzameling M van alle complexe getallen waarvoor geldt dat de recursieve functie Z n voor c niet naar oneindig gaat. In pseudocode: Z re = c real, Z imaginary = c imaginary isinside = true for( n = 0; n < iterations; n++ ) { if (Z 2 real + Z 2 imaginary > 4) { isinside = false; break; } } Z imaginary = 2 Z real Z imaginary + c imaginary Z real = Z 2 real Z 2 imaginary + c real

44 Concurrency College 10 OpenCL (1) 44 OpenCL / C# Mandelbrot kernel void device_function( global int* a, float t ) { // adapted from inigo quilez - iq/2013 int id = get_global_id( 0 ); if (id >= (512 * 512)) return; float2 fragcoord = (float2)( (id & 511), (float)(id >> 9) ), resolution = (float2)( 512, 512 ); float3 col = (float3)( 0.f, 0.f, 0.f ); for( int m = 0; m < 2; m++ ) for( int n = 0; n < 2; n++ ) { float2 p = -resolution + 2.f * (fragcoord + (float2)(.5f * (float)m,.5f * (float)n )); float w = (float)( 2 * m + n ), l = 0.0f; float time = t +.5f * (1.f / 24.f) * w / 4.f; float zoo =.32f +.2f * cos(.07f * time ); float coa = cos(.15f * (1.f - zoo) * time ); float sia = sin(.15f * (1.f - zoo) * time ); zoo = pow( zoo, 8.f ); float2 xy = (float2)( p.x * coa - p.y * sia, p.x * sia + p.y * coa ); float2 c = (float2)( -.745f,.186f ) + xy * zoo, z = (float2)( 0.f, 0.f ); for( int i = 0; i < 256; i++ ) { z = (float2)( z.x * z.x - z.y * z.y, 2.f * z.x * z.y ) + c; if (dot( z, z ) > f) break; else l += 1.f; } float sl = l - log2( log2( dot( z, z ) ) ) + 4.f; float al = smoothstep( -.1f, 0.f, 1.f ); l = mix( l, sl, al ); col +=.5f +.5f * cos( 3.f + l * 0.15f + (float3)(.0f,.6f, 1.f ) ); } int r = (int)min( 255.0f, 64.0f * col.x ); int g = (int)min( 255.0f, 64.0f * col.y ); int b = (int)min( 255.0f, 64.0f * col.z ); a[id] = (r << 16) + (g << 8) + b; }

45 Concurrency College 10 OpenCL (1) 45 OpenCL / C#

46 Concurrency College 10 OpenCL (1) 46 OpenCL / C#

47 Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot

48 Concurrency College 10 OpenCL (1) 48 Workgroups Verdeling van Threads over de SMs In de Mandelbrot renderer hebben we: 512 * 512 = threads. De Titan X kan maximaal threads tegelijk uitvoeren. De output wordt dus door minstens 5 batches van pixels en 1 batch van pixels verwerkt. Bij deze batch-grootte zijn er per SM /24 = 2048 threads actief, in 64 warps. Workgroup.

49 Concurrency College 10 OpenCL (1) 49 Workgroups Verdeling van Threads over de SMs per SM zijn 2048 threads actief, in 64 warps. In het Mandelbrot voorbeeld: 2048 threads voor 2048 pixels, bij een resolutie van 512x512: de pixels van de eerste 4 regels. for( int i = 0; i < 256; i++ ) { z = (float2)(z.x*z.x-z.y*z.y, 2.f*z.x*z.y) + c; if (dot( z, z ) > f) break; else l += 1.f; } Wat gebeurd er als 1 thread een break doet, en de andere threads door willen gaan?

50 Concurrency College 10 OpenCL (1) 50 Workgroups Occupancy z=5; if (cond1) 1111 Wat gebeurd er als 1 thread een break doet, en de andere threads door willen gaan? De threads in een warp worden in lockstep uitgevoerd: iedere thread voert dezelfde instructie uit. Masking wordt gebruikt om streams tijdelijk uit te schakelen. Een break in sommige threads in een warp betekent dat sommige threads inactief worden. Occupancy: aantal actieve threads per SM maximaal aantal threads per SM x = y + z; if (cond2) w = t + u; else w = t u; p = q + r; else x = y z; x++;

51 Concurrency College 10 OpenCL (1) 51 Workgroups Occupancy Wanneer we de totale taak als een 2D probleem beschouwen verbeterd de occupancy: Tiles hebben een betere program flow coherence dan regels.

52 Concurrency College 10 OpenCL (1) 53 Workgroups Experiment queue.execute( kernel, null, new long [] { 512 * 512 }, null, null ); wordt: int [] worksize = { 512, 512 }; queue.execute( kernel, null, worksize, null, null ); Voor t = 21.5: fps = 30.0 int [] worksize = { 512, 512 }; int [] localsize = { 32,... }; // 2, 4, 8, 16 queue.execute( kernel, null, worksize, localsize, null ); fps = 60.0

53 Concurrency College 10 OpenCL (1) 54 Workgroups Workgroup Size Waarom is de workgroup size van belang? Een SM heeft een beperkt aantal registers: 64K voor Kepler en Maxwell threads = bitregisters per thread. Wanneer de compiler onvoldoende registers beschikbaar heeft wordt local memory gebruikt.

54 Concurrency College 10 OpenCL (1) 55 Workgroups Workgroup Size Waarom is de workgroup size van belang? Een SM heeft snel local memory dat toegankelijk is voor alle threads op de SM.

55 Concurrency College 10 OpenCL (1) 56 Workgroups Workgroup Size Waarom is de workgroup size van belang? De threads in een workgroup kunnen barriers gebruiken voor synchronisatie.

56 Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot

57 Concurrency College 10 OpenCL (1) 58 Tot Slot GL Interop Data flow in Mandelbrot: screen (template) texture Buffer (host) t ReadFromBuffer Buffer (device, write-only) host Execute device

58 Concurrency College 10 OpenCL (1) 59 Tot Slot GL Interop OpenCL kan een OpenGL texture gebruiken als input / output. Voordeel: de data is al op de GPU, geen verkeer. Voorwaarden: OpenGL context moet gekoppeld worden aan OpenCL context OpenGL texture moet gelocked worden voor OpenCL

59 Concurrency College 10 OpenCL (1) 60 Tot Slot GL Interop OpenCL / OpenGL koppelen: [System.Runtime.InteropServices.DllImport("opengl32", SetLastError = true)] static extern IntPtr wglgetcurrentdc(); IntPtr glhandle = (GraphicsContext.CurrentContext as IGraphicsContextInternal).Context.Handle; IntPtr wglhandle = wglgetcurrentdc(); var p1 = new ComputeContextProperty(ComputeContextPropertyName.Platform, platform.handle.value); var p2 = new ComputeContextProperty(ComputeContextPropertyName.CL_GL_CONTEXT_KHR, glhandle); var p3 = new ComputeContextProperty(ComputeContextPropertyName.CL_WGL_HDC_KHR, wglhandle); var cpl = new ComputeContextPropertyList(new ComputeContextProperty[] { p1, p2, p3 }); context = new ComputeContext( ComputeDeviceTypes.Gpu, cpl, null, IntPtr.Zero );

60 Concurrency College 10 OpenCL (1) 61 Tot Slot GL Interop OpenGL texture voor interop aanmaken: float [] texdata = new float[512 * 512 * 4]; ComputeImage2D texbuffer; int texid = GL.GenTexture(); GL.BindTexture( TextureTarget.Texture2D, texid ); GL.TexParameter( TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)textureminfilter.nearest ); GL.TexParameter( TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)texturemagfilter.nearest ); GL.TexImage2D( TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba32f, 512, 512, 0, OpenTK.Graphics.OpenGL.PixelFormat.Rgb, PixelType.Float, texdata ); flags = ComputeMemoryFlags.WriteOnly; texbuffer = ComputeImage2D.CreateFromGLTexture2D( context, flags, (int)texturetarget.texture2d, 0, texid );

61 Concurrency College 10 OpenCL (1) 62 Tot Slot GL Interop OpenGL texture locken / unlocken: List<ComputeMemory> c = new List<ComputeMemory>() { texbuffer }; queue.acquireglobjects( c, null ); queue.execute( kernel, null, worksize, localsize, null ); queue.finish(); queue.releaseglobjects( c, null );

62 Concurrency College 10 OpenCL (1) 63 Tot Slot GL Interop Render-to-texture is de meest gebruikte toepassing voor GL interop. Andere toepassingen: Mesh simplification Procedural landscapes / meshes Particle systems

63 Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot

64 Concurrency College 10 OpenCL (1) 65 Tot Slot Literatuur NVIDIA s Fermi: The First Complete GPU Computing Architecture p.glaskowsky_nvidia's_fermi-the_first_complete_gpu_architecture.pdf Boek: 2.4.3, 2.4.4

65 Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 EINDE van OpenCL (1) volgende college: OpenCL (2)

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2015 januari 2016 Welkom! Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot Concurrency college 11 OpenCL Primer 3 Introductie Heterogene Systemen

Nadere informatie

Concurrency. Gerard Tel / Jacco Bikker - november 2017 februari College 8: Patronen. Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2017 februari College 8: Patronen. Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 College 8: Patronen Welkom! Previously in Concurrency Blur embarrassingly parallel ST prefix-sum loop dependency Blur embarrassingly

Nadere informatie

College 11: OpenCL (2)

College 11: OpenCL (2) Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 College 11: OpenCL (2) Welkom! Agenda: Recap Bouncers - Intro Bouncers - Voorbereiding Bouncers OpenCL Conclusie Previously in Concurrency

Nadere informatie

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2015 januari 2016 Welkom! Agenda: Introductie Path Tracing C# en SIMD Vectorizatie Speculative xecution Concurrency college 7 Vectorizatie 3 Introductie

Nadere informatie

College 13: Patterns (2)

College 13: Patterns (2) Concurrency Gerard Tel / Jacco Bikker - november 2016 februari 2017 College 13: Patterns (2) Welkom! genda: Collective Operations Reduce Scan Stencil Recurrence Concurrency college 13 Patterns (2) 3 Collectives

Nadere informatie

college 2: Introductie

college 2: Introductie Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 college 2: Welkom! Agenda: Concepten en patronen Multi-threading in C# Concurrency college 2 3 Concurrency college 2 4 Jacco Bikker j.bikker@uu.nl

Nadere informatie

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2015 januari 2016 Welkom! Agenda: Concepten en patronen Multi-threading in C# Concurrency college 1 3 Alles Parallel Opteron 6300 16 cores i7 4 cores Atom

Nadere informatie

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2015 januari 2016 Welkom! Agenda: Context Heterogeneous Rendering Load Balancing Application Conclusion Concurrency college 15 Heterogeen 3 Context Concurrency

Nadere informatie

College 4: Mechanismen

College 4: Mechanismen Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 College 4: Mechanismen Welkom! Agenda: Wat vooraf ging Hardware Electronic components are submerged into a bath of dielectric heat transfer

Nadere informatie

College 15: Monte-Carlo

College 15: Monte-Carlo Concurrency Gerard Tel / Jacco Bikker - november 2016 februari 2017 College 15: Monte-Carlo Welkom! Agenda: Monte-Carlo Heterogeneous Computing Brigade Toets 2 Concurrency college 15 Monte-Carlo 3 Monte-Carlo

Nadere informatie

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2015 januari 2016 Welkom! Agenda: Wat vooraf ging Taken en Data Hardware Performance Theorie Concurrency college 3 Hardware 3 Previously in Concurrency

Nadere informatie

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom!

Concurrency. Gerard Tel / Jacco Bikker - november 2015 januari Welkom! Concurrency Gerard Tel / Jacco Bikker - november 2015 januari 2016 Welkom! genda: Introductie Seriële Compositie & Flow le Compositie & Flow Concurrency college 5 Patronen (1) 3 Introductie Patronen zijn

Nadere informatie

Centrale begrippen hoofdstuk 3. Waarom multiprogramming? Vandaag. processen proces state: running, ready, blocked,... Vragen??

Centrale begrippen hoofdstuk 3. Waarom multiprogramming? Vandaag. processen proces state: running, ready, blocked,... Vragen?? Vragen?? Vandaag Hoofdstuk 4: threads (tentamenstof : 4.1 t/m 4.2) Kleine Opgaven 4.1 (niet alleen ja of nee, ook waarom!) en 4.4 inleveren maandag Centrale begrippen hoofdstuk 3 processen proces state:

Nadere informatie

Computerarchitectuur. Terugblik / discussie / oefenopgaven

Computerarchitectuur. Terugblik / discussie / oefenopgaven Computerarchitectuur Terugblik / discussie / oefenopgaven Kristian Rietveld http://ca.liacs.nl/ Trends & Performance Voorkennis We bouwden een 4-bit microprocessor bij Digitale Technieken. Bij computerarchitectuur

Nadere informatie

Computerarchitectuur. Ch 4. Data-Level Parallelism

Computerarchitectuur. Ch 4. Data-Level Parallelism Computerarchitectuur Ch 4. Data-Level Parallelism Kristian Rietveld http://ca.liacs.nl/ Data-Level Parallelism Nu we de limieten hebben gezien van parallelisme tussen instructies, kunnen we parallelisme

Nadere informatie

Computerarchitectuur. Ch 4. Data-Level Parallelism

Computerarchitectuur. Ch 4. Data-Level Parallelism Computerarchitectuur Ch 4. Data-Level Parallelism Kristian Rietveld http://ca.liacs.nl/ Data-Level Parallelism Nu we de limieten hebben gezien van parallelisme tussen instructies, kunnen we parallelisme

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

Nadere informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel

Nadere informatie

College 17: Monte-Carlo

College 17: Monte-Carlo Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 College 17: Monte-Carlo Welkom! Agenda: Monte-Carlo Heterogeneous Computing Brigade Toets 2 Concurrency college 17 Monte-Carlo 3 Monte-Carlo

Nadere informatie

Kompas. zijn klasse. protected override void OnDraw(Canvas canv) { base.ondraw(canv);

Kompas. zijn klasse. protected override void OnDraw(Canvas canv) { base.ondraw(canv); Kompas class KompasView : View, ISensorEventListener { Bitmap b; float Schaal; float Hoek; public KompasView(Context belooft c) : methodes base(c) { b = BitmapFactory.DecodeResource(...UU...); SensorManager

Nadere informatie

Uitwerking oefententamen Computerarchitectuur December 2016

Uitwerking oefententamen Computerarchitectuur December 2016 Uitwerking oefententamen Computerarchitectuur December 2016 I.a. De overall CPI kan worden berekend met de formule n IC i CPI Instruction count CPI i voor de ratio vullen we telkens de geven frequentie

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Tentamen Computersystemen

Tentamen Computersystemen Tentamen Computersystemen baicosy6 2e jaar bachelor AI, 2e semester 21 oktober 213, 9u-11u OMHP D.9 vraag 1 Van een Single Cycle Harvard machine hebben de componenten de volgende propagation delay time:

Nadere informatie

High Performance Computing

High Performance Computing High Performance Computing Kristian Rietveld (krietvel@liacs.nl, kamer 138) Groep Computer Systems - Embedded systems - Specifieke software mappen op specfieke hardware. - Hardware synthesis. - Real-time

Nadere informatie

PyCuda. oftewel massief parallel rekenen. Jasper Spaans, Fox-IT PUN meeting

PyCuda. oftewel massief parallel rekenen. Jasper Spaans, Fox-IT PUN meeting PyCuda oftewel massief parallel rekenen Jasper Spaans, Fox-IT PUN meeting 2009-09-24 Cuda Techniek om berekingen op je GPU te kunnen uitvoeren ( GPGPU ) Cuda Techniek om berekingen op je

Nadere informatie

Real-Time Software (RTSOF) EVMINX9 Week 2

Real-Time Software (RTSOF) EVMINX9 Week 2 Real-Time Software (RTSOF) EVMINX9 Week 2 C++ Threads C++ heeft (nog) geen standaard library voor concurrent programmeren. Boost Thread library http://www.boost.org/ Intel Threading Building Blocks (TBB)

Nadere informatie

De Parallelle Revolutie van GPU's en CPU's

De Parallelle Revolutie van GPU's en CPU's De Parallelle Revolutie van GPU's en CPU's George van Venrooij Organic Vectory BV Bits&Chips Embedded Systemen 18 November 2011 Eindhoven Een nieuw speelveld Desktop PC anno 2005 2 GHz CPU (1 core, 6 GFLOP/s)

Nadere informatie

Tweede Toets Concurrency 2 februari 2017, , Educ-β.

Tweede Toets Concurrency 2 februari 2017, , Educ-β. Tweede Toets Concurrency 2 februari 2017, 8.30 10.30, Educ-β. Motiveer je antwoorden kort! Zet je mobiel uit. Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe

Nadere informatie

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo)

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo) informatica hardware overzicht moederbord CPU RAM GPU architectuur (vwo) 1 moederbord basis van de computer componenten & aansluitingen chipset Northbridge (snel) Southbridge ("traag") bussen FSB/HTB moederbord

Nadere informatie

n-queens minimale dominantie verzamelingen Chessboard Domination on Programmable Graphics Hardware door Nathan Cournik

n-queens minimale dominantie verzamelingen Chessboard Domination on Programmable Graphics Hardware door Nathan Cournik n-queens minimale dominantie verzamelingen Chessboard Domination on Programmable Graphics Hardware door Nathan Cournik Rick van der Zwet 4 augustus 2010 Samenvatting Dit schrijven zal

Nadere informatie

Instructies en blokken

Instructies en blokken Herhaling 1 Instructies en blokken Naar elke instructie staat een ; puntkomma Verschillende instructies worden door de accolades in een block samengevat. Een blok is het zelfde als een enkele instructie.

Nadere informatie

Overerving & Polymorfisme

Overerving & Polymorfisme Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen. Indexers in C#.Net In deze tutorial ga ik het hebben over indexers. Bij het gebruik van bijvoorbeeld een ArrayList object, kan je de gegevens uit deze collectie opvragen als ware het een array. // ArrayList

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Multi-core systemen. door Alexander Melchior

Multi-core systemen. door Alexander Melchior Multi-core systemen Multi-cpu & Multi-core Multi cpu & Multi core door Alexander Melchior Toevoeging aan GDP Overdragen Capita Selecta Waarom? Een stukje geschiedenis 2005: Introductie eerste consumenten

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Datastructuren Werkcollege Intro

Datastructuren Werkcollege Intro Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 7 maart 2010 Deze les Zelf componenten maken Concurrency (multithreading): werken met threads levenscyclus van een thread starten tijdelijk onderbreken wachten stoppen Zelf componenten maken Je eigen component:

Nadere informatie

Toetsbundel Deel 2 Concurrency 8 oktober 2018, Gerard Tel, Niet verspreiden 1!.

Toetsbundel Deel 2 Concurrency 8 oktober 2018, Gerard Tel, Niet verspreiden 1!. Toetsbundel Deel 2 Concurrency 8 oktober 2018, Gerard Tel, Niet verspreiden 1!. Deze bundel bevat een collectie toetsvragen over het tweede deel van Concurrency. Behalve dat goede antwoorden worden gegeven,

Nadere informatie

Debugging in embedded en native systemen met GDB

Debugging in embedded en native systemen met GDB Debugging in embedded en native systemen met GDB A.M. ten Doesschate July 15, 2015 Abstract Een korte beschrijving : intro gebruik met welke tools en hulpmiddelen van de GDB setup en een summier aantal

Nadere informatie

Elementary Data Structures 3

Elementary Data Structures 3 Elementary Data Structures 3 Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 september 2014 ODE/FHTBM Elementary Data Structures 3 29 september 2014 1/14 Meer

Nadere informatie

HPC CLOUD INTRODUCTIE. Jan Bot, SURFsara 5 augustus 2015

HPC CLOUD INTRODUCTIE. Jan Bot, SURFsara 5 augustus 2015 HPC CLOUD INTRODUCTIE Jan Bot, SURFsara 5 augustus 2015 Iets over jullie Doel van vandaag Introductie van het nieuwe HPC Cloud Kweken van een gezamelijk vocabulaire [S4R] Gelegenheid tot netwerken De hands-on

Nadere informatie

Het begrip 'Proces' Proces-toestand

Het begrip 'Proces' Proces-toestand Het begrip 'Proces' Een proces is de uitvoering van een programma Bij een proces hoort een programma (de code) Program Counter (Instructiewijzer) stack data (data sectie) twee of meer processen kunnen

Nadere informatie

Beter, Sneller, Mooier. Processoren 12 januari 2015

Beter, Sneller, Mooier. Processoren 12 januari 2015 Beter, Sneller, Mooier Processoren 12 januari 2015 Beter! Sneller! Krachtigere CPU: maak instructies die meer doen Snellere CPU: pipeline, out-of-order execution Sneller RAM: cache meer mogelijkheden...

Nadere informatie

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type. Wat is FP? The Haskell School of Expression Functioneel Programmeren Een andere manier om tegen programmeren aan te kijken Gebaseerd op het uitrekenen van expressies 1+1=2 Eenvoudig maar krachtig (modulair,

Nadere informatie

De MySQL C API. Variabelen in C Functies in C Pointers in C

De MySQL C API. Variabelen in C Functies in C Pointers in C LinuxFocus article number 304 http://linuxfocus.org De MySQL C API door Özcan Güngör Over de auteur: Ik gebruik Linux sinds 1997. Vrijheid, flexibiliteit en opensource. Dat

Nadere informatie

GPU versus CPU. Renderen terwijl uw processor stil staat? SketchUp Pro. Octane Render

GPU versus CPU. Renderen terwijl uw processor stil staat? SketchUp Pro. Octane Render GPU versus CPU Renderen terwijl uw processor stil staat? SketchUp Pro Octane Render 1 Visualisatie toekomst is er al? Jen-Hsun Huang, oprichter en president en CEO van NVIDIA (GTC Jan Jose Convention Center)

Nadere informatie

Hoe werkt een computer precies?

Hoe werkt een computer precies? Hoe werkt een computer precies? Met steun van stichting Edict Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Overview Introductie SIM-PL Simulatietool voor werking computer

Nadere informatie

Computerarchitectuur. Hoofdstuk 3: Instruction-Level Parallelism

Computerarchitectuur. Hoofdstuk 3: Instruction-Level Parallelism Computerarchitectuur Hoofdstuk 3: Instruction-Level Parallelism Kristian Rietveld http://ca.liacs.nl/ Instruction-level Parallelism Doel: gebruik maken van potentiële overlap tussen opeenvolgende instructies.

Nadere informatie

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 5.1-5.2, Appendix A.

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 5.1-5.2, Appendix A. Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 51-52, Appendix A1) Processes zijn meestal niet onafhankelijk Bijvoorbeeld: 2 processen

Nadere informatie

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println(Hallo! Voorbeeld Java-programma import java.io.*; één klasse...met één functie...met één opdracht public class Hallo { public static void main (String[] a) { System.out.println("Hallo!"); accolades begrenzen

Nadere informatie

Lessen Java: Reeks pag. 1

Lessen Java: Reeks pag. 1 Lessen Java: Reeks 2 1-3-2016 pag. 1 Primitieve types type grootte waardes byte 8 bits 128, 127 short 16 bits 32768, 32767 int 32 bits 2 31, 2 31 1 long 64 bits 2 63, 2 63 1 type grootte waardes float

Nadere informatie

Hoofdstuk 7. Computerarchitectuur

Hoofdstuk 7. Computerarchitectuur Hoofdstuk 7 Computerarchitectuur 1 controlebus CPU MEMORY I/O databus adresbus Figuur 71 Schematische opbouw van een computersysteem 8 Figuur 72 Een busverbinding Buslijn Out E A In Out E B In Out E C

Nadere informatie

3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken

3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken 18 Februari 2013 Tigran Gasparian 3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken Gydo Nieraeth 4 e jaars student, 3 e jaars GameTech C++ ervaring: Software

Nadere informatie

Real-Time Systems (RTSYST)

Real-Time Systems (RTSYST) Real-Time Systems (RTSYST) Week 3 C++ concurrent programmeren C++ heeft sinds C++11 een standaard library voor concurrent programmeren. Alternatieve libraries: Boost Thread library http://www.boost.org/

Nadere informatie

College 11: Game Engines

College 11: Game Engines Concurrency Gerard Tel / Jacco Bikker - november 2016 februari 2017 College 11: Game Engines Welkom! Agenda: A Brief History Of Valve s Source Engine, 2007 id Tech 5, 2009 Bungie s Destiny, 2015 Naughty

Nadere informatie

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, 13.30-15.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Opgaven 1 levert 8 punten op, opgave 2 levert 12 punten

Nadere informatie

Tentamen Computersystemen

Tentamen Computersystemen Tentamen Computersystemen baicosy06 2e jaar bachelor AI, 2e semester 23 september 2013 13u-15u IWO 4.04A (blauw), Academisch Medisch Centrum, Meidreef 29, Amsterdam ZuidOost Het is niet toegestaan communicatieapparatuur

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen

Nadere informatie

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

ALGORITMIEK: answers exercise class 7

ALGORITMIEK: answers exercise class 7 Problem 1. See slides 2 4 of lecture 8. Problem 2. See slides 4 6 of lecture 8. ALGORITMIEK: answers exercise class 7 Problem 5. a. Als we twee negatieve (< 0) getallen bij elkaar optellen is het antwoord

Nadere informatie

Objectgericht programmeren 1.

Objectgericht programmeren 1. Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie

Nadere informatie

Toets In2305-ii Embedded Programming Dinsdag 28 November 2006, 15:45-16:30

Toets In2305-ii Embedded Programming Dinsdag 28 November 2006, 15:45-16:30 Toets In2305-ii Embedded Programming Dinsdag 28 November 2006, 15:45-16:30 Teneinde misverstanden over de syntactische geldigheid van code fragmenten in dit tentamen te voorkomen, zal altijd worden gesproken

Nadere informatie

wat is er nodig om een ISensorEventListener te zijn?

wat is er nodig om een ISensorEventListener te zijn? Interface In de library interface ISensorEventListener { public void OnSensorChanged(SensorEvent s); public void OnAccuracyChanged(SensorEvent s); In je eigen programma class KompasView : View, ISensorEventListener

Nadere informatie

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49 Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Deel 1: schriftelijk deel

Deel 1: schriftelijk deel Examen Computerarchitectuur en systeemsoftware Donderdag 15 januari 2009, namiddag Deel 1: schriftelijk deel Algemene bemerkingen: Het examen bestaat uit 2 delen. Dit zijn de vragen voor het eerste deel.

Nadere informatie

Een.NET-besturingssysteemtoolkit. Discovering Cosmos. Sijmen J. Mulder

Een.NET-besturingssysteemtoolkit. Discovering Cosmos. Sijmen J. Mulder Een.NET-besturingssysteemtoolkit Discovering Cosmos Sijmen J. Mulder Agenda Boek 1 Cosmos: a very short introduction Boek 2 Modern Operating Systems Pauze Boek 3 The Design and Implementation of the Cosmos

Nadere informatie

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Pipeline processor One cycle machine Calculator File of registers Assembly

Nadere informatie

Computerarchitectuur 2016 Inleveropdracht 3: Exploiting Memory Hierarchies in Modern Systems

Computerarchitectuur 2016 Inleveropdracht 3: Exploiting Memory Hierarchies in Modern Systems Computerarchitectuur 2016 Inleveropdracht 3: Exploiting Memory Hierarchies in Modern Systems Gesuggereerde Deadline: zondag 27 november 2016 Zoals we in het hoorcollege uitgebreid hebben besproken spelen

Nadere informatie

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

C++ programmeermethoden Bachelor Kunstmatige Intelligentie C++ programmeermethoden Bachelor Kunstmatige Intelligentie 1e Deeltentamen Datum: 28 maart 2016 Tijd: 13.00-14.30 Aantal pagina s: 8 (inclusief voorblad) Aantal vragen: 5 Maximaal aantal te behalen punten:

Nadere informatie

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces?

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces? Hoofdstuk 3: Processen: Beschrijving en Besturing Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces? 1 Wat is een proces? Een proces is een programma in uitvoering

Nadere informatie

Hertentamen 8D040 - Basis beeldverwerking

Hertentamen 8D040 - Basis beeldverwerking Hertentamen 8D040 - Basis beeldverwerking 6 augustus 203, 4:00-7:00 Opmerkingen: Maak elke opgave op een apart vel. Antwoord op vraag 4 mag gewoon in het Nederlands. Een gewone rekenmachine is toegestaan.

Nadere informatie

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ }

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ } 1 Functies ( ) voorbeeld: int power(int base, int n) int i, p; p = 1; for ( i=1, i

Nadere informatie

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden

Nadere informatie

Java Programma structuur

Java Programma structuur Java Programma structuur public class Bla // div. statements public static void main(string argv[]) // meer spul Voortgezet Prog. voor KI, week 4:11 november 2002 1 Lijsten Voorbeelden 2, 3, 5, 7, 13 Jan,

Nadere informatie

EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college

EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-2013, 4e college Arjan van Genderen, Computer Engineering 11-12-2012 Delft University of Technology Challenge the future Mededelingen Voortgangstoets: Woensdagmiddag

Nadere informatie

Voorbeeld: Simulatie van bewegende deeltjes

Voorbeeld: Simulatie van bewegende deeltjes Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten Simulatie Samenhang van objecten sim geërfd van Form stap zelf gedeclareerd auto r1

Nadere informatie

public boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber

public boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden

Nadere informatie

Introductie in C++ Jan van Rijn. September 2013

Introductie in C++ Jan van Rijn. September 2013 Introductie in C++ Jan van Rijn September 2013 Inhoud Classes Overerving Const correctness Standard C++ library Templates Classes Voordelen van classes: Modelleren Modulariteit Informatie afschermen Makkelijk(er)

Nadere informatie

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Jeroen uit. Extra informatie. Voor de lunch. Arduino zo aangesloten om mijn code te laten werken. (versie voor lunch) (code voor de lunch)

Jeroen uit. Extra informatie. Voor de lunch. Arduino zo aangesloten om mijn code te laten werken. (versie voor lunch) (code voor de lunch) We zijn weer aan dag drie al beland vandaag weer een dag CLE aangezien ik zag dat ik het vorige blog was vergeten CLE staat voor Contextiual Learning Enviroment ( weet je dat ook weer ) Maar ja zoals ik

Nadere informatie

Nederlandse samenvatting (Dutch summary)

Nederlandse samenvatting (Dutch summary) Nederlandse samenvatting (Dutch summary) Ditproefschriftpresenteerteen raamwerk voorhetontwikkelenvanparallellestreaming applicaties voor heterogene architecturen met meerdere rekeneenheden op een chip.

Nadere informatie

Digitale en analoge technieken

Digitale en analoge technieken Digitale en analoge technieken Peter Slaets February 14, 2006 Peter Slaets () Digitale en analoge technieken February 14, 2006 1 / 33 Computerarchitectuur 1 Processors 2 Primair geheugen 3 Secundair geheugen

Nadere informatie

Inleiding C++ Coding Conventions

Inleiding C++ Coding Conventions Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche,

Nadere informatie

HPC CLOUD INTRODUCTIE. Jan$Bot,$SURFsara$ 15$oktober$2015$

HPC CLOUD INTRODUCTIE. Jan$Bot,$SURFsara$ 15$oktober$2015$ HPC CLOUD INTRODUCTIE Jan$Bot,$SURFsara$ 15$oktober$2015$ Iets over jullie Doel van vandaag Introductie van het nieuwe HPC Cloud Kweken van een gezamelijk vocabulaire [S4R] Gelegenheid tot netwerken De

Nadere informatie

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object Syntax van opdracht opdracht klasse naam methode naam ( expressie ) ; object expressie. property naam +=, variabele = expressie ; Static gewone methoden Bewerken een object Aanroep: object. methode ( )

Nadere informatie

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B; Beschouw bijvoorbeeld de twee onderstaande klassen, waarvan de attributen en eigenschappen geannoteerd zijn met bijkomende XML-annotaties: using System ; using System. Xml ; using System. Xml. S e r i

Nadere informatie

Go: een snelle introductie

Go: een snelle introductie Go: een snelle introductie Auteur: Daniël Heres Datum: Januari 2010 3,2,1 Go! "Weer een nieuwe taal". De keuze in programmeertalen is groot en de gelijkenis vaak ook. Toch is er een ding dat vaak overeind

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Bewijzen en Technieken 1 7 januari 211, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe.

Nadere informatie

Instructies en blokken

Instructies en blokken Herhaling 1 Instructies en blokken 2 Naar elke instructie staat een ; puntkomma Verschillende instructies worden door de accolades in een block samengevat. Een blok is het zelfde als een enkele instructie.

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie