Information Coding / Computer Graphics, ISY, LiTH. Minnesaccess. Vitalt för prestanda! Minnestyper. Coalescing



Relevanta dokument
Information Coding / Computer Graphics, ISY, LiTH CUDA

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk

Information Coding / Computer Graphics, ISY, LiTH. Compute shaders!! Framtiden för GPU computing eller sen efterapning av Direct Compute?

Teknik för avancerade datorspel!

Teknik för avancerade datorspel!

Vad är en dator? Introduktion till datorer och nätverk. Pontus Haglund Institutionen för datavetenskap (IDA) 21 augusti 2018

TBSK03 Teknik för avancerade Datorspel. Jens Ogniewski Information Coding Group Linköpings universitet

Minnet från processorns sida Datorteknik

HF0010. Introduktionskurs i datateknik 1,5 hp

Procedurell renderingsmotor i Javascript och HTML5

4 grundregler. Minneshantering. Problemet. Windows minkrav

Software Technology. Josef Svenningsson

Digitalteknik och Datorarkitektur 5hp

Parallellprogrammering i C++ 17 EDT621 Datorarkitekturer med Operativsystem Viktor Lindgren

Fö 2: Minnen. Introduktion. Primärminnet. Interna och externa minnen. Introduktion, Klassificiering

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Strategier för att utnytja parallella system. Peter Kjellström NSC Upplysning

Objektorienterad Programmering (TDDC77)

Exempeltentamen Datorteknik, EIT070,

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok

Mer datorarkitektur. En titt I datorn Minnen

Minnets komponenter. Digitala System: Datorteknik. Programexekvering. Programexekvering. Enhet för utdata. Enhet för indata CPU.

Random Access Memory. Amare Reda Jenny Holmberg Henrik Kreipke Gaylord Kaya

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

GPGPU - General-Purpose computing on Graphics Processing Units

DIG IN TO Administration av nätverk- och serverutrustning

Snapdragon 810: Cacheminnet

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

Robotfotboll med Arduino

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

EVRY One Outsourcing Linköping AB. Erfaranheter av daglig drift och nyttjande av IFS Applications 8.

Datorteknik ERIK LARSSON

Ett minneselements egenskaper. F10: Minneselement. Latch. SR-latch. Innehåll:

Tentamen den 14 januari 2016 Datorarkitektur med operativsystem, EDT621

Digitala System: Datorteknik ERIK LARSSON

Anujan Balasingam IDA14 NAND flashminnen

Inledande programmering med C# (1DV402) Introduktion till programmering

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Föreläsning 2: Avlusning och antilustekniker

Föreläsning 1: Intro till kursen och programmering

Grundkurs i programmering - intro

Datorarkitekturer med operativsystem ERIK LARSSON

Grundläggande datavetenskap, 4p

Digitala System: Datorteknik ERIK LARSSON

Datorarkitekturer med operativsystem ERIK LARSSON

Parallellism i NVIDIAs Fermi GPU

Föreläsning 2. Operativsystem och programmering

Föreläsningsanteckningar 5. Cacheminnen

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Operativsystem och användargränssnitt

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Linjära ekvationssystem

Föreläsning 1: Intro till kursen och programmering

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Introduktion till programmering

Miniprojekt: MEX och molekyldynamik

MESI-protokollets funktion i multiprocessorer

Institutionen för systemteknik

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Linjära ekvationssystem

Moment 5.5 Övningsuppgifter I 5.60a. 5.60b, 5.60.c, 61

Föreläsning 3. Programmering, C och programmeringsmiljö

Programmering B med Visual C

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

tentaplugg.nu av studenter för studenter

Grafiska pipelinens funktion

Introduktion till hårdvara, mjukvara och operativsystem

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

OneDrive/SharePoint. Innehåll

Filsystem - Inode. Datorteknik. Minnets komponenter. Programexekvering. Enhet för indata. Enhet för utdata CPU. Primärminne.

Skinning and Animation

Digitala System: Datorteknik ERIK LARSSON

App-klient för smartphones Power BI Arbetsflöde CRM Online Webb-klienten Dokumenthantering Molnet...

TDDC74 Lab 04 Muterbara strukturer, omgivningar

MESI i Intel Core 2 Duo

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Värmedistribution i plåt

Vad är viktigast? Sammanfattning. Processer och trådar. Processer och trådar. Flerprocessorsystem. Schemaläggning. Interprocesskommunikation.

32 Bitar Blir 64 Sammanfattning

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Datorteknik ERIK LARSSON

Med Leef Access 2.0 ökar du minneskapaciteten i din Android-telefon eller surfplatta och den är så liten att den får plats i din ficka.

KUNDCASE. Inovia gjorde sin AI-utveckling 10 gånger snabbare med Power-plattformen

Operativsystem Introduktion

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

OOP Objekt-orienterad programmering

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Moment Viktiga exempel Övningsuppgifter

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Cacheminne i en AMD Opteron Processor

Lärare. Operativsystem. Handledning. Kurssajt. Schema. Lektioner. Jan Erik Moström

SYNKRONISERING I EN SHARED MEMORY MULTIPROCESSOR

Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

Välkommen till Dropbox!

Transkript:

Minnesaccess Vitalt för prestanda! Minnestyper Coalescing Exampel på hur man kan använda delat minne

Minnestyper Global Shared Constant (read only) Texture cache (read only) Local Registers Viktiga när man optimerar

Globalt minne 400-600 cycles latency! Använd lokalt delat minne som snabb mellanlagring Ordnade minnesaccesser (Coalescing)! Kontinuerligt Starta på 2-potens-adress Addressera enligt trådnumrering Använd shared memory för att omorganisera data!

Använd shared memory för att minska antalet accesser av globalt minne Läs block till shared memory Processa Skriv tillbaka det som behövs Shared memory är en manuell cache Exempel: Matrismultiplikation

Matrismultiplikation För att multiplicera två N*N-matriser måste varje element accessas N gånger! Naiv implementation: 2N3 globala minnesaccesser!

Matrismultiplikation Låt varje block generera en del av utdata Läs in de delar av matrisen som blocket behöver i shared memory.

Modifierad beräkningsmodell: Ladda upp data till globalt GPU-minne För valda delar: Ladda upp delar av data till shared memory Processa partiella data Skriv partiella data till globalt minne Läs ner resultatet till värden

Synkronisering Så fort du gör något där en del av beräkningen beror av en annan så måste du synkronisera! syncthreads() Typisk implementation: Läs till shared memory syncthreads() Processa shared memory synchthreads() Skriv resultatet till globalt minne.

Accelering med coalescing Minnesöverföringar kan vara 10x snabbare om man kan addressera enligt coalescing-reglerna! Exempel: Matristransponering Inga beräkingar! Enbart minnesaccesser.

Matristransponeing Naiv implementation global void transpose_naive(float *odata, float* idata, int width, int height) { unsigned int xindex = blockdim.x * blockidx.x + threadidx.x; unsigned int yindex = blockdim.y * blockidx.y + threadidx.y; } if (xindex < width && yindex < height) { unsigned int index_in = xindex + width * yindex; unsigned int index_out = yindex + height * xindex; odata[index_out] = idata[index_in]; } Hur kan detta vara dåligt?

Matristransponeing Coalescing-problem Rad för rad och kolum för kolumn. Kolumnvis access är non-coalesced!

Matristransponering Lösning med coalescing Läs från globalt minne till shared memory Läs i ordning från globala minnet, godtycklig ordning till shared Skriv till globalt minne Skriv i ordning till globalt minne, godtycklig ordning från shadred

Bättre matristransponering med CUDA global void transpose(float *odata, float *idata, int width, int height) { shared float block[block_dim][block_dim+1]; // read the matrix tile into shared memory unsigned int xindex = blockidx.x * BLOCK_DIM + threadidx.x; unsigned int yindex = blockidx.y * BLOCK_DIM + threadidx.y; if((xindex < width) && (yindex < height)) { unsigned int index_in = yindex * width + xindex; block[threadidx.y][threadidx.x] = idata[index_in]; } syncthreads(); Shared memory for temporary storage Read data to temporary buffer } // write the transposed matrix tile to global memory xindex = blockidx.y * BLOCK_DIM + threadidx.x; yindex = blockidx.x * BLOCK_DIM + threadidx.y; if((xindex < height) && (yindex < width)) { unsigned int index_out = yindex * height + xindex; odata[index_out] = block[threadidx.x][threadidx.y]; } Write data to tglobal memory

Tumregler för coalescing Starta på multipel av 64 Addressera i ordning enligt trådnummer Man hoppa över vissa om man vill. Data bör vara i block om 4, 8 eller 16 bytes

Texturminne Cachad! Kan vara mycket snabbt att läsa från om mönstren är cache-vänliga. Texturfiltrering, linjär interpolation. Speciellt bra på att hantera 4 floats i taget (float4). cudabindtexturetoarray() binder data till en texturenhet. Programmeringen är ökänd för att vara knepigare.

Portning till CUDA 1. Parallelliserbar CPU-algoritm. 2. Trivial (seriell) CUDA-implementation. 3. Dela upp i block och trådar. 4. Utnyttja shared memory.

CUDA emulation mode CUDA-programs kan kompileras tför att köras på CPU --device-emulation Låter dig köra CUDA (långsamt) på icke-nvidia-hårdvara Debuggning lättare (e.g. printf)

OpenCL OpenCL är en ny (2009) lösning för GPU Computing Uppbackat av Apple Gjort för att ge större frihet i hårdvara Inbyggt i MacOSX 10.6 Har inte CUDAs eleganta integration

Var kan jag köra CUDA? Har du en 8400 eller bättre GPU? Då har du det viktigaste. Korsplattform: MS Windows, Linux, MacOSX. En hyfsat modern Mac är perfekt för OpenCL. CUDA och OpenCL finns installerade i Olympen (men det kommer att bli ännu bättre i Southfork efter uppgraderingen).

GLSL, CUDA eller OpenCL? GLSL är överlägset mest portabelt och lättast att installera. CUDA är elegant och integrerat men kräver specialinstallation och är kräset på hårdvara. OpenCL är portabelt, kräver specialinstallation överallt utom på OSX. => räkna inte ut GPGPU på shaders än!

Parallellprogrammering är framtiden! All shaderprogrammering är parallellprogrammering. Så gott som all prestandaökning i framtiden kommer från parallelism. Forskning på LiTH: epuma (ISY, IDA) Alldeles för lite kurser förstudenter! Ny multicore&gpu förra året (IDA+ISY).