De Parallelle Revolutie van GPU's en CPU's
George van Venrooij Organic Vectory BV
Bits&Chips Embedded Systemen 18 November 2011 Eindhoven
Een nieuw speelveld
Desktop PC anno 2005
2 GHz CPU (1 core, 6 GFLOP/s)
256-512 MB RAM
Fixed-function GPU
Desktop PC vandaag
2.5 GHz CPU (4 cores, 200 GFLOP/s)
4 GB RAM
1 GHz GPGPU (338 cores, 1200 GFLOP/s)
iPad 2
1 GHz CPU (2 cores, 170 MFLOP/s)
512 MB RAM
200 MHz GPU (2 cores, 8 pipelines, 14 GFLOP/s)
De “desktop-super-computer” Supercomputer
Veel rekenkracht
Veel geheugen
Gedistribueerd
Software performance schaalt mee met de hardware performance!
De Revolutie Aanpassingen in het volledige software ontwikkel traject
Doel: Schaalbare performance van software die de curve van Moore's wet (weer) gaat volgen
Data-Explosie Grootte van het “data universum” in Mei 2011:
1.2 zettabytes
Rekenintensievere Processen
Spraakherkenning
Computer Vision
3D Analyse
Simulaties
Navigatie
... etcetera
Parallel = de nieuwe standaard
? DirectCompute
Noise Mapping op GPU's
Complexiteit per update
Standaard Reken Methode 2 (SRM-2)
Geluidsoverlast in woongebieden
3 x 3 km stadscentrum (Rotterdam)
300x300 grid cellen met bodemgegevens
Maximale pad lengte: 1 km
10.493 gevels (in 1x1 km gebied)
1.924 weg segmenten (in 3x3 km gebied)
71.615 gebouwen & obstakels (in 3x3 km gebied)
Single-threaded rekentijd: 87 minuten
Doelstelling: interactiviteit
Project Traject
Analyse
Platform keuze
Hardware
Software
Design
Implementatie
Bibliotheken
Ontwikkeltools
Algoritme ontwerp
Testen & Oplevering
Analyse
Parallelle paden Onafhankelijk te berekenen GPGPU-geschikt!
Platform Keuze
Windows PC
NVidia CUDA
VS 2008
Geen OpenCL
NVidia GTX 280
240 cores, 1 GB RAM
CUDA – OpenCL
nVidia-hardware
Generiek
GPU's
CPU's, GPU's & meer
Volwassener (v4.0)
Jonger (v1.1)
Veel bibliotheken & resources Toolchain integratie is eenvoudig Kernel taal bevat C++ features Visual Studio Debugger op source-niveau
Kleine, maar snel groeiende community Toolchain integratie vergt wat denkwerk Kernel taal gebaseerd op C99 met extensies Debugger als aparte applicatie
Design – Dataflow Diagram
GPU-Programma Flow GPU Input Data
Kernel 1
Input Data
Start Kernels
Tussen resultaat
Kernel 2
Eind resultaat
Eind resultaat CPU
Libraries: Thrust
Geen diepe kennis van CUDA nodig
Makkelijk om mee te beginnen
Goede prototyping omgeving
Veel algorithmen beschikbaar:
Zoeken
Reducties
Sorteren
Sommaties
Transformaties
Zoek de 10 verschillen
Overlap Bepaling
“Sweep & Prune” algoritme
Geen malloc() in een kernel (CUDA 2.3)
Versie 1:
tellen
malloc() (host-code)
opslaan
Versie 2:
opslaan tot buffer vol is
hervatten met nieuw buffer
Geheugen-gebruik “lawine”
Brondata < 6 MB
Resultaat < 1 MB
Tussenresultaten > 60 GB
8.8 miljoen directe paden
49.9 miljoen reflectie paden
Hardware Threading Model
Cores
Hardware threads
8800 GTX
128
16 x 768
GTX 285
240
30 x 1024 = 30720
GTX 480
480
15 x 1536 = 23040
GTX 580
512
16 x 1536 = 24576
= 12288
“Depth-first” proces graaf 1
Proces Stappen
2
9
3
6
10
13
4
7
11
14
5
8
12
15
Development & Debugging
CUDA Toolkit/nvcc
Niet bijster snel (lees: erg traag)
Niet 100% compatible met C++ standaard
Makkelijk in te passen in workflow
Visual Profiler
Gedetailleerd overzicht van de GPU
Combinatie met Thrust werkt minder “lekker”
NSight Debugger
Heel handig (als het werkt)
Nog niet echt “af”
Beren op de weg
Geen debugger (begin 2010)
Driver stabiliteit
Windows time-outs
Systeem lock-ups
Custom debugging
Resultaat
Type
Cores
CPU
1
CPU
Tijd (s)
vs 1 core
vs 16 cores
5246
1.0
-
16
328
15.9
1.0
GPU
240
67
78.2
4.8
GPU
480
34
154.2
9.6
Parallel Design
Ga uit van de toekomst: N cores (N > 8)
Integreer in een framework wat taakverdeling beheert Conversie van maximum gebruik (alle cores op 100%) naar minimum idle-time (geen core op 0%) Ontwerp software met behulp van component-gebaseerde taken
Voordelen van deze approach
Designen in “componenten” wordt gemeengoed
Makkelijker testen
Meer hergebruik
Minder kennis nodig voor implementatie
Kortere doorlooptijd per unit
OpenCL – Parallel Framework
Taak/dependency gebaseerd executie model Mogelijkheid om verschillende (soorten) devices aan te spreken “Native function” optie maakt integratie met bestaande code eenvoudig Beschikbaar voor GPU's, CPU's, CELL en mobiele/embedded platformen
Parallel Design voor GPU's
Zoek naar data-parallellisme
Voldoende rekenwerk per element
Niet alle algoritmen lenen zich voor parallel gebruik
Her-ontwerp sequentiele algoritmen
GPU Kernels:
Geheugen access patronen hebben veel impact
Maak gebruik van on-chip geheugen waar mogelijk
Vermijd divergerende code (condities)
Gebruik standaard functies (hardware acceleratie)
Parallel Design – Retro-actief
Parallel Design – Pro-actief
Bedankt voor jullie aandacht!
Zijn er nog vragen?
Afbeeldingen (1) Achtergronden: GPU, © 2011 NVidia Corporation, http://www.gputechconf.com/page/home.html slide 2 “Een nieuw speelveld”: Beige PC: http://www.itnews.com.au/News/156771,intel-and-the-death-of-the-beige-box-pc.aspx Gaming PC: © 2011 Dell, http://www.pclaunches.com/computers/alienware_area51_and_area51_alx_desktops_for_gaming.php iPad 2: © 2011 Apple Corporation, http://www.playerzblog.com/5-best-ipad-2-games.html slide 3 “De desktop super-computer”: W.O.P.R.: © 1983 MGM Studios Inc., http://media.screened.com/uploads/0/562/275564-wargames___wopr.jpg K Computer: © 2011 ITP Digital Ltd., http://www.itp.net/mobile/585186-japan-has-worlds-top-supercomputer Tesla Personal Supercomputer: © 2011 NVidia Corporation, http://blog.loaz.com/media/blogs/timwang/first-personal-supercomputer-TESLA-NVIDIA.jpg slide 4 “De Revolutie”: CPU Trends, © 2009 Herb Sutter, http://www.gotw.ca/publications/concurrency-ddj.htm slide 5 “Data-Explosie”: Data Universe & Causes, © 2009 EMC Corporation, http://www.techrepublic.com/blog/hiner/its-new-holy-grail-break-out-of-the-70-maintenance-loop/4283 slide 6 “Rekenintensievere Processen”: Speech Recognition: © 1999 Oregon Graduate Institute of Science and Technology, http://www.cslu.ogi.edu/tutordemos/nnet_recog/recog.html 3D Analyse: © 2011 Pitney Bowes Software Inc., http://www.pbinsight.com/products/location-intelligence/applications/mapping-analytical/mapinfo-professional/ Computer Vision: http://withfriendship.com/user/sathvi/computer-vision.php Flight Simulator 4: © 1989 Microsoft Corporation, http://en.wikipedia.org/wiki/File:Microsoft_Flight_Simulator_4_screenshot.png iNavi: © 2011 Thinkwaresys, http://www.navigadget.com/?s=inavi slide 7 “Parallel = de nieuwe standaard”: OpenCL Logo: © 2009 Apple Corporation, http://www.geeks3d.com/public/common/opencl_logo.jpg OpenMP Logo: © 2011 OpenMP Architecture Review Board, http://www2.imm.dtu.dk/~bd/SciComp/openmp_lg_transparent.gif CUDA Logo: © 2011 NVidia Corporation Intel TBB: © 2011 Intel Corporation slide 8 “Noise Mapping op GPU's”: Urban Strategy, © 2010 TNO Bouw & Ondergrond, Milieu en Leefomgeving slide 10 “Doelstelling: Interactiviteit”: Urban Strategy, © 2010 TNO Bouw & Ondergrond, Milieu en Leefomgeving
Afbeeldingen (2) slide 12 “Analyse”: Geluidspaden (boven), p. 46, Bijlage III, Behorende bij hoofdstuk 3 Weg van het Reken- en meetvoorschrift geluidhinder 2006 Geluidspaden (onder), p. 9, Bijlage 3 behorende bij artikel 8 van de Regeling omgevingslawaai slide 13 “Platform Keuze”: Windows logo: © 2011 Microsoft Corporation NVidia CUDA logo: © 2011 NVidia Corporation GeForce GTX 285: © 2009 NVidia Corporation slide 15 “Design – Dataflow Diagram”: Dataflow diagram: © 2011 Organic Vectory B.V. slide 16 “GPU-Programma Flow”: GPU program flow: © 2011 Organic Vectory B.V. slide 17 “Libraries: Thrust”: Thrust logo: http://code.google.com/p/thrust/ slide 19 “Overlap Bepaling”: Sweep & Prune: © Copyright 2009, Václav Šmilauer, https://www.yade-dem.org/doc/formulation.html slide 21 “Depth-first proces graaf”: Proces Graaf: © 2011 Organic Vectory B.V. slide 24 “Beren op de weg”: Beren op de weg: http://www.d66wijchen.nl/in-het-land-der-blinden/1922/ slide 25 “Resultaat”: Noise Map: © 2011 Organic Vectory B.V. slide 27 “OpenCL – Parallel Framework”: OpenCL Devices: © 2010 Advanced Micro Device Inc., http://developer.amd.com/documentation/articles/pages/OpenCL-and-the-AMD-APP-SDK.aspx slide 29 “Parallel Design – Retro-actief”: Gewone tractor: © Diederik vd Krol, http://www.16kmclub.nl/ledenfotos/ledenfotos.htm High-speed tractor: http://www.impactlab.net/2010/07/03/top-10-photos-of-the-week-135/ slide 30 “Parallel Design – Pro-actief”: F1 Wireframe: © 2011 adrianTNT, http://www.jpgwallpaper.com/wallpapers/cars_wallpapers/ferrari_f1_blueprint_46.html Ferrari F1: http://web.me.com/riffer87/Jameys_Sit_1./Blog/Entries/2008/9/2_A_Passion_for_Red.html