Hardware/Software-Codesign Performance Hardware/Software-Codesign
Bitcoin Mining Bitcoin Transaktionen werden in Blöcken zusammengefasst Miner verifizieren die Blöcke Rate eine Zahl (Nonce) Führe SHA-256 aus auf einen Block mit Nonce Vergleiche ob Ergebnis < Threshold Wiederhole
Bitcoin Mining ArtForz 2010 Mitte Juli: erster Block 25. Juli: 80 MHash/s 4% der Blöcke der letzten 6 Tage 13. Aug: 450 MHash/s 10% der Blöcke 23. Sept: 1.5 GHash/s 15-20% laut Forum 3. Okt: 2 GHash/s 20-30% aller Bitcoins pro Tag 15. Dez: 15,75GHash/s
Bitcoin Mining “We should have a gentleman’s agreement to postpone the GPU arms race as long as we can for the good of the network.” - Satoshi Nakamoto, Dez 2009 “Seriously? What hardware is that?” - Satoshi Nakamoto, Okt 2010
Bitcoin Mining
Bitcoin Mining 2011/12: Problemmigration 2012: ASICs ASIC-Farms Hochleistung-Farms nicht profitabel FPGA-Lösungen bieteten mehr GHash/s zu geringeren Stromkosten Etwa das fünffache an Effizienz 2012: ASICs Drängt alles Andere vom Markt Zehnfache Effizienz zB SC Mini Rig erreichte 1500 GHash/s ASIC-Farms
Was ist besser: CPU, GPU, FPGA oder ASIC? Je nach Anwendung: Kosten Time-to-Market Platz Stromaufnahme Wartbarkeit … Oft ist eine Kombination günstig
Warum liegen GPUs so im Trend? Allgegenwärtigkeit OpenCL, CUDA Aufgabenbereiche Lineare Algebra Partielle Differentialgleichungen Wettervorhersage Quantenmechanik Molekulare Modellierung Kombinatorische Logik …
FPGA vs ASIC FPGA: Time-to-market Designkomplexität Wartbarkeit Upfront-Kosten ASIC: Full-Custom Unitkosten Chipfläche Geschwindigkeit Strombedarf
Wie viel schneller ist eine ASIC? Zuchowski et al. 2003: 250nm bis 90nm Lookup Table Speedup von 12 bis 14 Wilton et al. 2005: Teilbereich in ASIC ersetzt durch FPGA Speedup von 2 Kuon und Rose 2006: 90nm CMOS SRAM-FPGA, 90nm standard-cell ASIC Benchmarks: AES, Raytracer, … Nur Logikelemente: Speedup von 3,2
Was versteht man unter Performance? Geworbene Performance-Steigerung durch Übertaktung des ASUS ROG Rampage V Edition 10
Was versteht man unter Performance? Latenz Response Time CPU Time User vs System CPU Time? MIPS Unterschiedliche Instruktionen Abhängig von CPI Benchmark SPEC: perl, bzip2, gcc, mcf, ... …
Wie beeinflusst man Performance? Intel Core Duo Intel Pentium 4
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Caching Parallelisierung Abstraktion
Taktfrequenz
Taktfrequenz Critical Path kürzen Kapazitäten verkleinern Physikalische Grenzen? Spannung erhöhen Temperatur? Degradierung?
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Pipelining Branch Prediction Out-of-Order Execution Effiziente Operationen Caching Parallelisierung Abstraktion
Pipelining Fließband für Instruktionen Throughput, nicht Latenz Taktperiode bestimmt durch aufwändigste Teilaufgabe 1961 IBM Stretch Fetch, Decode, Execute
Pipelining Classic RISC ARM Intel Fetch, Decode, Execute, Memory, Writeback ARM ARM7: Fetch, Decode, Execute Krait: 11 Stages Intel 15+ Stages Dynamisches Scheduling Wert auf Branch Prediction
Pipelining Data Hazards
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Pipelining Branch Prediction Out-of-Order Execution Effiziente Operationen Caching Parallelisierung Abstraktion
Branch Prediction Instruktionen werden zu jedem Takt geladen Wo werden Branches ausgewertet?
Branch Prediction 2-bit Counter Pattern History Table Nur gut für sehr konsistente branches Pattern History Table Global oder lokal n-bit History (Schieberegister) 2n 2-bit Counter
Branch Prediction Loop Counter Return Stack Buffer Speichert pro Branch: Ob Branch Schleifenverhalten aufweist Periode der Schleife und jetzigen Standpunkt Taken/not taken bei Schleifenende Return Stack Buffer LIFO von return-Adressen Instruktionen können nach CALL geladen werden, bevor RET Instruktion erfolgt Muss gegen return-Adresse am Stack kontrolliert werden
Branch Prediction Beispiel Nehalem: 17 Taktzyklen Misprediction Penalty Loop- und nicht-Loop-Branches separat 32 Loop Counter für Periode bis zu 64 Nested Loops werden richtig predicted Zwei 18-bit History für nicht-Loop-Branches Return Stack Buffer der Größe 16
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Pipelining Branch Prediction Out-of-Order Execution Effiziente Operationen Caching Parallelisierung Abstraktion
Out-of-Order Execution Instruktionen warten in einem Buffer Ergebnisse von Operationen warten in einem Buffer Chip designers are under so much pressure to deliver ever-faster CPUs that they’ll risk changing the meaning of your program, and possibly break it, in order to make it run faster. - Herb Sutter, The Free Lunch Is Over
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Pipelining Branch Prediction Out-of-Order Execution Effiziente Operationen Caching Parallelisierung Abstraktion
Effiziente Operationen Optimierte Algorithmen vorhandene Hardware Ergebnismenge Ergebnisfolge int sum = 0; for(int i = 1; i <= n; i++) { sum += i; } return sum; return n*(n+1)/2; return sum_table[n]; sum += n; return sum;
Effiziente Operationen Compileroptimierung Peephole ersetzt mehrere/längere Instruktionen durch einfachere Local strukturiert Basic Blocks um Loop Loop unrolling, invariant code motion, distribution, … Interprocedural Inlining, constant propagation, … Language-dependent Machine-dependent zB XOR a, a um einen Register auf 0 zu setzen
Effiziente Operationen Beispiele aus gcc –O, -O2, -O3 -fomit-frame-pointer -foptimize-strlen -fipa-cp -ftree-loop-distribution -fprefetch-loop-arrays -fguess-branch-probability -funroll-all-loops
Effiziente Operationen Treiberauswahl Benchmarking von nVidia GTX 480 Treibern in Just Cause 2
Effiziente Operationen Realisierung in Hardware AES Verschlüsselung x86 Befehlssatzerweiterung 2008 FPU Library vs Coprozessor vs integriert ARM Jazelle: Hardware-unterstütze JVM
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Caching Parallelisierung Abstraktion
Caching Optimierung der Speicherzugriffe Hit/Miss Hierarchie Register (~1 ns) L1 Cache (2-8 ns) L2 Cache (5-12 ns) RAM (10-60 ns) HDD (3-10 ms) Write-Through Write-Back
Caching
Caching
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Caching Parallelisierung Multicore Hardware Software Abstraktion
Multicore “More than Moore” Hyperthreading Multicore Mai 2004 streicht Intel das Tejas-Projekt Hyperthreading Parallelität mehrerer Threads auf einem Kern Multicore Mehrere Kerne Unterstützung von Software/Betriebssystem nötig
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Caching Parallelisierung Multicore Hardware Software Abstraktion
Hardware Vervielfachung der Einheiten Verteilte Systeme zB Vektorarithmetik (AVX, MMX, SIMD) Verteilte Systeme Overhead durch Message-Passing “Jupiter” TUWien 36x2 8-Core Opteron 6134 Verbunden über Ethernet Switch
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Caching Parallelisierung Multicore Hardware Software Abstraktion
Software Revolution der Entwicklungsparadgigmen Zunehmend aufwändige Programme; die Hardware kommt nicht mit Abstraktion für Developer: Threads, Fork, … Cilk, pThreads, MPI, … Nachteile: Synchronisierung Race Conditions Deadlocks Amdahl’s Law
Wie beeinflusst man Performance? Taktfrequenz Execution Optimization Caching Parallelisierung Abstraktion
Abstraktion Memory Protection Scheduling Unified Shader Model Verbessert Wall-Clock Execution Time Unified Shader Model Jede Einheit kann alle Befehle ausführen Notwendig durch sich ändernde Anforderungen DX11/DX12 Draw Calls Schlechtes Batching führte zu Stutters
Quellen Preshing.com. A Look Back at Single-Threaded CPU Performance. 2012. http://preshing.com/20120208/a-look-back-at-single-threaded- cpu-performance/ Herb Sutter. The Free Lunch Is Over. 2005. http://www.gotw.ca/publications/concurrency-ddj.htm Joel Hruska. The Death of CPU scaling: From one core to many – and why we’re still stuck. 2012. https://www.extremetech.com/computing/116561-the-death-of- cpu-scaling-from-one-core-to-many-and-why-were-still-stuck Mark Bohr et al. The High-k Solution. 2007. http://spectrum.ieee.org/semiconductors/design/the-highk- solution D. Patterson, J. Hennessey. Computer Architecture and Design. 2012.
Quellen Gnu.org. Options That Control Optimization. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html Arm Architecture Overview. https://web.eecs.umich.edu/~prabal/teaching/eecs373- f11/readings/ARM_Architecture_Overview.pdf UMB.edu. CS641 Class 25 Pipelining. http://www.cs.umb.edu/cs641/notes25.html Jeff Brown. Pipelining: Branch Hazards. 2006. https://cseweb.ucsd.edu/classes/su06/cse141/slides/s11- chazard_adv-1up.pdf Agner Fog. The microarchitecture of Intel, AMD and VIA CPUs. 2016. http://www.agner.org/optimize/microarchitecture.pdf
Quellen cs.Washington.edu. 2006. https://courses.cs.washington.edu/courses/csep548/06au/lectures /introOOO.pdf Jon Stokes. Understanding CPU caching and performance. 2002. http://arstechnica.com/gadgets/2002/07/caching/ J. Palacios, J. Triska. A Comparison of Modern GPU and CPU Architectures: And the Common Convergence of Both. 2011. http://cours.do.am/ParadigmeAgent/final.pdf Scott Michaud. What Exactly is a Draw Call (and What Can It Do)? 2015. https://www.pcper.com/reviews/Editorial/What-Exactly-Draw-Call- and-What-Can-It-Do I. Kuon, J. Rose. Measuring the Gap between FPGAs and ASICs. 2006. http://www.eecg.toronto.edu/~jayar/pubs/kuon/kuonfpga06.pdf
Quellen Xilinx. FPGA vs. ASIC. https://www.xilinx.com/fpga/asic.htm Hilbert Hagedoorn. Radeon HD 5970 Overclocking Guide. 2009. https://www.guru3d.com/articles-pages/radeon-hd-5970- overclocking-guide,1.html Vincent Hindriksen. The 13 application areas where OpenCL can be used. 2013. https://streamcomputing.eu/blog/2013-06-03/the-application- areas-opencl-can-be-used/ Anand Lal Shimpi. Nehalem Part 3: The Cache Debate, LGA-1156 and the 32nm Future. 2008. http://www.anandtech.com/show/2671 Forklog.net. The Brief History of Bitcoin Mining: How It All Started. 2016. http://forklog.net/bitcoin-mining-past-present-and-future/
Quellen Tim Swanson. How ArtForz changed the history of Bitcoin mining. 2014. http://www.ofnumbers.com/about-the-author/