College 11: OpenCL (2)

Maat: px
Weergave met pagina beginnen:

Download "College 11: OpenCL (2)"

Transcriptie

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

2 Agenda: Recap Bouncers - Intro Bouncers - Voorbereiding Bouncers OpenCL Conclusie

3 Previously in Concurrency

4 Concurrency college 11 OpenCL (2) 4 Recap Occupancy Wanneer we de totale taak als een 2D probleem beschouwen verbeterd de occupancy: Tiles hebben een betere program flow coherence dan regels.

5 Concurrency college 11 OpenCL (2) 5 Interop GL Interop Data flow in Mandelbrot: screen (template) texture Buffer (host) t ReadFromBuffer Buffer (device, write-only) host Execute device

6 Concurrency college 11 OpenCL (2) 6 Interop 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

7 Concurrency college 11 OpenCL (2) 7 Interop 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 );

8 Concurrency college 11 OpenCL (2) 8 Interop 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 );

9 Concurrency college 11 OpenCL (2) 9 Interop 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 );

10 Concurrency college 11 OpenCL (2) 10 Interop GL Interop Render-to-texture is de meest gebruikte toepassing voor GL interop. Andere toepassingen: Mesh simplification Procedural landscapes / meshes Particle systems

11 Concurrency college 11 OpenCL (2) 11 Recap Literatuur NVIDIA s Fermi: The First Complete GPU Computing Architecture The_First_Complete_GPU_Architecture.pdf Boek: 2.4.3, 2.4.4

12 Concurrency college 11 OpenCL (2) 13 Recap

13 Concurrency college 11 OpenCL (2) 14 Recap

14 Concurrency college 11 OpenCL (2) 15 Template! OpenCL the Easy Way class Game // load the OpenCL program; this creates the OpenCL context static OpenCLProgram ocl = new OpenCLProgram( "../../program.cl" ); // find the kernel named 'device_function' in the program OpenCLKernel kernel = new OpenCLKernel( ocl, "device_function" ); // create a regular buffer; by default this resides on both the host and the device OpenCLBuffer<int> buffer = new OpenCLBuffer<int>( ocl, 512 * 512 ); // create an OpenGL texture to which OpenCL can send data OpenCLImage<int> image = new OpenCLImage<int>( ocl, 512, 512 );...

15 Concurrency college 11 OpenCL (2) 16 Template! OpenCL the Easy Way public void Tick() GL.Finish(); kernel.setargument( 0, buffer ); kernel.setargument( 1, t ); long [] worksize = 512, 512 ; long [] localsize = 32, 4 ; kernel.execute( worksize, localsize ); // get the data from the device to the host buffer.copyfromdevice();

16 Agenda: Recap Bouncers - Intro Bouncers - Voorbereiding Bouncers OpenCL Conclusie

17 Concurrency college 11 OpenCL (2) 18 Bouncers Particle Effect: Bouncers Ingredienten: 5 particle spawners Positie Richting Kleur Obstakels Normaal Begin- en eindpunt Particle gedrag Zwaartekracht Collision detection Einde levenscyclus Respawn Reflectie Nieuwe richting

18 Concurrency college 11 OpenCL (2) 19 Bouncers Particle Effect: Bouncers Ingredienten: 5 particle spawners Positie Richting Kleur Obstakels Normaal Begin- en eindpunt Particle gedrag Zwaartekracht Collision detection Einde levenscyclus Respawn Reflectie Nieuwe richting abstract class ParticleSource public List<Particle> particles; public int count; public void Tick() foreach( Particle p in particles ) p.tick(); class BouncerSource : ParticleSource public BouncerSource( Vector2 position, Vector2 direction, int color ) particles = new List<Particle>(); count = 16384; for ( int i = 0; i < count; i++ ) Bouncer bouncer = new Bouncer( position, direction, color ); bouncer.spawn(); particles.add( bouncer );

19 Concurrency college 11 OpenCL (2) 20 Bouncers Particle Effect: Bouncers Ingredienten: 5 particle spawners Positie Richting Kleur Obstakels Normaal Begin- en eindpunt Particle gedrag Zwaartekracht Collision detection Einde levenscyclus Respawn Reflectie Nieuwe richting abstract class Particle // properties public Vector2 position, velocity; public static Random rng = new Random(); // constructor public Particle() position = new Vector2( 0, 0 ); velocity = new Vector2( 0, 0 ); // abstract methods public abstract void Spawn(); public abstract void Tick();

20 Concurrency college 11 OpenCL (2) 21 Bouncers Particle Effect: Bouncers Ingredienten: 5 particle spawners Positie Richting Kleur Obstakels Normaal Begin- en eindpunt Particle gedrag Zwaartekracht Collision detection Einde levenscyclus Respawn Reflectie Nieuwe richting class Occluder public Vector2 p1, p2, N; public Occluder( Vector2 A, Vector2 B )... public void Render()... public bool Intersect( Vector2 A, Vector2 B, ref float Ix, ref float Iy )... public Vector2 Reflect( Vector2 D )...

21 Concurrency college 11 OpenCL (2) 22 Bouncers Particle Effect: Bouncers Ingredienten: 5 particle spawners Positie Richting Kleur Obstakels Normaal Begin- en eindpunt Particle gedrag Zwaartekracht Collision detection Einde levenscyclus Respawn Reflectie Nieuwe richting public override void Tick() if (out_of_screen) // particle left the screen; respawn Spawn(); else // continue path Vector2 prevpos = position; position += velocity * Game.animationSpeed; foreach( Occluder o in Game.occluders ) float ix = 0, iy = 0; if (o.intersect( prevpos, position, ref ix, ref iy ))... return; velocity.y += 0.001f; Game.screen.Plot(... );

22 Concurrency college 11 OpenCL (2) 23 Bouncers Particle Effect: Bouncers Ingredienten: 5 particle spawners Positie Richting Kleur Obstakels Normaal Begin- en eindpunt public void Tick() timer.reset(); timer.start(); // render the background cave.copyto( screen, 0, 0 ); // draw occluders foreach( Occluder o in occluders ) o.render(); // update particles foreach( ParticleSource s in sources ) s.tick(); // report double elapsed = timer.elapsed.totalmilliseconds; Console.Write( elapsed ); Console.WriteLine(); Particle gedrag Zwaartekracht Collision detection Einde levenscyclus Respawn public Vector2 Reflect( Vector2 D ) return D - ((2.0f * (N.X * D.X + N.Y * D.Y)) * N); Reflectie Nieuwe richting

23 Concurrency college 11 OpenCL (2) 24 Bouncers Particle Effect: Bouncers Karakteristieken: 5 x particles Particles zijn onafhankelijk Gebruik van List, foreach Random number generator Overerving Output puur grafisch Net wel/niet snel genoeg

24 Concurrency college 11 OpenCL (2) 25 Bouncers Particle Effect: Bouncers Karakteristieken: 5 x particles Particles zijn onafhankelijk Gebruik van List, foreach Random number generator Overerving Output puur grafisch Net wel/niet snel genoeg Voldoende werk voor GPU threads Geen synchronizatie nodig, volgorde irrelevant Niet bepaald C code Heeft OpenCL niet (en is lastig) Mooi voor uitbreidbaarheid, maar wordt hier niet gebruikt GL-interop : output direct naar OpenGL texture Goede reden om de hulp van de GPU in te roepen.

25 Agenda: Recap Bouncers - Intro Bouncers - Voorbereiding Bouncers OpenCL Conclusie

26 Concurrency college 11 OpenCL (2) 27 Voorbereiding C# versus OpenCL Spawners, particles en obstakels zijn gedefinieerd als classes. Binnen deze classes treffen we veelvuldig Vector2 objecten aan. OpenCL ondersteunt geen classes Wel structs, maar we moeten voorzichtig zijn met data alignment Vector2 lijkt op float2, maar wederom is alignment een probleem Floats zijn de veiligste optie.

27 Concurrency college 11 OpenCL (2) 28 Voorbereiding De Spawners public static List<ParticleSource> sources = new List<ParticleSource>(); Inhoud: 5x particles. Per particle: positie, snelheid, spawn richting, spawn positie, kleur. const int nrpertype = 16384; const int nrsources = 5; float[] pos_x = new float[nrpertype * nrsources]; // position float[] pos_y = new float[nrpertype * nrsources]; float[] vel_x = new float[nrpertype * nrsources]; // velocity float[] vel_y = new float[nrpertype * nrsources]; float[] dir_x = new float[nrpertype * nrsources]; // direction float[] dir_y = new float[nrpertype * nrsources]; float[] org_x = new float[nrpertype * nrsources]; // origin float[] org_y = new float[nrpertype * nrsources]; int[] col = new int[nrpertype * nrsources]; // color

28 Concurrency college 11 OpenCL (2) 29 Voorbereiding De Spawners Voor het vullen van deze data nemen we de functionaliteit van de constructor over: void CreateParticleSource( int idx, Vector2 pos, Vector2 aim, int color ) if (aim.length > 0) aim.normalize(); aim *= 0.01f; for( int i = 0; i < nrpertype; i++ ) int a = idx * nrpertype + i; // positie in de array voor source idx org_x[a] = pos.x; org_y[a] = pos.y; dir_x[a] = aim.x; dir_y[a] = aim.y; col[a] = color; SpawnParticle( a ); void SpawnParticle( int a ) pos_x[a] = org_x[a]; pos_y[a] = org_y[a]; float vx = (float)rng.nextdouble() * 0.01f f; float vy = (float)rng.nextdouble() * 0.01f f; vel_x[a] = dir_x[a] + vx; vel_y[a] = dir_y[a] + vy;

29 Concurrency college 11 OpenCL (2) 30 Voorbereiding De Spawners Nu kunnen we ook de particle Tick converteren: void TickParticle( int a ) if (pos_y[a] > 1 pos_x[a] < 0 pos_x[a] > 1) // particle left the screen; respawn SpawnParticle( a ); else // continue path...

30 Concurrency college 11 OpenCL (2) 31 Voorbereiding De Occluders public static List<Occluder> occluders = new List<Occluder>(); Inhoud: 6 occluders. Per occluder: P1, P2, N. const int nroccluders = 6; float[] p1x = new float[nroccluders]; float[] p1y = new float[nroccluders]; float[] p2x = new float[nroccluders]; float[] p2y = new float[nroccluders]; float[] Nx = new float[nroccluders]; float[] Ny = new float[nroccluders]; Hierna kunnen we ook de Intersect en Reflect methoden converteren. // create an occluder // this mimics the constructor void CreateOccluder( int idx, Vector2 A, Vector2 B ) p1x[idx] = A.X; p1y[idx] = A.Y; p2x[idx] = B.X; p2y[idx] = B.Y; Vector2 N = new Vector2( A.Y - B.Y, B.X - A.X ); N.Normalize(); Nx[idx] = N.X; Ny[idx] = N.Y;

31 Concurrency college 11 OpenCL (2) 32 Voorbereiding

32 Concurrency college 11 OpenCL (2) 33 Voorbereiding De RNG static Random rng = new Random(); De RNG vervangen we door Marsaglia s Xor32 RNG: uint seed = 1000; uint RandomInt() // Marsaglia Xor32; see seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed << 5; return seed; float RandomFloat() return RandomInt() * e-10f; // 1 / 2^32

33 Agenda: Recap Bouncers - Intro Bouncers - Voorbereiding Bouncers OpenCL Conclusie

34 Concurrency college 11 OpenCL (2) 35 OpenCL Cloo Voor OpenCL gebruiken we Cloo en de nieuwe OpenCL template. class Game // load the OpenCL program; this creates the OpenCL context static OpenCLProgram ocl = new OpenCLProgram( "../../program.cl" ); // find the kernel named 'device_function' in the program OpenCLKernel kernel = new OpenCLKernel( ocl, "device_function" ); // create a regular buffer; by default this resides on both the host and the device OpenCLBuffer<int> buffer = new OpenCLBuffer<int>( ocl, 512 * 512 ); // create an OpenGL texture to which OpenCL can send data OpenCLImage<int> image = new OpenCLImage<int>( ocl, 512, 512 );...

35 Concurrency college 11 OpenCL (2) 36 OpenCL Cloo Voor OpenCL gebruiken we Cloo en de nieuwe OpenCL template. We testen met een dummy kernel: kernel void device_function( write_only image2d_t a ) int idx = get_global_id( 0 ); int idy = get_global_id( 1 ); int id = idx * idy; if (id >= (960 * 600)) return; int2 pos = (int2)( idx, idy ); write_imagef( a, pos, (float4)(idx / 960.0f, idy / 960.0f, 0, 1 ) ); Let op: dit gebeurt.

36 Concurrency college 11 OpenCL (2) 37 OpenCL Cloo Voor OpenCL gebruiken we Cloo en de nieuwe OpenCL template. We testen met een dummy kernel: // do random OCL stuff GL.Finish(); kernel.setargument( 0, image ); long [] worksize = 960, 600 ; long [] localsize = 32, 4 ; kernel.lockopenglobject( image.texbuffer ); kernel.execute( worksize, localsize ); kernel.unlockopenglobject( image.texbuffer ); public void Render() GL.LoadIdentity(); GL.BindTexture( TextureTarget.Texture2D, texid ); GL.Begin( PrimitiveType.Quads ); GL.TexCoord2( 0.0f, 1.0f ); GL.Vertex2( -1.0f, -1.0f ); GL.TexCoord2( 1.0f, 1.0f ); GL.Vertex2( 1.0f, -1.0f ); GL.TexCoord2( 1.0f, 0.0f ); GL.Vertex2( 1.0f, 1.0f ); GL.TexCoord2( 0.0f, 0.0f ); GL.Vertex2( -1.0f, 1.0f ); GL.End();

37 Concurrency college 11 OpenCL (2) 38 OpenCL Tip Implementeer altijd eerst de minimale functionaliteit. Bouw daarna langzaam op, zodat een eventuele fout maar in een klein stuk code kan zitten.

38 Concurrency college 11 OpenCL (2) 39 OpenCL Data Transport De data voor de simulatie moet beschikbaar zijn op de GPU. Eerst de occluders: OpenCLBuffer<float> p1xdata, p1ydata,p2xdata, p2ydata,nxxdata, NyyData; void CreateOccluderBuffers() p1xdata = new OpenCLBuffer<float>( ocl, p1x ); p1ydata = new OpenCLBuffer<float>( ocl, p1y ); p2xdata = new OpenCLBuffer<float>( ocl, p2x ); p2ydata = new OpenCLBuffer<float>( ocl, p2y ); NxxData = new OpenCLBuffer<float>( ocl, Nx ); NyyData = new OpenCLBuffer<float>( ocl, Ny );

39 Concurrency college 11 OpenCL (2) 40 OpenCL Data Transport De particles: OpenCLBuffer<float> pxdata, pydata, vxdata, vydata, dxdata, dydata, oxdata, oydata; OpenCLBuffer<int>; void CreateParticleBuffers() pxdata = new OpenCLBuffer<float>( ocl, pos_x ); pydata = new OpenCLBuffer<float>( ocl, pos_y ); vxdata = new OpenCLBuffer<float>( ocl, vel_x ); vydata = new OpenCLBuffer<float>( ocl, vel_y ); dxdata = new OpenCLBuffer<float>( ocl, dir_x ); dydata = new OpenCLBuffer<float>( ocl, dir_y ); oxdata = new OpenCLBuffer<float>( ocl, org_x ); oydata = new OpenCLBuffer<float>( ocl, org_y ); cldata = new OpenCLBuffer<int>( ocl, col );

40 Concurrency college 11 OpenCL (2) 41 OpenCL Data Transport We testen de data met een eenvoudige versie van de particle Tick in OpenCL. kernel void device_function( write_only image2d_t a, global float* px, global float* py, global float* vx, global float* vy ) // get the thread id; this will be our particle id int id = get_global_id( 0 ); // make sure we're still inside our arrays if (id >= (16384 * 5)) return; // update position, apply gravity px[id] += vx[id]; py[id] += vy[id]; vy[id] += 0.001f; // plot the particle int ix = (int)(px[id] * 960.0f); int iy = (int)(py[id] * 600.0f); write_imagef( a, (int2)(ix, iy), (float4)( 1, 1, 1, 1 ) ); kernel.setargument( 1, pxdata ); kernel.setargument( 2, pydata ); kernel.setargument( 3, vxdata ); kernel.setargument( 4, vydata );

41 Concurrency college 11 OpenCL (2) 42 OpenCL Data Transport const int nrpertype = 16384; const int nrsources = 5; if (id >= (16384 * 5)) return; De grootte van onze arrays is nu wel erg hardcoded : deze constanten worden momenteel in zowel de OpenCL code als de C# code vermeldt. We kunnen dit voorkomen door het aantal particles als parameter mee te geven aan de OpenCL code.

42 Concurrency college 11 OpenCL (2) 43 OpenCL

43 Concurrency college 11 OpenCL (2) 44 OpenCL Functionaliteit De buffers zijn goed aangekomen. Volgende stappen: De particles trekken sporen; de achtergrond wordt niet gewist. De achtergrond is een plaatje. Particles die het beeld verlaten schrijven buiten de texture.

44 Concurrency college 11 OpenCL (2) 45 OpenCL Scherm Wissen Om het scherm te wissen vervangen we de texture door de background. Benodigdheden: 1. Een kopie van de background, met occluders, in floating point formaat 2. Een kernel die deze achtergrond naar de texture kopieert.

45 Concurrency college 11 OpenCL (2) 46 OpenCL Background We maken een float buffer voor de achtergrond: OpenCLBuffer<float> background; void CreateBackgroundBuffer() float[] data = new float[960 * 600 * 4]; cave.copyto( screen, 0, 0 ); RenderOccluders(); for( int y = 0; y < 600; y++ ) for( int x = 0; x < 960; x++ ) float r = (float)((screen.pixels[x + y * 960] >> 16) & 255) / 256.0f; float g = (float)((screen.pixels[x + y * 960] >> 8) & 255) / 256.0f; float b = (float)(screen.pixels[x + y * 960] & 255) / 256.0f; data[(x + y * 960) * 4 + 0] = r; data[(x + y * 960) * 4 + 1] = g; data[(x + y * 960) * 4 + 2] = b; data[(x + y * 960) * 4 + 3] = 1; background = new OpenCLBuffer<float>( ocl, data );

46 Concurrency college 11 OpenCL (2) 47 OpenCL Background De clear kernel: kernel void clear_function( write_only image2d_t a, global float4* background ) // get the thread id; this will be our pixel id int id = get_global_id( 0 ); if (id >= (960 * 600)) return; int x = id % 960; int y = id / 960; write_imagef( a, (int2)(x, y), background[id] ); Vanuit C# stuurden we een float*, die we nu opeens float4* noemen. Dit mag: het (device) address blijft hetzelfde, maar wijst nu naar vectoren. Dit is handig wanneer we de background pixels vullen met write_imagef. Merk op dat we ook een int* op deze manier mogen casten naar een float*, of zelfs een char*... Hier zit geen enkele check op.

47 Concurrency college 11 OpenCL (2) 48 OpenCL Vectoren in OpenCL In de clear kernel gebruikten we het float4 type. Vectoren worden uitgebreid ondersteunt in OpenCL. Een vector initialiseren: float4 a = (float4)(1, 2, 3, 4 ); Rekenen met vectoren: float4 c = a + b; Componenten van vectoren: float x = position.x; float2 xy = pos3d.xy; float4 strange = pos3d.zxyy; // swizzle

48 Concurrency college 11 OpenCL (2) 49 OpenCL Respawn Om de particles die het scherm verlaten opnieuw te laten spawnen hebben we flink wat extra functionaliteit nodig: 1. de test op het verlaten van het scherm; 2. de spawn functie, te gebruiken wanneer de test dit aangeeft; 3. de rng die we in de spawn functie gebruiken; 4. de data die we tot nu toe nog niet gebruikten: direction, origin, color.

49 Concurrency college 11 OpenCL (2) 50 OpenCL Nieuwe Parameters kernel void device_function( write_only image2d_t a, global float* px, global float* py, global float* vx, global float* vy, global float* dx, global float* dy, global float* ox, global float* oy, global int* col, int baseseed )... kernel.setmemoryargument( 5, dxdata ); kernel.setmemoryargument( 6, dydata ); kernel.setmemoryargument( 7, oxdata ); kernel.setmemoryargument( 8, oydata ); kernel.setmemoryargument( 9, cldata ); kernel.setvalueargument<int>( 10, (int)randomint() );

50 Concurrency college 11 OpenCL (2) 51 OpenCL De Xor32 RNG uint RandomInt( uint* seed ) *seed ^= *seed << 13; *seed ^= *seed >> 17; *seed ^= *seed << 5; return *seed; float RandomFloat( uint* seed ) return RandomInt( seed ) * e-10f; Cicades leven 13 of 17 jaar ondergronds, waarna ze bovengronds paren. Deze priemgetallen helpen de Cicades overleven te midden van jagers waarvan de populatie iedere 2-5 jaar een piek kent. Groot priemgetal int id = get_global_id( 0 ); uint seed = (id + baseseed * ) * UL;

51 Concurrency college 11 OpenCL (2) 52 OpenCL By Reference C#: C++: uint RandomInt( ref uint seed ) uint RandomInt( uint& seed ) seed ^= seed << 13; seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed >> 17; seed ^= seed << 5; seed ^= seed << 5; return seed; return seed; OpenCL: uint RandomInt( uint* seed ) *seed ^= *seed << 13; *seed ^= *seed >> 17; *seed ^= *seed << 5; return *seed; C kent by reference niet. In plaats daarvan sturen we het adres van een variabele: een pointer dus. Om de waarde op dat adres te lezen of te schrijven gebruiken we * : dus *seed. De waarde van seed zelf is nog steeds een adres; dit wil je niet veranderen!

52 Concurrency college 11 OpenCL (2) 53 OpenCL By Reference OpenCL: Beter: uint RandomInt( uint* seed ) uint RandomInt( uint* seedptr ) *seed ^= *seed << 13; *seedptr ^= *seedptr << 13; *seed ^= *seed >> 17; *seedptr ^= *seedptr >> 17; *seed ^= *seed << 5; *seedptr ^= *seedptr << 5; return *seed; return *seedptr; Stel dat RandomInt een andere functie wil aanroepen die ook een uint* als parameter heeft. In dat geval sturen we seedptr, dus niet *seedptr: uint RandomInt( uint* seed ) uint* RandomInt( uint* seed ) ProcessSeed( seed ); ProcessSeed( seed ); return *seed; return *seed; // return uint pointer

53 Concurrency college 11 OpenCL (2) 54 OpenCL SpawnParticle De functie SpawnParticle heeft bijna alle data nodig: void SpawnParticle( int a, global float* px, global float* py, global float* vx, global float* vy, global float* dx, global float* dy, global float* ox, global float* oy, uint* seed ) px[a] = ox[a]; py[a] = oy[a]; float x = RandomFloat( seed ) * 0.01f f; float y = RandomFloat( seed ) * 0.01f f; vx[a] = dx[a] + x; vy[a] = dy[a] + y;

54 Concurrency college 11 OpenCL (2) 55 OpenCL Particle Tick Voorkomen dat een particle zomaar het scherm verlaat: if (py[id] >= 1 px[id] < 0 px[id] >= 1) SpawnParticle( id, px, py, vx, vy, dx, dy, ox, oy, &seed ); Integer kleur omzetten naar floating point kleur: float r = ((col[id] >> 16) & 255) / 256.0f; float g = ((col[id] >> 8) & 255) / 256.0f; float b = (col[id] & 255) / 256.0f; write_imagef( a, (int2)(ix, iy), (float4)( r, g, b, 1 ) );

55 Concurrency college 11 OpenCL (2) 56 OpenCL

56 Concurrency college 11 OpenCL (2) 57 OpenCL Functionaliteit Voor de laatste functionaliteit implementeren we het gedrag van de occluders. we zenden de occluder data mee met de kernel aanroep; we implementeren Intersect en Reflect in OpenCL; we maken de ParticleTick functie af.

57 Concurrency college 11 OpenCL (2) 58 OpenCL Occluder Data kernel void device_function( write_only image2d_t a, global float* px, global float* py, global float* vx, global float* vy, global float* dx, global float* dy, global float* ox, global float* oy, global float* p1x, global float* p1y, global float* p2x, global float* p2y, global float* Nx, global float* Ny, global int* col, int baseseed )

58 Concurrency college 11 OpenCL (2) 59 OpenCL Intersect bool Intersect( int idx, float2 A, float2 B, float* Ix, float* Iy, global float* p1x, global float* p1y, global float* p2x, global float* p2y, global float* Nx, global float* Ny ) // calculate intersection point of line (P1,P2) and occluder // float den = (A.x - B.x) * (p1y[idx] - p2y[idx]) - (A.y - B.y) * (p1x[idx] - p2x[idx]); if (den == 0) return false; float v0 = A.x * B.y - A.y * B.x, v1 = p1x[idx] * p2y[idx] - p1y[idx] * p2x[idx]; *Ix = (v0 * (p1x[idx] - p2x[idx]) - (A.x - B.x) * v1) / den; *Iy = (v0 * (p1y[idx] - p2y[idx]) - (A.y - B.y) * v1) / den; // see if intersection point is on both lines float t0 = (*Ix - A.x) / (B.x - A.x); float t1 = (*Ix - p1x[idx]) / (p2x[idx] - p1x[idx]); return (t0 > 0 && t0 < 1 && t1 > 0 && t1 < 1);

59 Concurrency college 11 OpenCL (2) 60 OpenCL Reflect float2 Reflect( int idx, float2 D, global float* Nx, global float* Ny ) return D - ((2.0f * (Nx[idx] * D.x + Ny[idx] * D.y)) * (float2)( Nx[idx], Ny[idx] ) );

60 Concurrency college 11 OpenCL (2) 61 OpenCL 5 * 16384

61 Concurrency college 11 OpenCL (2) 62 OpenCL 5 * 65536

62 Concurrency college 11 OpenCL (2) 63 OpenCL 5 * 4 * 65536

63 Concurrency college 11 OpenCL (2) 64 OpenCL 21M particles (1.25B/s) 5 * 64 * 65536

64 Agenda: Recap Bouncers - Intro Bouncers - Voorbereiding Bouncers OpenCL Conclusie

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

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

College 10: OpenCL (1)

College 10: OpenCL (1) Concurrency Gerard Tel / Jacco Bikker - november 2017 februari 2018 College 10: OpenCL (1) Welkom! Previously in Concurrency Concurrency College 8 Patronen 3 SIMD System.Numerics.Vectors namespace System.Numerics

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 20 punten op, opgave 2 levert 10 punten op, en opgave

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

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

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Tweede deeltentamen Gameprogrammeren Vrijdag 18 oktober 2013, 11.00-13.00 uur Naam: Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 6 punten op, en opgave

Nadere informatie

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Eerste deeltentamen Gameprogrammeren Vrijdag 27 september 2013, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, 8.30-10.30 uur Studentnummer: Het tentamen bestaat uit 2 opgaven. Opgaven 1 levert 15 punten op. Opgave 2 levert 25 punten op. Je cijfer

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Eerste deeltentamen Gameprogrammeren Vrijdag 26 september 2014, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten

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

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

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

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

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel

Nadere informatie

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het

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

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

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

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

Veel succes! 1. Gegeven is de volgende klasse:

Veel succes! 1. Gegeven is de volgende klasse: Dit tentamen is in elektronische vorm beschikbaar gemaakt door de TBC van A Eskwadraat. A Eskwadraat kan niet aansprakelijk worden gesteld voor de gevolgen van eventuele fouten in dit tentamen. Derde deeltentamen

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

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

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur Dit tentamen is in elektronische vorm beschikbaar gemaakt door de TBC van A Eskwadraat. A Eskwadraat kan niet aansprakelijk worden gesteld voor de gevolgen van eventuele fouten in dit tentamen. Aanvullende

Nadere informatie

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 2 opgaven. De eerste opgave levert 15 punten op, de tweede opgave 25 punten.

Nadere informatie

Practicum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18

Practicum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18 1/18 VU Numeriek Programmeren 2.5 Charles Bos Vrije Universiteit Amsterdam 3 april 2013 2/18 Overzicht Vlotte intro in Ox Hands on 3/18 Minimale elementen Minimale elementen Ox-programma: voeg de standaard

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

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

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur Naam: Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal

Nadere informatie

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

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur 1. Een Intent-object wordt gebruikt voor communicatie (a) van een Activity naar een bijbehorende View

Nadere informatie

NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. DOEL: SIMULATOR:

NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. DOEL: SIMULATOR: NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. Door mee te doen aan deze uitdaging kan je Nspyre laten zien wat je kan. Schrijf jij de beste oplossing dan is deze lego mindstorms nxt 2.0 set voor jou.

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

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

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

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

Objectgeoriënteerd Programmeren: WPO 3

Objectgeoriënteerd Programmeren: WPO 3 Objectgeoriënteerd Programmeren: WPO 3 1. Inhoud Eenvoudige (enkelvoudige) overerving, override, ToString(), base, private, public, protected, virtual 2. Oefeningen Demo: Scheepvaart A: Polygon A: Rekenmachine

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

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

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur Naam: Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 2 opgaven. De eerste opgave levert 15 punten op, de tweede opgave 25

Nadere informatie

IMP Uitwerking week 13

IMP Uitwerking week 13 IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het

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 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

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

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

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur Naam: Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 14 punten op, opgave 2 levert 12 punten op, en opgave

Nadere informatie

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Programmeren in C# Interfaces. Hoofdstuk 23

Programmeren in C# Interfaces. Hoofdstuk 23 Programmeren in C# Interfaces Hoofdstuk 23 Programmeren in C# 2 Gradaties overerving Klassieke overerving Iets functioneels uitbreiden Code duplicatie Niet teveel aanpassingen aan bestaande code Objecten

Nadere informatie

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, 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

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

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, 8.30-10.30 uur 1. Wat kan gezegd worden van het stukje programma b=!b (a) De expressie b=!b heeft altijd de waarde

Nadere informatie

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur Naam: Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, 8.30-10.30 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 10 punten op, en opgave

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

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse Objective-C Basis 23 april 2005, Eindhoven Patrick Machielse patrick@hieper.nl Algemeen // extensies Objective-C code in bestanden met.m extensie // commentaar moet! /* Alles hiertussen wordt genegeerd

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

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

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

Abstracte klassen & Interfaces

Abstracte klassen & Interfaces Abstracte klassen & Interfaces Overerving public class Vierhoek {... Vierhoek public class Rechthoek extends Vierhoek {... public class Ruit extends Vierhoek {... Rechthoek Ruit Elke rechthoek is een vierhoek.

Nadere informatie

datastructuren college 13

datastructuren college 13 datastructuren college 13 GUI deel 2 1 events for the GUI een event is iedere voor het programma van buiten komende gebeurtenis muis knop in, nog steeds in, los, bewogen... het GUI-systeem doet veel werk

Nadere informatie

Programmeren in C# Samenvatting van C#

Programmeren in C# Samenvatting van C# Programmeren in C# Samenvatting van C# Proceduraal Programmeren Functies (O: void + return, I: referentie of value) Arrays, Lijsten Lussen (for, while, do while) Condities, if-else, switch Variabelen,

Nadere informatie

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1 Commentaar In C: /* Deze functie berekent de omtrek van een cirkel */ float

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

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

Objectgeoriënteerd Programmeren: WPO 2a

Objectgeoriënteerd Programmeren: WPO 2a Objectgeoriënteerd Programmeren: WPO 2a 1. Inhoud Eenvoudige (enkelvoudige) overerving, override, ToString(), base, private, public, protected, virtual 2. Inleiding 2.1 Overerving In het voorgaande WPO

Nadere informatie

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST Scripting 2 ellipse(screenwidth/2, screenheight/2, 140,140); TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. DOOR THIERRY BRANDERHORST ANDROID APPLICATIES Tegenwoordig zijn er duizenden applicaties

Nadere informatie

Knowledgeable Referenceable Personable Accountable Scalable

Knowledgeable Referenceable Personable Accountable Scalable Knowledgeable Referenceable Personable Accountable Scalable 1 WebForms en JavaBeans bij Essent Energie OGH presentatie 3 juli 2003 2 Agenda Inleiding Eenvoudige Java Bean in Web Forms Demo Meer complexe

Nadere informatie

Informatica. Deel II: les 2. Leibniz - erven - digitaal. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Informatica. Deel II: les 2. Leibniz - erven - digitaal. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction Informatica Deel II: les 2 Leibniz - erven - digitaal Jan Lemeire Informatica deel II februari mei 2013 Parallel Systems: Introduction Leibniz 1646 1716 Jan Lemeire Pag. 2 / 48 Calculemus! Berechnen wir!

Nadere informatie

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een

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

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

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden : stapels, rijen en binaire bomen Walter Kosters week 12: 26 30 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 en Vierde programmeeropgave Othello programmeren we als volgt:

Nadere informatie

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014! Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan

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

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers); bestand voertuig.h biz. 1 van 2 #ifndef VOERTUIG H #define VOERTUIG H #include using std::string; class Voertuig { public: Voertuig(); Voertuig(const string& inschrijvingsnumrner, const string&

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

DALISOFT. 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool. Connect the TDS20620V2. Start DALISOFT

DALISOFT. 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool. Connect the TDS20620V2. Start DALISOFT TELETASK Handbook Multiple DoIP Central units DALISOFT 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool Connect the TDS20620V2 If there is a TDS13620 connected to the DALI-bus, remove it first.

Nadere informatie

is eigenlijk overbodig!

is eigenlijk overbodig! Array Declaratie Creatie Opvragen Wijzigen Lengte is eigenlijk overbodig! array: oject dat een rij waarden bevat, met speciale notaties Invoegen Achtervoegen String [ ] a; a = new String[10]; a[5] a[5]

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Ontwerp van Informatiesystemen

Ontwerp van Informatiesystemen 1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents

Nadere informatie

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar 2006-2007 23 Januari, 2007 **BELANGRIJK** : Schrijf je naam onderaan dit blad Leg volgende 3 begrippen kort en bondig uit : a. Concurrent

Nadere informatie

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari mei 2014 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic

Nadere informatie

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 2 september 2007 voor deeltijdstudenten Kop van Zuid Rotterdam, 3 juni 2007 Even voorstellen Naam: Wessel Oele(31) Docent bij opleiding technische informatica Kamer: I210 (tweede verdieping, links de gang

Nadere informatie

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 4EE11 Project Programmeren voor W College 2, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Terugblik Functies Organisatie (architectuur) van programma s Arrays Structuren

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

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Kwis (3) class X { public void a() { System.out.println(x); public static void main(string[] args) { X x = new X(); Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static

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

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

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

Module Programmeren in Javascript

Module Programmeren in Javascript Module Programmeren in Javascript Spel: PONG Pong: uiterlijk In deze module zullen we alle onderdelen die we tot nu toe geleerd hebben samen brengen in het spel Pong. We willen dat het spel er uiteindelijk

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

Objectgeoriënteerd programmeren in Java 1

Objectgeoriënteerd programmeren in Java 1 Objectgeoriënteerd programmeren in Java 1 CPP Javaprogrammeur Bijeenkomst 3 Leereenheden 7, 8, 9 De Java API Java bevat een grote bibliotheek standaardklassen: de Java API Voorbeelden java.lang basisklassen

Nadere informatie

Settings for the C100BRS4 MAC Address Spoofing with cable Internet.

Settings for the C100BRS4 MAC Address Spoofing with cable Internet. Settings for the C100BRS4 MAC Address Spoofing with cable Internet. General: Please use the latest firmware for the router. The firmware is available on http://www.conceptronic.net! Use Firmware version

Nadere informatie

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd

Nadere informatie

Object Oriented Programming

Object Oriented Programming Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, uur

Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, 8.30-10.30 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 10 punten op, en opgave

Nadere informatie