Computer Architectuur 2016 Handleiding bij de CUDA opdracht
|
|
- Frieda de Vries
- 7 jaren geleden
- Aantal bezoeken:
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 2009-09-24 Cuda Techniek om berekingen op je GPU te kunnen uitvoeren ( GPGPU ) Cuda Techniek om berekingen op je
Nadere informatieComputerarchitectuur. 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 informatieNederlandse samenvatting (Dutch summary)
Nederlandse samenvatting (Dutch summary) Ditproefschriftpresenteerteen raamwerk voorhetontwikkelenvanparallellestreaming applicaties voor heterogene architecturen met meerdere rekeneenheden op een chip.
Nadere informatieJava 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 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 informatieOnafhankelijke 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 informatieIN1805 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 informatien-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 informatieComputerarchitectuur. 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 informatie17 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 informatieVectoren, 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 informatieComputerarchitectuur 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 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 informatieVraag 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 informatieCentrale 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 informatieCover 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 informatieTentamen 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 informatieEen 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 informatieTim 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 informatieHandleiding 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 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 informatie10 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 informatieEen.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 informatieUitwerking 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 informatieCourbois 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 informatie1 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 informatieHoofdstuk 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 informatieComputerarchitectuur 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 informatieUitleg. 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 informatieDynamisch 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 informatieAssembly 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 informatieExamen 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 informatieUitwerking 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 informatieOpdracht 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 informatieHOOFDSTUK 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 informatieBeknopte 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 informatieWat 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 informatieOefeningenles 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 informatieVariabelen 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 informatieen-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 informatieHoofdstuk 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 informatieinformatica. 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 informatieProgrammeren 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 informatieSingularity. 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 informatieAndroid 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 informatieHigh 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 informatieWe 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 informatieTim 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 informatieHigh 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 informatieComputerarchitectuur. 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 informatieWidget 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 informatieTentamen 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 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 informatieES1 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 informatieDe 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 informatieOefeningenles 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 informatieOptimalisatie 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 informatieOpgave 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 informatieMeer 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 informatiede 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 informatieProgrammeermethoden 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 informatieHandleiding 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 informatieslides12.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 informatieOefeningen 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 informatieIntroductie. 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 informatieInrichting 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 informatieTweede 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 informatieHandleiding 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 informatieConcurrency. 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 informatieOEFENINGEN 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 informatieDe 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 informatieProeftentamen 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 informatie1 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 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 informatieBouwstenen 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 informatieHoofdstuk 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 informatieMatlab-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 informatieHandleiding 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 informatieDeze 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 informatieEen 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 informatieHoofdstuk 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
# $ + 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 informatieJe 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 informatieTECHNISCHE 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 informatieInhoudsopgave. 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 informatieProgrammeermethoden 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 informatieActiviteit 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 informatieAls 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 informatieHoofdstuk 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 informatiePROS1E1 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 informatieSyntax- (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 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 informatieAls 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 informatiestart -> 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 informatieStartgids: 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 informatieProgrammeermethoden 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 informatieInrichting 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 informatieSERVICE 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 informatieRelease 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