College 11: OpenCL (2)
|
|
- Jonas ter Linde
- 5 jaren geleden
- Aantal bezoeken:
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 2016 Welkom! Agenda: Introductie OpenCL OpenCL / C# Workgroups Tot Slot Concurrency college 11 OpenCL Primer 3 Introductie Heterogene Systemen
Nadere informatieCollege 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 informatieDatatypes 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 informatieDerde 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 informatieConcurrency. 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 informatieUniversiteit 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 informatieVeel 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 informatieUitwerkingen 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 informatieVeel 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 informatieDerde 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 informatieVeel 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 informatieConcurrency. 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 informatieUitwerking 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 informatieUitwerking 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 informatieModelleren 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 informatieUitwerkingen 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 informatieUitwerking 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 informatieIntroductie 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 informatieHOGESCHOOL 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 informatieVoorbeeld: 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 informatieVakgroep 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 informatieVeel 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 informatieEen 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 informatieTweede 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 informatieAanvullende 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 informatieAanvullende 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 informatiePracticum 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 informatieProgrammeren 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 informatieKompas. 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 informatieEerste 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 informatieUitwerking 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 informatieNSPYRE 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 informatieCollege 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 informatieALGORITMIEK: 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 informatieDatastructuren: 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 informatieUitwerking 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 informatieProgrammeren 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 informatieObjectgeorië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 informatieFOR 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 informatieCollege 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 informatieAanvullende 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 informatieIMP 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 informatieAanvullende 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 informatieTentamen 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 informatieDatastructuren 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 informatieTentamen 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 informatieVeel 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 informatieUitwerking 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 informatieProgrammeren 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 informatieTweede 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 informatieSyntax 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 informatieUitwerking 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 informatieTweede 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 informatiehttp://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 informatieDeel 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 informatieObjective-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 informatieHertentamen 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 informatieKleine 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 informatieStacks 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 informatieAbstracte 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 informatiedatastructuren 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 informatieProgrammeren 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 informatieC++ 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 informatieTentamen 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 informatieCollege 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 informatieObjectgeorië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 informatieScripting 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 informatieKnowledgeable 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 informatieInformatica. 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 informatieUitwerkingen 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 informatieCollege 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 informatieDergelijke 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 informatieDatastructuren: 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 informatieInleiding 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 informatieDerde 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 informatieModelleren 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 informatiewat 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 informatieint 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 informatieInstructies 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 informatieDALISOFT. 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 informatieis 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 informatieDerde 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 informatieOntwerp 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 informatieExamen 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 informatieInformatica. 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 informatieTweede 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 informatieProgrammeren 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 informatie4EE11 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 informatieOvererving & 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 informatieKwis (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 informatieModelleren 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 informatieVoorbeeldtentamen 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 informatieDe 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 informatieModule 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 informatieHoofdstuk 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 informatieObjectgeorië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 informatieSettings 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 informatieInformatica. 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 informatieObject 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 informatieDerde 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