Computer Architectuur 2016 Handleiding bij de CUDA opdracht

Maat: px
Weergave met pagina beginnen:

Download "Computer Architectuur 2016 Handleiding bij de CUDA opdracht"

Transcriptie

1 Computer Architectuur 2016 Handleiding bij de CUDA opdracht Voor opdracht vier kijken we naar een eenvoudige image filter pipeline en naar een mogelijke versnelling hiervan met behulp van de GPU. Bij een dergelijke filter pipeline (niet te verwarren met de pipeline in de processor) voeren we achtereenvolgend meerdere filters uit op één afbeelding, waarbij deze filters een cumulatief effect hebben. Het startpunt, te downloaden vanaf de website, bevat de complete pipeline geschreven voor de CPU. We zullen deze filters eerst goed bestuderen in hun huidige vorm. Vervolgens is het de bedoeling de bestaande code te porten naar de GPU met behulp van CUDA. CUDA is de GPGPU tookit van NVIDIA en werkt alleen met videokaarten met een NVIDIA GPU. Er is voor CUDA gekozen vanwege de laagdrempelige instap en de goede documentatie. Zie voor de documentatie van de CUDA API: Let op dat dit versie 8.0 is, wij gebruiken 5.0! Vooral de functies onder Modules Memory Management zullen van pas komen. 1 Startpunt Om het startpunt te kunnen compileren heb je, naast gcc, versie 5.0 van nvcc nodig. nvcc is NVIDIA s C(++) compiler voor CUDA. Verder gebruikt het startpunt SDL2 om de afbeelding op het scherm weer te geven en CMake als buildtool. Als je de opdracht thuis zou willen doen heb je uiteraard ook een NVIDIA videokaart met CUDA nodig (generatie Fermi of beter). Het startpunt is te compileren met de bijgeleverde makefiles. Pak het archief uit en typ achtereenvolgend./configure cd build make Vervolgens kun je het programma draaien met een Windows Bitmap (.BMP) afbeelding als argument. Bijvoorbeeld met het meegeleverde test2048.bmp ca_cuda../test2048.bmp Als het goed is, verschijnt na enige tijd de (bewerkte) afbeelding op het scherm. In de terminal verschijnt eveneens de gemiddelde performance: zo n 7 MB/s throughput op de machines in de practicum zaal. Dat kan natuurlijk beter. Met de meest eenvoudige implementatie zou je straks meer dan 1 GB/s op de GPU moeten halen. Je kunt ook met andere afbeeldingen experimenteren. Let er wel op dat de pipeline zgn. linear gamma (waarover later meer) verwacht en dat hele grote afbeeldingen op de CPU erg lang duren. 2 Aanpak We doorlopen nu het algemene idee achter het porten van CPU code naar CUDA. Zoals tijdens college is behandeld, bestaat de GPU uit honderden simpele cores ipv enkele complexe cores zoals bij de CPU. De grootste uitdaging is om deze cores zo goed mogelijk bezig te houden. Dit doen we door een eenvoudige operatie uit ons probleem te isoleren en deze parallel uit te zetten op de vele cores. Zo n operatie heet in CUDA een kernel. Een kernel is een simpele C-functie die vele keren parallel wordt uitgevoerd. Een enkele instantie van zo n kernel noemen we een thread. Threads worden vervolgens verdeeld over blocks 1 en die blocks staan weer in een grid. Bij de aanroep van 1 Binnen blocks worden threads ook nog in warps ingedeeld, dit is vooral voor optimalisatie relevant. Zie voor meer informatie de CUDA documentatie 1

2 de kernel mag de programmeur zelf bepalen hoe groot die blocks zijn en hoe de blocks en het grid worden gerangschikt: één-, twee, drie-dimensionaal. Dit is belangrijk omdat threads binnen één block geheugen delen en dus met elkaar kunnen communiceren en synchroniseren. 2.1 Kernels Stel we hebben we volgende CPU code: int A[100][100]; // Initialiseer op wat voor wijze dan ook int B[100][100]; for( int x =0; x < 100; x++ ) for( int y =0; y < 100; y++ ) B[x][y] =10 * A[x][y]; Dit is een typische geneste for-loop zoals die ook in de filters voorkomen. Het is in dit geval makkelijk te zien dat de loop-body, namelijk de array toekenning, een operatie is die we parallel kunnen uitvoeren (er bestaan geen loop-carried dependences). We beginnen door deze operatie te isoleren in een kernel: een C-functie van het type global void: global void mykernel( int* A, int* B, int N ) { // We nemen nu N voor het aantal kolommen, dus N=100 B[y+N*x] = 10 * A[y+N*x]; // Andere indexering: lineair geheugen ipv 2D-array } Nu hebben we eerst nog x en y nodig. We gaan er van uit dat we een grid maken dat 100 bij 100 groot is. Dus voor elk element in het array, is er één thread. Hoe dat precies is ingedeeld, bijvoorbeeld 10 bij 10 blocks met elk 10 bij 10 threads, is nu nog niet belangrijk. We gebruiken in dit geval de globale constanten threadidx, blockidx en blockdim die door CUDA worden gedefiniëerd. Bijvoorbeeld x verkrijgen we met: // in mykernel() const int x = threadidx.x + blockdim.x * blockidx.x; Analoog zijn ook y en een eventuele z af te leiden. Vervolgens moeten we onze kernel aanroepen en eerst bepalen we daartoe hoe het grid precies ingedeeld zal worden: const int N = 100; // Aantal rijen en kolommen in ons array const dim3 blocksize( 10, 10 ); // Aantal threads per block // Aantal blocks. let op: deze deling kan een rest hebben! const dim3 numblocks( N / blocksize.x, N / blocksize.y ); Het totaal aantal blocks is dus afhankelijk van de blocksize en het aantal elementen. Verschillende verhoudingen zijn mogelijk die elk hun voor- en nadelen hebben. Het fine-tunen van de blocksize kan een performancewinst geven. Let wel op dat er een maximum aantal threads per block is en dat dit verschilt per architectuur versie. Tot slot roepen we nu onze kernel aan, in zijn simpelste vorm: mykernel<<<numblocks,blocksize>>>(dev_a, dev_b, N); Tussen de driedubbele vishaken vinden we achtereenvolgend de blocksize en het aantal blocks terug. Een optionele derde parameter geeft mee hoeveel bytes shared memory moeten worden gereserveerd per block. In de API documentatie vind je meer hierover. Nu hebben we echter nog een A en B nodig... 2

3 2.2 Device memory management Om de arrays A en B voor onze kernel te maken, hebben we toegang nodig tot het geheugen van de GPU ( device memory, het geheugen van de CPU heet host memory ). De versie van CUDA die wij gebruiken ondersteunt alleen de meest simpele vorm van device memory management. Dit bestaat uit twee operaties: handmatig alloceren/vrijgeven en kopiëren van en naar device memory. Alloceren doen we met de functie cudamalloc(void** devptr, size t size) (vergelijkbaar met de C-functie malloc()). Zoals je ziet heeft deze functie twee parameters ipv. één. Het eerste argument is een pointer naar een zgn. device pointer. Een device pointer bevat een geheugenadres dat zich in het videogeheugen bevindt en is dus niet af te lopen vanuit de CPU. Toch kunnen we deze pointer opslaan en hem later meegegeven aan een kernel zodat deze het corresponderende videogeheugen kan benaderen. Eerst zullen we dus de arrays A en B alloceren op de GPU: int *dev_a, *dev_b; if( cudamalloc( &dev_a, N )!= cudasuccess ) // Handel fout af // Analoog voor B Merk op dat we in CPU code een device pointer vaak beginnen met dev of d om verwarring te voorkomen. Het aflopen van een device pointer op de CPU resulteert namelijk een onzinnige/illegale memory operatie! We kunnen echter wel lezen en schrijven naar het videogeheugen met behulp van de functie cudamemcpy(). Deze functie kent de volgende parameters: cudaerror_t cudememcpy( void* dst, const void* src, size_t count, enum cudamemcpykind ) De eerste drie argumenten lijken op de gewone memcpy(), terwijl het vierde argument aan CUDA vertelt in welke richting de bewerking plaatsvindt. Er zijn vier mogelijkheden, waarvan we in elk geval cudamemcpyhosttodevice en cudamemcpydevicetohost nodig hebben. In het eerste geval is dst dus een device pointer en src een gewone pointer, bij het tweede vice-versa. Het kopiëren van A naar de GPU zou er dus als volgt uit kunnen zien: int A[N][N]; // Initialiseer op de host int *dev_a; // Device pointer if( cudamemcpy( dev_a, &A[0][0], N*N, cudamemcpyhosttodevice )!= cudasuccess ) // Handel fout af Na het uitvoeren van de kernel moet er dus nog een soortgelijke operatie plaatsvinden waarbij het resultaat in array B weer wordt gekopiëerd naar het host geheugen. Dergelijke operaties kunnen veel tijd kosten als de dataset groot is en het is dan ook zaak om zorgvuldig te plannen wanneer er het beste gekopiëerd kan worden. In het geval van onze image pipeline kunnen we bijvoorbeeld volstaan met de bronafbeelding eenmaal te kopiëren en na afloop het resultaat op te halen. Verder is het ook mogelijk een cudamemcpy() opdracht asynchroon te draaien, zodat de CPU in de tussentijd iets anders kan doen. Zie hiervoor de gelinkte API documentatie. 2.3 Fout afhandeling Bijna alle cuda* functies geven een foutcode in de vorm van cudaerror t. Net als bij bijvoorbeeld Unix system calls is het altijd wenselijk om deze foutcodes te inspecteren en eventueel af te vangen. In het startpunt is in het bestand image cuda.cu reeds de macro CUDA ASSERT gedefiniëerd. Door CUDA calls in deze macro te verpakken wordt het programma automatisch afgebroken als er een fout optreedt: CUDA_ASSERT( cudamemcpy( dev_a, A, N, cudamemcpyhosttodevice ) ); 2.4 Afbeeldings-arrays en verpakte RGBA Hoewel we met tweedimensionale afbeeldingen werken worden deze gewoonlijk opgeslagen in een ééndimensionaal array. Om toch makkelijk een pixel te kunnen vinden voor een bepaalde (x, y), 3

4 kun je het bekende rekensommetje A[x + W y] (column-major) of A[y + H x] (row-major) gebruiken. In het bestand util.h is echter ook de macro GET PIXEL gedefinëerd: deze neemt vijf argumenten en geeft een pointer naar de pixel terug. Deze argumenten zijn achtereenvolgend een pointer naar het eerste element (of het array), de breedte, de hoogte, en de x en y. Het bijkomende voordeel is dat deze macro automatisch clamp to border simuleert: als je probeert voorbij de afbeelding te lezen wordt een pointer naar de dichtsbijzijnde rand geretourneerd (handig voor blur!). De GET PIXEL macro werkt op zowel host- als device pointers. Alle afbeeldings-arrays zijn van het type uint32 t en bevatten één element per pixel. Dit betekent dat er 32 bits per pixel worden gereserveerd en wel volgens het RGBA8888 schema. In RGBA8888 bestaat iedere pixel uit vier kanalen van elk 8 bits: rood, groen, blauw en alpha. Rood is hierbij de meeste significante byte, alpha de minst significante byte. Om bijvoorbeeld het rode kanaal te extraheren doet men: uint32_t pixel = *GET_PIXEL( A,w,h,x,y ); int rood = ( pixel >> 24 ) & 0xff; En zo analoog voor de andere kanalen. Het alpha kanaal geeft dekkendheid (opacity) weer en moet in ons geval altijd 0xFF blijven. De meeste operaties op een afbeelding worden echter in het floating-point domein uitgevoerd, terwijl onze arrays uit integers bestaan. Om dit op te lossen gaan we de pixels in- en uitpakken. Met inpakken bedoelen we het encoderen van een vector < r, g, b, a > als één integer, terwijl uitpakken de omgekeerde operatie is. Zolang men in het float-domein werkt hebben alle kanalen 32 bits precisie, na het inpakken is dit slechts 8 bits. Daarom, nog afgezien van de performance, moet in- en uitpakken tot een minimum worden beperkt. Het bestand util.h definiëert een aantal handige macro s waarmee deze operaties makkelijker worden gemaakt. Ter illustratie het onderstaande voorbeeld: /* We halen een pixel uit A, vermenigvuldigen deze met een constante factor en schrijven deze weer terug */ uint32_t pixel = *GET_PIXEL( A,width,height,x,y ); // Pak een pixel (x,y) uit A float4 pixel_rgba, factor, result; RGBA( factor,.5f,.5f,.5f, 1.f ); // factor = ( ) RGBA_unpack( pixel_rgba, pixel ); // pak pixel uit RGBA_mult( result, pixel_rgba, factor ); // result = pixel_rgba * factor RGBA_pack( pixel, pixel_rgba ); // pak pixel weer in *GET_PIXEL( A,width,height,x,y ) = pixel; In de host code wordt het type rgba t gebruikt om een vector met vier (float) componenten te representeren. Deze componenten kunnen ook individueel benaderd worden met de members x, y, z, w. Op die volgorde corresponderen zij met de kanalen r, g, b en a. Dus my rgba.z geeft het blauwe kanaal. In de CUDA code moet het ingebouwde type float4 worden gebruikt ipv. rgba t.. Deze twee typen werken verder op exact dezelfde manier. 3 Filters De huidige image pipeline bevat drie filters: gamma correctie, selective grayscale en Gaussian blur. Hoewel het voor het porten van de codes niet strikt noodzakelijk is om te weten hoe deze filters werken, lichten we deze drie filters we beknopt toe. 3.1 Gamma correctie Gamma correctie is ooit bedacht om te corrigeren voor de niet-lineaire respons van de CRT monitor. Hoewel het in het LCD-tijdperk niet meer nodig is, heeft men voor compatibiliteit toch besloten om het te handhaven. Een LCD scherm simuleert daarom het gedrag van de oude CRT 4

5 monitor en verwacht daarom dat alle beelden als gamma-2.2 worden aangeleverd. Onze pipeline neemt een lineaire afbeelding als invoer en de eerste stap is dan ook om daar gamma 2.2 correctie op los te laten. Men berekent de gamma correctie L van een willekeurig kanaal L als volgt: L = L 1/2.2 Zo n exponentiële functie is nogal traag, vandaar deze in de host code is vervangen door een LUT (look-up table). Voor elke mogelijke invoerwaarde bevat de LUT een target waarde in gamma-2.2. Omdat er maar 8 bits per kanaal zijn, is de LUT relatief klein. Zie ook de file gamma.h. Met de LUT is het verder een kwestie van elke pixel vervangen door zijn nieuwe waarde. Deze filter is geïmplementeerd in image.c/image applygamma(). 3.2 Selective grayscale Selective grayscale converteert een deel van een afbeelding naar grijswaarden, maar behoudt een ander deel in kleur. In dit geval is gekozen om één kleur te behouden en de rest grijs te maken. Een kleur wordt opgegeven als een hue op de kleurcirkel: deze loopt van 0 tot 360 waarbij 0 = 360 = rood. De functie image.c/image computehue() wordt vervolgens gebruikt om de hue van een gegeven rgba vector te berekenen. Als deze hue binnen de gegeven hue (en +/- het argument spread) ligt, blijft de kleur behouden. In alle andere gevallen berekenen we de grijswaarde. Die grijswaarde Y berekenen we aan de hand van de volgende formule: Y = A(0.2126R G B) Deze filter is geimplementeerd in image.c/image selectivegrayscale(). 3.3 Gaussian blur De Gaussiaanse blur is een optisch niet-accurate vervaging waarbij de omliggende pixels volgens de Gaussiaanse functie worden gewogen. Het gewicht dat aan een bepaalde buurpixel wordt toegekend heet een coëfficiënt. De mate van vervaging en het aantal betrokken buurpixels wordt bepaalt door de parameter σ in de Gaussiaanse functie: f(x) = 1 µ)2 exp( (x 2σ2 π 2σ 2 ) De eerste term is constant, wordt vooraf berekend en wordt ook wel de normalisatie factor genoemd. In de tweede term wordt (x µ) vervangen door i. i is steeds een discrete afstand tussen de oorspronkelijke pixel en de buurpixel: hoe verder weg, hoe groter i, hoe kleiner de invloed van die pixel. Afhankelijk van de implementatie, worden er 3σ buurpixels aan elke kant (links, rechts, onder, boven) gebruikt. Meestal worden de verticale en horizontale richting apart uitgevoerd, waarbij de eerste als invoer voor de tweede dient. Hierdoor onstaat er eigenlijk een matrix aan coëfficiënten met de afmetingen N = M = 6σ + 1. Deze matrix noemt men ook wel de Gaussian kernel (niet te verwarren met een kernel in CUDA). Hoe deze kernel precies moet worden toegepast op iedere pixel is een bron van discussie: elke coëfficiënt kan steeds worden berekend of alle coëfficiënten kunnen vooraf in een 2D array worden geplaatst (er zijn nog meer opties!). Welke methode het beste werkt is afhankelijk van vele factoren, waaronder het type hardware. De CPU implementatie in image.c/image gaussianblur() gebruikt de naïeve methode waarbij de coëfficiënten steeds opnieuw worden berekend. 4 Optimalisatie De stream-processor architectuur van de GPU verschilt dermate van de reguliere processor dat de meeste code die 1:1 geport is vanaf de CPU, niet het maximale uit de hardware zal halen. Door 5

6 aanpassingen aan de CUDA code te maken kunnen we de performance verbeteren. Voordat we deze aanpassingen kunnen maken, moeten we weten waar de performanceproblemen zich voordoen. We kunnen verschillende parameters meten. We zullen hier kijken naar occupancy en de throughput. 4.1 Occupancy en throughput Bij occupancy kijken we naar de resources in GPU die daadwerkelijk door ons programma gebruikt worden. Een voorbeeld hiervan is het aantal threads: stel dat een bepaalde GPU maximaal 2048 threads per block kan draaien, maar blijkt dat een specifiek programma maar in 512 threads per block gedraaid wordt. De occupancy zou ons dan bijvoorbeeld kunnen leren dat het aantal registers dat per thread wordt gebruikt, een bottleneck vormt - er zijn immers maar een beperkt aantal registers per block beschikbaar. Een mogelijk actie zou dan kunnen zijn om het aantal gebruikte registers te beperken, indien mogelijk. We kunnen het gedrag van CUDA programma s tijdens het draaien meten mbv. een profiler. Hiervoor gebruiken we nvprof (dat sterk lijkt op Linux perf). Onderstaande aanroep geeft een lijst met mogelijke grootheden die we tijdens de executie van ons programma kunnen vastleggen. source /vol/share/groups/liacs/scratch/ca2016/ca2016.bashrc nvprof --query-events Verder kun je nvprof op het programma van deze opdracht met bijvoorbeeld: nvprof -s./ca_cuda../test2048.bmp De opgenomen informatie wordt naderhand naar mijnlog.txt weggeschreven. Het gebruik van nvprof is redelijk ingewikkeld en voor deze opdracht is het ook toereikend om naar de throughput te kijken. De throughput wordt in het startpunt al berekend voor zowel de CPU als de GPU. We gebruiken hiervoor de grootte van de invoerafbeelding en delen die door de tijd die het kost om deze te verwerken. De throughput geeft daarmee een makkelijke indicatie of en hoeveel de performance verbetert, maar het is niet zo precies als de occupancy. 4.2 Branching De stream processors werken optimaal als alle threads in een warp precies hetzelfde doen. Bij bijvoorbeeld if-condities is hier niet altijd sprake van: sommige threads moeten wel de if-clause uitvoeren en andere niet. Wat er in feite gebeurt is dat alle threads de if-clause uitvoeren, maar alleen die threads waarvoor de if-clause true was zullen de resultaten van de berekening wegschrijven (vergelijk predicated instructies en masking uit vectorarchitecturen). Dus bij het gebruik van veel if-condities bestaat het gevaar dat sommige threads regelmatig nutteloos werk verrichten wat de efficientie niet ten goede komt. Voor eenvoudige if-statements probeert de CUDA compiler predicated instructies te genereren, zoals hierboven omschreven. Voor inwikkeldere gevallen is dit niet mogelijk. Deze treden bijvoorbeeld op bij loops waar gebruik wordt gemaakt van een conditionele break. Sommige threads springen al uit de loop, andere niet. In zo n geval moeten de threads met een kort executie pad wachten op de threads met een langer executie pad om zo te synchroniseren. Dit noemt men divergence en dit is iets dat je wanneer mogelijk wilt vermijden. 4.3 Shared memory Naast global memory beschikt elk (thread)block ook over een stukje shared memory. Dit is een klein (meestal KB), maar supersnel geheugen dat door alle threads binnen hetzelfde block toegankelijk is. Dit shared memory is toegankelijk als één groot array vanuit de kernel en zowel statisch (grootte vooraf bekend) als dynamisch te alloceren. Aangezien de dynamische allocatie in de meeste gevallen het handigste is, volgt daarvan een klein voorbeeld: 6

7 // Kernel global void dynamicreverse(int *d, int n) { extern shared int s[]; int t = threadidx.x; int tr = n-t-1; s[t] = d[t]; syncthreads(); d[t] = s[tr]; } // Aanroep dynamicreverse<<<1,n,n*sizeof(int)>>>(d_d, n); Een aantal zaken zijn hier belangrijk: het dynamische shared memory wordt met de extern shared storage class gedeclareerd en kan slechts één type hebben. Verder wordt in de aanroep naar de kernel een derde parameter tussen de vishaken meegegeven: de grootte die voor het shared memory moet worden gereserveerd in bytes. Tot slot blijkt uit deze code nog een ander belangrijk concept, namelijk de synchronisatie barrière. Door de functie syncthreads() aan te roepen, wordt gewacht totdat alle threads in dat block de instructies tot aan de barrière hebben uitgevoerd. De voorbeeldcode gebruikt dit mechanisme om later een read-after-write te voorkomen. De bovenstaande code en nog meer uitleg over shared memory zijn op de onderstaande URL te vinden: Inspiratie voor optimalisaties Vanwege het ontwerp van de architectuur is een memory operatie in CUDA vrij kostbaar. Met name random-access patronen kunnen de performance zeer nadeling beïnvloeden. Daarom richten veel optimalisaties zich op het verbeteren van de memory-access patronen en het vermijden van geheugentoegang. Soms is het daarom beter om extra rekenwerk te verrichten, dan om die waarden tussentijds op te slaan. Een aantal suggesties zijn dan: De gamma functie gebruikt een LUT, die staat ook in het global memory. Vervang de LUT door de gamma functie, verbetert er iets? Of heeft het meer zin om per thread meerdere pixels te berekenen? En dan in een thread block als eerste de LUT uit globaal geheugen te laden en in shared memory op te slaan? Of is berekenen aan de hand van een functie en direct opslaan in shared memory juist sneller? De Gaussian blur bewaart de eerste pass in de invoer array en gebruikt deze als invoer voor de tweede pass. Door maar één pass te gebruiken, zou je het aantal memory operaties kunnen halveren. Hoe zou je dit aan moeten pakken? Kun je hier ook shared memory gebruiken? Er zijn ook nog diverse andere ingrepen te bedenken die de performance zouden kunnen verbeteren. Denk bijvoorbeeld aan: Vervang de tijdelijke buffers door arrays van het type float4 en sla zo het tussentijdse in- /uitpakken van de RGBA data over. Deze tijdelijke buffers zullen daardoor groter worden (16 Bpc ipv 4 Bpc), maar het levert wel een prestatiewinst op. Experimenteer met de blocksize. Meer of minder threads per block kan de occupancy beïnvloeden en daarmee de prestaties. Probeer meer werk per thread te doen (threads hebben ook een kleine overhead). Je zult dan een for-loop schrijven in de kernel en het aantal thread blocks verkleinen. 7

8 Gebruik zoveel mogelijk een vector (type float4) ipv losse componenten. Heeft het zin om gamma correctie en greyscale te combineren in een enkele kernel? Voor blur: geeft een single-pass implementatie betere performance vergeleken met een twopass implementatie? Kun je in een single-pass implementatie goed gebruik maken van shared memory om de performance te verbeteren? We dagen je natuurlijk ook graag uit om eigen optimalisaties te verzinnen en te testen. Zorg in alle gevallen dat je even kort in je verslag toelicht waarom een bepaalde optimalisatie zou moeten werken en wat je in de praktijk gevonden hebt. 4.5 Verdere mogelijkheden Er zijn nog veel meer mogelijkheden, zoals bijvoorbeeld het gebruik van de hardware texture-units. Deze kunnen worden benaderd via texture references en surfaces. We zullen deze in dit document niet verder bespreken. Als je hier meer over wilt leren, verwijzen we je naar de (zeer) uitgebreide CUDA documentatie: 8

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

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

Nadere informatie

Computerarchitectuur. Ch 4. Data-Level Parallelism

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

Nadere informatie

Nederlandse samenvatting (Dutch summary)

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

Nadere informatie

Java virtuele machine JVM

Java virtuele machine JVM Implementatie Java Java virtuele machine JVM Java programma vertaald naar byte code instructies Byte code instructies uitgevoerd door JVM JVM is processor architectuur kan in principe in hardware worden

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

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

IN1805 I Operating System Concepten

IN1805 I Operating System Concepten IN1805 I Operating System Concepten Hoofdstuk 12: Mass-storage structure 9-1 Secondary storage (1) voornamelijk disks kleinst leesbare eenheid: sector plaats van een sector volledig bepaald door: drive

Nadere informatie

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

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

Nadere informatie

Computerarchitectuur. Ch 4. Data-Level Parallelism

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

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

Vectoren, matrices en beeld. Figuur: Lena. Albert-Jan Yzelman

Vectoren, matrices en beeld. Figuur: Lena. Albert-Jan Yzelman Vectoren, matrices en beeld Figuur: Lena Vectoren, matrices en beeld Hoe coderen we foto s zodat ze te gebruiken zijn op computers? Wat verwachten we van de bestandsgrootte? Hoe verkleinen we de benodigde

Nadere informatie

Computerarchitectuur en netwerken Toets 1 4 okt

Computerarchitectuur en netwerken Toets 1 4 okt 11.00 13.00 De open vragen moet je beantwoorden op tentamenpapier. De multiple-choice antwoorden moet je op het vragenblad invullen in de rechtervakjes en dat blad inleveren. Schrijf je naam, studentnummer

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

Vraag 1 (2 punten) (iii) Een lees-opdracht van virtueel adres 2148 seg 0, offset 2148 - idem

Vraag 1 (2 punten) (iii) Een lees-opdracht van virtueel adres 2148 seg 0, offset 2148 - idem Tentamen A2 (deel b) 24-06-2004 Geef (liefst beknopte en heldere) motivatie bij je antwoorden; dus niet enkel ja of nee antwoorden, maar ook waarom. Geef van berekeningen niet alleen het eindresultaat,

Nadere informatie

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

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

Nadere informatie

Cover Page. Author: Vu, Van Thieu Title: Opportunities for performance optimization of applications through code generation Issue Date:

Cover Page. Author: Vu, Van Thieu Title: Opportunities for performance optimization of applications through code generation Issue Date: Cover Page The handle http://hdl.handle.net/1887/18622 holds various files of this Leiden University dissertation. Author: Vu, Van Thieu Title: Opportunities for performance optimization of applications

Nadere informatie

Tentamen Computersystemen

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

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Tim Mallezie Architectuur van besturingssystemen: Vraag A2.

Tim Mallezie Architectuur van besturingssystemen: Vraag A2. Procesbeheer: kenmerken van moderne besturingssystemen. 1. Bespreek de (drie) meest typische kenmerken van moderne besturingssystemen. 2. In hoeverre beantwoorden UNIX, Linux en Windows NT hieraan? Geef

Nadere informatie

Handleiding VirtualBox

Handleiding VirtualBox Pagina 1 van 18 Handleiding VirtualBox Inhoud 1) Wat is VirtualBox?... 2 2) Installatie... 2 3) Schermopbouw VirtualBox... 6 4) Downloaden van Linux ISO... 7 5) Virtuele Machine aanmaken... 7 6) Besturingssysteem

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

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

Nadere informatie

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

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

Nadere informatie

Uitwerking oefententamen Computerarchitectuur December 2016

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

Nadere informatie

Courbois Software WebDesignEditor. WYSIWYG-Editor

Courbois Software WebDesignEditor. WYSIWYG-Editor Courbois Software WebDesignEditor WYSIWYG-Editor 2006-2012 Courbois Software Beuningen Fazantlaan 63, 6641 XW Beuningen. www.courboissoftware.com & www.cs-webdesign.nl 024 677 25 46 - info@cs-webdesign.nl

Nadere informatie

1 Aanvulling cosy deeltijd

1 Aanvulling cosy deeltijd 1 Aanvulling cosy deeltijd 1.1 Multiprocessor versus multicomputer Het kenmerk van een multiprocessor is dat meer CPU hetzelfde geheugen delen. Voordeel van deze aanpak is het relatief eenvoudige programmeermodel.

Nadere informatie

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

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

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

Uitleg. Welkom bij de Beverwedstrijd 2006. Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden.

Uitleg. Welkom bij de Beverwedstrijd 2006. Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden. Uitleg Welkom bij de Beverwedstrijd 2006 Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden. Je krijgt 5 vragen van niveau A, 5 vragen van niveau B en 5 vragen van niveau C. Wij denken

Nadere informatie

Dynamisch geheugen beheer

Dynamisch geheugen beheer Dynamisch geheugen beheer + Normaal wordt laats in het werkgeheugen gereserveerd tijdens de comilatie aan de hand van de declaraties van de variabelen. + Deze geheugenreservering is statisch: in het bronbestand

Nadere informatie

Assembly en Assemblers. Processoren 5 januari 2015

Assembly en Assemblers. Processoren 5 januari 2015 Assembly en Assemblers Processoren 5 januari 2015 Doel van vandaag Ik heb al losse eindjes over assembly verteld en een voorbeeldprogramma doorlopen. vandaag: algemeen + systematisch overzicht Programmeertalen

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Opdracht 3: Baanintegratie: Planeet in een dubbelstersysteem

Opdracht 3: Baanintegratie: Planeet in een dubbelstersysteem PLANETENSTELSELS - WERKCOLLEGE 3 EN 4 Opdracht 3: Baanintegratie: Planeet in een dubbelstersysteem In de vorige werkcolleges heb je je pythonkennis opgefrist. Je hebt een aantal fysische constanten ingelezen,

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Beknopte handleiding voor Derive 5.0 for Windows

Beknopte handleiding voor Derive 5.0 for Windows - Lesbrief Beknopte handleiding voor Derive 5.0 for Voorspelbaarheid en Populaties in de tijd Doelgroep Klas 5 t/m 6 havo en vwo Vakken en domeinen Algemene natuurwetenschappen VWO Wiskunde VWO: A domein

Nadere informatie

Wat is een digitale foto

Wat is een digitale foto Inleiding: basiskennis We beoefenen allemaal de fotografie in de hobbysfeer. Sommigen al jaren, anderen sinds kort. Maar we weten allemaal wat een camera is, en een computer, en een printer. We weten allemaal

Nadere informatie

Oefeningenles beeldverwerking

Oefeningenles beeldverwerking Oefeningenles beeldverwerking Histogram Wat is een histogram hoe kunnen we een histogram opstellen? Welke afbeelding hoort bij welk histogram? Waarom? Een histogram geeft voor elke grijswaarde het aantal

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

en-splitsingen: een aantal alternatieven worden parallel toegepast, of-splitsingen: van een aantal alternatieven wordt er één toegepast,

en-splitsingen: een aantal alternatieven worden parallel toegepast, of-splitsingen: van een aantal alternatieven wordt er één toegepast, Kansrekening voor Informatiekunde, 25 Les 8 Proces analyse Veel processen laten zich door netwerken beschrijven, waarin knopen acties aangeven en opdrachten langs verbindingen tussen de knopen verwerkt

Nadere informatie

Hoofdstuk 9. Hashing

Hoofdstuk 9. Hashing Hoofdstuk 9 Hashing Het zoeken in een verzameling van één object is in deze cursus al verschillende malen aan bod gekomen. In hoofdstuk 2 werd uitgelegd hoe men een object kan zoeken in een array die veel

Nadere informatie

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

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

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

Singularity. Uit de wereld van de rekenclusters. Handleiding van Helpmij.nl. Auteur: Erik98

Singularity. Uit de wereld van de rekenclusters. Handleiding van Helpmij.nl. Auteur: Erik98 Singularity. Uit de wereld van de rekenclusters Handleiding van Helpmij.nl Auteur: Erik98 januari 2018 Singularity Uit de wereld van de rekenclusters. Zit je als professional met langdurige berekeningen?

Nadere informatie

Android apps met App Inventor 2 antwoorden

Android apps met App Inventor 2 antwoorden 2014 Android apps met App Inventor 2 antwoorden F. Vonk versie 1 11-11-2014 inhoudsopgave Mollen Meppen... - 2 - Schrandere Scholier... - 15 - Meteoor... - 21 - Dit werk is gelicenseerd onder een Creative

Nadere informatie

High Performance Computing

High Performance Computing High Performance Computing Kristian Rietveld (krietvel@liacs.nl, kamer 138) Groep Computer Systems High-Performance Computing Optimizing compilers (generieke codes, maar ook specifieke rekenkernels). Parallel

Nadere informatie

We zullen in deze les kijken hoe we netwerken kunnen analyseren, om bijvoorbeeld de volgende vragen te kunnen beantwoorden:

We zullen in deze les kijken hoe we netwerken kunnen analyseren, om bijvoorbeeld de volgende vragen te kunnen beantwoorden: Wiskunde voor kunstmatige intelligentie, 24 Les 5 Proces analyse Veel processen laten zich door netwerken beschrijven, waarin een aantal knopen acties aangeeft en opdrachten langs verbindingen tussen de

Nadere informatie

Tim Mallezie Architectuur van besturingssystemen: Vraag A4.

Tim Mallezie Architectuur van besturingssystemen: Vraag A4. Procesbeheer: creatie en wisselen van processen. a) Verduidelijk het begrip PCB. b) Uit welke opeenvolgende stappen bestaat de creatie van een nieuw proces? c) Hoe worden in UNIX en Linux nieuwe processen

Nadere informatie

High Performance Computing

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

Nadere informatie

Computerarchitectuur. Terugblik / discussie / oefenopgaven

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

Nadere informatie

Widget Tip van de dag!

Widget Tip van de dag! Gebruikershandleiding Widget Tip van de dag! Datum Versie Naam Opmerkingen 01-12-2011 0.5 M. Bruinsma Schrijven handleiding J. van Beijnen 05-12-2011 1.0 J. van Beijnen Opmaak en kleine aanpassingen structuur

Nadere informatie

Tentamen 8D040 - Basis beeldverwerking

Tentamen 8D040 - Basis beeldverwerking Tentamen 8D040 - Basis beeldverwerking 6 augustus 2008, 14.00-17.00 uur Vraag 1. (1.5 punten) Gegeven het binaire beeld Components (figuur 1). De componenten in dit beeld moeten automatisch gesegmenteerd

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

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 1: Installeren en verifiëren van de SDE Door Hugo Arends, augustus 2012 Microcontrollers Een microcontroller is een elektronische component dat gebruikt wordt om (complexe)

Nadere informatie

De tekstverwerker. Afb. 1 de tekstverwerker

De tekstverwerker. Afb. 1 de tekstverwerker De tekstverwerker De tekstverwerker is een module die u bij het vullen van uw website veel zult gebruiken. Naast de module tekst maken onder andere de modules Aankondigingen en Events ook gebruik van de

Nadere informatie

Oefeningenles beeldverwerking

Oefeningenles beeldverwerking Oefeningenles beeldverwerking Histogram Wat is een histogram hoe kunnen we een histogram opstellen? Welke afbeelding hoort bij welk histogram? Waarom? Een histogram geeft voor elke grijswaarde het aantal

Nadere informatie

Optimalisatie technieken

Optimalisatie technieken Things should be made as simple as possible, but not any simpler. Floatingpoint berekeningen Floatingpoint getallen kun je praktisch niet met elkaar vergelijken. De meeste embedded systemen hebben geen

Nadere informatie

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files 1 Introductie In deze oefening zal je je LCD display leren aansturen. Je controleert deze display door er instructies naar te

Nadere informatie

Meer Blokken. 1. Dit is een functie genaamd Maximum, die twee argumenten heeft: number1 en number2.

Meer Blokken. 1. Dit is een functie genaamd Maximum, die twee argumenten heeft: number1 en number2. Meer Blokken Voorkennis: SuperDojo, Snake Leerdoelen: Meer Blokken Introductie Meer Blokken zijn Scratch s manier van functies. Functies zijn een heel belangrijk concept in alle programmeertalen. Het staat

Nadere informatie

de Wageningse Methode Beknopte gebruiksaanwijzing TI84 1

de Wageningse Methode Beknopte gebruiksaanwijzing TI84 1 Algemene vaardigheden Veel knopjes hebben drie functies. De functie die op een knop... staat krijg je door er op de drukken. De blauwe functie die er boven een knop... staat krijg je met 2nd.... Zo zet

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Handleiding toevoegen objecten plexatutrecht.nl

Handleiding toevoegen objecten plexatutrecht.nl Handleiding toevoegen objecten plexatutrecht.nl Handleiding toevoegen objecten plexatutrecht.nl... 1 1. Inleiding... 1 2. Structuur... 2 3. Inloggen... 2 4. Aanmaken bedrijfsverzamelgebouw... 3 5. Aanmaken

Nadere informatie

slides12.pdf December 14, 2001 1

slides12.pdf December 14, 2001 1 Onderwerpen Inleiding Algemeen 12 Getallen Getallen Representaties Rekenen Problemen Piet van Oostrum 12 dec 2001 INL/Alg-12 1 X INL/Alg-12 1 X Getallen Soorten getallen Wat is een getal? Experiment: met

Nadere informatie

Oefeningen Interpretatie I Reeks 6 : Registermachines

Oefeningen Interpretatie I Reeks 6 : Registermachines Oefeningen Interpretatie I Reeks 6 : Registermachines Deze oefeningenreeks behandelt het beschrijven van computationele processen aan de hand van registermachineprogrammaʼs. Registermachines manipuleren

Nadere informatie

Introductie. NAV performance. Derk Jan Oelemans. Manager Development, BI en E-Business Qurius Business Solutions

Introductie. NAV performance. Derk Jan Oelemans. Manager Development, BI en E-Business Qurius Business Solutions Introductie Microsoft Global Partner of the Year 2007 NAV performance Manager, BI en E-Business Qurius Business Solutions Performance domeinen Functionele alternatieven Datamodel wijzigingen standaard

Nadere informatie

Inrichting Systeem: Locaties & Toegang

Inrichting Systeem: Locaties & Toegang Inrichting Systeem: Locaties & Toegang EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl v1.0 01-12-2011 In deze handleidingen worden de volgende functies binnen

Nadere informatie

Tweede Programmeeropgave Numerieke Wiskunde 1 De golfplaat Uiterste inleverdatum : vrijdag 16 mei 2003

Tweede Programmeeropgave Numerieke Wiskunde 1 De golfplaat Uiterste inleverdatum : vrijdag 16 mei 2003 Tweede Programmeeropgave Numerieke Wiskunde 1 De golfplaat Uiterste inleverdatum : vrijdag 16 mei 2003 I Doelstelling en testcase In deze programmeeropgave zullen we een drietal numerieke integratiemethoden

Nadere informatie

Handleiding bij de Booktest Generator

Handleiding bij de Booktest Generator Handleiding bij de Booktest Generator Het programma voor het maken van toetsen bij boeken. (c) 2005/2009 Visiria Uitgeversmaatschappij Twisk Inleiding Onze dank voor het aanvragen van de Booktest Generator.

Nadere informatie

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

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

Nadere informatie

OEFENINGEN PYTHON REEKS 6

OEFENINGEN PYTHON REEKS 6 OEFENINGEN PYTHON REEKS 6 1. A) Schrijf een functie die een getal x en een getal y meekrijgt. De functie geeft de uitkomst van volgende bewerking als returnwaarde terug: x y x als x y x y y als x < y B)

Nadere informatie

De onderwerpen die voor deze avond zijn aangedragen! Maskers maken. Workflow Lightroom en Photoshop. Verschil tussen werken in RGB en srgb

De onderwerpen die voor deze avond zijn aangedragen! Maskers maken. Workflow Lightroom en Photoshop. Verschil tussen werken in RGB en srgb De onderwerpen die voor deze avond zijn aangedragen! Maskers maken Workflow Lightroom en Photoshop Verschil tussen werken in RGB en srgb Werken in 16 of 8 bits Verschil tussen RAW opslaan als PSD of TIF

Nadere informatie

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets) TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Afdeling ISA Basiseenheid PGS Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Nadere informatie

1 Rekenen in eindige precisie

1 Rekenen in eindige precisie Rekenen in eindige precisie Een computer rekent per definitie met een eindige deelverzameling van getallen. In dit hoofdstuk bekijken we hoe dit binnen een computer is ingericht, en wat daarvan de gevolgen

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

Bouwstenen voor PSE. Datatypes en Datastructuren

Bouwstenen voor PSE. Datatypes en Datastructuren Bouwstenen voor PSE Datatypes en Datastructuren Definitie Datatype Klasse van dataobjecten tesamen met operaties om ze te construeren, te manipuleren en te verwijderen. Een datatype omvat een specificatie

Nadere informatie

Hoofdstuk 7: Als Excel vastloopt

Hoofdstuk 7: Als Excel vastloopt Hoofdstuk 7: Als Excel vastloopt 7.0 Inleiding De meeste mensen die Excel gebruiken hebben af en toe te maken met vertraging en vastlopen van het systeem. Soms verschijnt zelfs de boodschap "Er is een

Nadere informatie

Matlab-Introductie (les 1)

Matlab-Introductie (les 1) Matlab-Introductie (les 1) Wat is Matlab? MATLAB staat voor MATrix LABoratory. Opstarten van Matlab Dit hangt af van het onderligge systeem (Windows, Linux,...), Maar kortweg geldt bijna altijd: ga met

Nadere informatie

Handleiding Macromedia Contribute

Handleiding Macromedia Contribute Handleiding Macromedia Contribute Marcel Lemmen en Frank Coenders maart 2008 Handleiding Macromedia Contribute 1 Contribute in vogelvlucht Contribute werkt simpel en intuïtief. Het bewerken van een website

Nadere informatie

Deze korte handleiding legt uit welke stappen je moet zetten om te kunnen lasersnijden.

Deze korte handleiding legt uit welke stappen je moet zetten om te kunnen lasersnijden. FabSheet Lasersnijmachine Deze korte handleiding legt uit welke stappen je moet zetten om te kunnen lasersnijden. Programma LaserCut 5.3 opstarten... 2 1 Soorten bestanden... 3 Importeren:... 3 Exporteren:...

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Hoofdstuk 26: Modelleren in Excel

Hoofdstuk 26: Modelleren in Excel Hoofdstuk 26: Modelleren in Excel 26.0 Inleiding In dit hoofdstuk leer je een aantal technieken die je kunnen helpen bij het voorbereiden van bedrijfsmodellen in Excel (zie hoofdstuk 25 voor wat bedoeld

Nadere informatie

# seetut_20 $ De Sjabloon Editor Toepassen + seetut:0370 K Sjablonen;Algemeen;Naam Wijzigen Sjabloon;Ontwerp;Sjabloon Editor;Sjabloon Openen

# seetut_20 $ De Sjabloon Editor Toepassen + seetut:0370 K Sjablonen;Algemeen;Naam Wijzigen Sjabloon;Ontwerp;Sjabloon Editor;Sjabloon Openen # $ + K De Sjabloon Editor Toepassen Deze zelfstudie maakt gebruik van de modules Profielen & Ontwerpen. Opmerking: Deze zelfstudie kan niet worden uitgevoerd met LISCAD Lite. Doelstelling Het doel van

Nadere informatie

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. 1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat

Nadere informatie

TECHNISCHE UNIVERSITEIT EINDHOVEN ComputerSystemen Deeltentamen B (weken 6..9) vakcode 2M208 woensdag 19 Maart 2003, 9:00-10:30

TECHNISCHE UNIVERSITEIT EINDHOVEN ComputerSystemen Deeltentamen B (weken 6..9) vakcode 2M208 woensdag 19 Maart 2003, 9:00-10:30 TECHNISCHE UNIVERSITEIT EINDHOVEN ComputerSystemen Deeltentamen B (weken 6..9) vakcode 2M208 woensdag 19 Maart 2003, 9:00-10:30 Algemene opmerkingen (lees dit!): - Dit tentamen duurt ANDERHALF UUR! - Dit

Nadere informatie

Inhoudsopgave. Optimalisatie van de mmips. Forwarding optie 1. Design flow. implementation

Inhoudsopgave. Optimalisatie van de mmips. Forwarding optie 1. Design flow. implementation 2 Inhoudsopgave Optimalisatie van de mmips pc Sander Stuijk Veel gestelde vragen Hoe moet ik forwarding implementeren? Hoe moet ik clipping implementeren? Waarom is mijn simulatie zo traag? Hoe kan ik

Nadere informatie

Programmeermethoden NA

Programmeermethoden NA Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder

Nadere informatie

Activiteit 3. Zeg het opnieuw! Tekst compressie. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materialen

Activiteit 3. Zeg het opnieuw! Tekst compressie. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materialen Activiteit 3 Zeg het opnieuw! Tekst compressie Samenvatting Omdat computers maar een beperkte ruimte hebben om informatie op te slaan, moeten we deze informatie zo efficient mogelijk beschrijven. Dit heet

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Hoofdstuk 21: Gegevens samenvatten

Hoofdstuk 21: Gegevens samenvatten Hoofdstuk 21: Gegevens samenvatten 21.0 Inleiding In Excel kunnen grote (en zelfs ook niet zo grote) tabellen met getallen en tekst er nogal intimiderend uitzien. Echter, Excel komt helemaal tot haar recht

Nadere informatie

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd Inhoudsopgave 1 Inleiding... 1 2 Toekenning- en herhalingsopdrachten (for loop)... 2 2.1 De wet van Ohm... 3 2.2 De spaarrekening... 3 2.3 De transformator... 3 3 Keuze- en herhalingsopdrachten (if, switch,

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

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

Als je geen email-adres hebt kun je bij Google een gmail account aan maken. Als je niet weet hoe dat moet klik dan op: Gmail account aanmaken

Als je geen email-adres hebt kun je bij Google een gmail account aan maken. Als je niet weet hoe dat moet klik dan op: Gmail account aanmaken Om het online programma te kunnen gebruiken het je een account nodig. Wat heb je nodig om een account voor Photo Collage te kunnen aanmaken: Username (gebruikersnaam) Email account Password (wachtwoord

Nadere informatie

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

Startgids: de Reeleezee-REST-API

Startgids: de Reeleezee-REST-API Startgids: de Reeleezee-REST-API Iedere gebruiker moet bij al zijn administratiegegevens kunnen. Overal en altijd. Met die gedachte verwachten gebruikers ook dat andere softwareprogramma s toegang kunnen

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

Inrichting Systeem: Locaties & Toegang

Inrichting Systeem: Locaties & Toegang Inrichting Systeem: Locaties & Toegang EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl v2.0.11 22-09-2014 In deze handleidingen worden de volgende functies binnen

Nadere informatie

SERVICE LEVEL AGREEMENT SERVICE LEVEL AGREEMENT ADDENDUM VIRTUALISATIE VERSIE

SERVICE LEVEL AGREEMENT SERVICE LEVEL AGREEMENT ADDENDUM VIRTUALISATIE VERSIE SERVICE LEVEL AGREEMENT SERVICE LEVEL AGREEMENT ADDENDUM VIRTUALISATIE VERSIE 2014-05-28 Inhoudsopgave 1. Definities...3 1.1. Control Panel...3 1.2. CPU...3 1.3. CPU core...3 1.4. Dienst...3 1.5. I/O-operaties...3

Nadere informatie

Release Notes CheQpoint 2.0. Versie 30. Efficiency through innovation

Release Notes CheQpoint 2.0. Versie 30. Efficiency through innovation Release Notes CheQpoint 2.0 Versie 30 Efficiency through innovation 1 (PIBU) #CON: Importeren van contracten 1.1 Doelstelling Het doel van deze tool is om de vorige contracten, uit een ander softwarepakket,

Nadere informatie