Optimierung eingebetteter Systeme - Hochschule Furtwangen
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Optimierung eingebetteter Systeme Marius Hirt Jan Alexander Knoblauch Kristian Alexander Stern Fakultät Informatik Fakultät Informatik Fakultät Informatik Hochschule Furtwangen Hochschule Furtwangen Hochschule Furtwangen marius.hirt@hs-furtwangen.de jan.alexander.knoblauch@hs-furtwangen.de kristian.alexander.stern@hs-furtwangen.de Zusammenfassung—Die Anforderungen an eingebettete Sys- Hersteller entwickeln üblicherweise keine produktspezifi- teme steigen. Immer mehr Anwendungen mit steigender Kom- schen Chips mehr, da dafür unverhältnismäßig hohe Kosten plexität sollen darauf ausgeführt werden, ohne dass der Ener- entstehen. In fast allen Fällen kann auf verfügbare Chips im giebedarf zu stark zunimmt. Nur durch bessere Hardware lässt sich diese Herausforderung allerdings nicht bewältigen. Massenmarkt zurückgegriffen werden, welche die Anforde- In dieser Arbeit werden verschiedene Ansätze zur Optimierung rungen erfüllen. Diese sind in der Regel nicht sehr spezia- eingebetteter Systeme betrachtet. Es werden Optimierungen der lisiert und lassen sich daher in unterschiedlichen Produkten Software und der Einsatz rekonfigurierbarer Systeme vorgestellt. einsetzen. Durch hohe Stückzahlen können kostenintensive Außerdem werden Techniken zur Optimierung des Speicher- Entwicklungen und aufwändige Herstellungsverfahren gedeckt systems erläutert. Dieses hat einen besonders hohen Anteil am Energieverbrauch eines eingebetteten Systems. werden. Produktspezifische Chips könnten für die jeweiligen Index Terms—embedded systems, reconfigurable systems, ca- Anwendungsfälle zwar optimiert werden, sind aber schlicht ching, optimization nicht mehr umsetzbar. Durch diese Entwicklung scheint die Anpassungsfähigkeit der Hardware insgesamt zu sinken, was I. E INLEITUNG zu weiteren Anforderungen an die Software führen wird. Aufgrund des Verluststroms wurde mittlerweile der pro- Das mooresche Gesetz des Intel-Mitbegründers Gordon portionale Energieverbrauch von Transistoren bezogen auf Moore besagt, dass sich alle zwei Jahre doppelt so viele die Abmessungen gebrochen, die Leistungsdichte und damit Transistoren auf einem Chip unterbringen lassen würden [1]. der Stromverbrauch von Chips steigt. Über Dekaden konnte Und auch die Entdeckung von Robert Dennard im Jahre 1974, die Taktfrequenz der Chips (und damit der Transistoren) bei dass Versorgungsspannung und Stromstärke eines Transistors gleichem Energieverbrauch erhöht werden. Seit einigen Jahren proportional zu dessen Abmessungen gewählt werden sollte, kann man allerdings eine Stagnierung der Taktfrequenz sowie bewies jahrzehntelange Gültigkeit [2]. Die Größe der Transis- der allgemein durchgeführten Instruktionen pro Zyklus beob- toren wurde ständig verkleinert, wodurch mehr Transistoren achten [6]. Heutzutage sind Mehrkernprozessoren üblich, die auf einem Chip verbaut werden konnten. Der Energiebedarf mehrere Aufgaben parallel verarbeiten können. Der sinnvolle blieb dabei relativ konstant [3]. Seit einigen Jahren nähert Einsatz der einzelnen Kerne stellt dabei eine Herausforde- sich die Chipproduktion allerdings dem technisch möglichen, rung für die Software dar. Denn nur ein hoher Grad an zumindest ausgehend von Silizium. Zahlreiche Forschungspro- Parallelität bei vergleichsweise niedrigem Kommunikations- jekte suchen nach anderen Materialien, konnten aber bisher aufwand zwischen den Prozessen und Kernen bringt eine noch keine Alternative finden. Die winzigen Transistoren wer- spürbare Leistungssteigerung. Zudem wird Parallelität nicht den anfälliger für Herstellungsfehler, Alterung und sogenannte allein durch mehrere Prozessorkerne erreicht, wenn die rest- Soft Faults. Dadurch wird die Herstellung von Computerchips lichen Komponenten und Peripherie geteilt werden müssen. teuer, aufwändig und kompliziert. Üblicherweise haben Prozessoren eingebetteter Systeme eine In [4] werden die Entwicklungskosten von üblichen Chips einstellige Anzahl an Kernen. Eingebettete Systeme lassen sich jeweils ein Jahr nach der Einführung einer neuen Fertigungs- nicht mit Servern in Rechenzentren vergleichen, die sehr viele größe in der Produktion genannt. Diese belaufen sich auf unabhängige und gleichartige Anfragen verarbeiten müssen. 222,3 Millionen Dollar im 7 nm-Verfahren, 436,3 Millionen Hier wird durch viele Prozessorkerne eine sehr hohe Paralle- Dollar im 5 nm-Verfahren und 650 Millionen Dollar im lität erreicht. Die Herausforderung bei eingebetteten Systemen 3 nm-Verfahren. Diese immensen Kosten führen dazu, dass liegt darin, eine Reihe sehr unterschiedlicher Aufgaben gleich- mit kleinerer Fertigungstechnologie nur noch Chips für den zeitig zu erfüllen. Die Heterogenität der Aufgaben und deren Massenmarkt wirtschaftlich entwickelt und hergestellt werden Abhängigkeiten zwischeneinander erschweren die Parallelität. können. Neben der Parallelität auf Anwendungsebene gibt es auch IBM hat im Mai 2021 eine neue Chiptechnologie mit die parallele Ausführung von Single-threaded-Anwendungen, einer Strukturgröße von zwei Nanometern vorgestellt [5]. worin möglicherweise noch viel Potenzial liegt. Darüber hin- Nach eigenen Angaben seien dadurch verglichen mit hoch aus arbeiten die Prozessor-Hersteller auch an Parallelität auf entwickelten 7 nm-Chips eine bis zu 45% höhere Leistung Instruktionsebene und der möglichst exakten Vorhersage der oder 75% weniger Energieverbrauch möglich. nächsten Prozessorbefehle, auch bekannt als ”Branch Predic- 51
tion”. Jahren ohne Verzögerungen durchführen. Seitdem hat sich die In eingebetteten Systemen, beispielsweise Smartphones und Leistungsfähigkeit um viele Größenordnungen erhöht. Aber Einplatinencomputern, kommen häufig System-on-a-Chip- wenn die Geräte leistungsfähiger werden, finden sich neue Konfigurationen (SoC) vor. Ein SoC vereint dabei neben dem Anwendungsgebiete. Auf Smartphones können mittlerweile Hauptprozessor und möglicherweise weiteren spezialisierten aufwändige 3D-Grafiken und Augmented Reality umgesetzt Prozessoren weitere benötigte Komponenten. Diese können werden. Das neue Modell des Raspberry Pi eignet sich unter anderem Bussysteme, Taktgeber, (kleine) Speicher oder für rechenintensive Anwendungen wie maschinelles Lernen Komponenten für (serielle) Schnittstellen wie USB, RS232, und künstliche Intelligenz. Eine Untersuchung in [8] zeigt CAN-Bus und Ethernet sein. Je nach Anwendungsgebiet äußerst positive Ergebnisse, bei der Bilder von indonesischen können SoCs auch Audio- und Grafik-Prozessoren enthalten. Kunstfiguren mittels Convolutional Neural Network auf einem Diese SoCs führen zu einer einfacheren Entwicklung von Raspberry Pi 4 klassifiziert wurden. Gesamtsystemen und ermöglichen eine perfekte Abstimmung Reicht die Rechenleistung einer Hardware-Plattform für zwischen den integrierten Komponenten. Die Latenz und eine Aufgabe aus, finden sich neue Aufgaben, welche die Bandbreite der Kommunikation zwischen den Komponenten Hardware an ihre Grenzen bringt. Zudem führt die zuneh- ist aufgrund der räumlichen Nähe ebenfalls ideal. mende Leistungsfähigkeit vermutlich in vielen Fällen zu in- effizienterer Software, da Entwickler hierauf keinen Fokus A. Leistungssteigerung der Hardware legen (müssen). Obwohl die Performanz bisher kontinuierlich Die Anforderungen an eingebettete Systeme steigen konti- gesteigert werden konnte, scheint sich diese Entwicklung nicht nuierlich mit dem Bedarf, verschiedene Instanzen heterogener endlos fortzusetzen. Software parallel darauf auszuführen. Zudem steigt im Allge- Die Performancesteigerung nach dem bekannten Vorgehen, meinen die Komplexität der Software. Eingebettete Systeme mehr Transistoren in einem Prozessor zu integrieren, ist end- haben üblicherweise sehr lange Laufzeiten im Bereich von lich und wird abnehmen. Caches und Caching-Algorithmen Monaten oder Jahren bis hin zum Dauerbetrieb. Sie werden sind bereits sehr effizient und die Taktfrequenz von Prozes- zudem teilweise durch Akkus gespeist. Daher wird bei der soren stagniert. Mehr Prozessorkerne sind nur ein Bestandteil Entwicklung solcher Systeme auch besonders auf die Ener- der Parallelität und der damit erhofften Beschleunigung. Für gieeffizienz geachtet. effiziente Parallelität müssen viele weitere Voraussetzungen Um den steigenden Anforderungen gerecht werden zu gegeben sein. Durch die SoC-Architektur werden Entwürfe können, wird an immer leistungsstärkerer Hardware entwi- vereinfacht und die Performanz gesteigert. Insgesamt schei- ckelt. So steigt die Leistungsfähigkeit eingebetteter Geräte nen die technischen und physikalischen Möglichkeiten der verschiedener Kategorien mit nahezu jeder Generation. Hardware bereits zu einem hohen Grad ausgenutzt zu sein. Ein einfaches Beispiel ist der Einplatinen-Computer Die Nachfrage nach immer leistungsfähigeren und energie- Raspberry Pi 4B, welcher im Juni 2019 veröffentlicht wur- sparenderen Systemen ist höher, als dass sie allein durch de. In diversen Benchmarks mittels Linpack in [7] wurde neuere Hardware bedient werden kann. In der vorliegenden die maximale Rechenleistung des Boards mit dem direkten Arbeit werden Potenziale zur Optimierung der Hardware und Vorgänger 3B+ verglichen, welcher im März 2018 erschienen Software diskutiert. ist. Der Benchmark misst die Rechenleistung unter anderem anhand mathematischer Berechnungen mit einfacher und dop- II. O PTIMIERUNG DER S OFTWARE pelter Genauigkeit. Hierbei liegt das neuere Board bei der drei- bis vierfachen Leistung des Vorgängers. Ein weiterer Ein fundamentaler Bestandteil eingebetteter Systeme ist die Benchmark misst die Lese- und Schreibgeschwindigkeit des Software. Software kann für bessere Performanz oder eine Arbeitsspeichers. Der neue Arbeitsspeicher ist insgesamt fast geringere Code-Size optimiert werden. Viele Optimierungs- doppelt so schnell wie der des Vorgängers. Außerdem sind ansätze stellen dabei einen Trade-Off zwischen diesen beiden nun Konfigurationen mit bis zu 8 GB Arbeitsspeicher möglich, Zielen dar. Eine Optimierung der Performanz kann also eine wohingegen der Vorgänger nur mit 1 GB ausgestattet wurde. höhere Code-Size nach sich ziehen, und umgekehrt. Der enorme Leistungsgewinn zwischen Modell 3 und Mo- Die meisten der hier präsentierten Optimierungstechniken dell 4 innerhalb von einem Jahr ist aber eine Ausnahme und sind nicht ausschließlich für eingebettete Systeme gültig, gibt nicht die allgemeingültige Leistungssteigerung eingebet- sondern können auch auf andere High-Performance Software teter Systeme wider. Außerdem verbraucht das Modell 4 mehr angewandt werden. Energie als die Modelle davor. Bevor mit der Optimierung von Software begonnen wird, Im weitesten Sinne sind auch Smartphones und Tablets sollte bekannt sein, welche Komponenten optimiert werden eingebettete Systeme. Hersteller solcher Geräte werben bei müssen, um den größten Effekt zu erzielen. Die 80:20 Regel neuen Geräten für das Hochpreissegment regelmäßig mit An- besagt, dass 20% des Aufwands für 80% der Ergebnisse ver- gaben wie doppelter oder vierfacher Geschwindigkeit vergli- antwortlich ist. Auf die Optimierung von Software angewandt chen mit dem Vorjahresmodell, aber was kommt davon beim bedeutet das, dass 80% des Optimierungspotenzials in 20% Endnutzer tatsächlich an? Grundfunktionen wie das Verfassen des Codes steckt. Das gilt sowohl für die Effizienz, als auch von Textnachrichten ließen sich auch schon vor über 20 für die Code-Size. 52
Ein wichtiges Werkzeug zur Identifikation der Codetei- Domäne, in der die Funktion verwendet wird, ist vielleicht le mit Potenzial für Effizienzoptimierung sind Profiler. Sie bekannt, dass nur die Primfaktorzerlegung von Zahlen zwi- sammeln während der Ausführung Daten darüber, wie viel schen 1 und 1000 benötigt wird. In diesem Fall kann man der Gesamtausführungszeit in den einzelnen Funktionen des jedes der 1000 möglichen Ergebnisse vorab berechnen, um Systems verbracht wird. Die Funktionen, in denen die meiste die kostspielige Berechnung zur Laufzeit einzusparen. Zeit verbracht wird, haben das größte Optimierungspotenzial Um den Overhead zu reduzieren, der beim Funktionsaufruf bezogen auf die Effizienz. durch die Parameter verursacht wird, kann man globale Va- Zur Optimierung der Softwareeffizienz gibt es verschiedene, riablen verwenden. Beim Aufruf müssen keine Parameter auf situationsabhängige Techniken. Diese lassen sich prinzipiell dem Stack abgelegt werden, es wird einfach auf den globalen durch die drei folgenden Ansätze kategorisieren: Speicherbereich zugegriffen [9]. Tatsächlich wirkt sich diese • Minimierung der auszuführenden Instruktionen Maßnahme auch positiv auf die Code-Size aus. Es muss be- • Optimierung der Prozessornutzung dacht werden, dass durch die Verwendung globaler Variablen • Optimierung der Cache-Nutzung die Modularität und Wartbarkeit der Software beeinflusst wird. Bei Schleifen besteht ein wesentlicher Overhead darin, dass A. Minimierung der auszuführenden Instruktionen nach jeder Iteration eine Bedingung überprüft werden muss Der offensichtlichste Ansatz zur Performanzoptimierung ist [9]. Ist beim Start der Schleife die Anzahl der Iterationen die Minimierung der Instruktionen, die vom Prozessor aus- bekannt, lässt sich dieser Overhead durch Loop Unrolling geführt werden müssen. Dazu wird die Anzahl der Instruktio- reduzieren. Dabei wird die Schleife durch eine äquivalente nen reduziert, die nicht produktiv für Berechnungen eingesetzt Schleife ersetzt, die mehrere Kopien des Rumpfes enthält. werden. Kandidaten hierfür sind hauptsächlich Funktionen und Dafür werden weniger Iterationen durchlaufen. Ist die Anzahl Schleifen. der Iterationen zur Compile-Zeit bekannt, kann die Schleife Beim Aufruf von Funktionen müssen die Funktionsparame- komplett aufgelöst werden. Wie oben wirkt sich auch hier die ter und die Returnadresse auf dem Stack abgelegt werden. Duplikation auf die Code-Size aus. Diese Optimierung kann Danach springt der Instruktionszeiger zum Beginn der Funk- ebenfalls automatisch vom Compiler durchgeführt werden tion. Beim Austritt aus der Funktion müssen die Parameter [11]. vom Stack wieder heruntergenommen werden. Danach wird zur Returnadresse zurückgesprungen. B. Optimierung der Prozessornutzung Um diesen Overhead zu vermeiden, kann man Funktionen Nicht jeder Compiler kennt jede unterstützte Instruktion inlinen [9]. Dabei wird der Funktionsaufruf direkt mit den Be- aller CPUs. Gerade bei eingebetteten Systemen gibt es eine fehlen ersetzt, die innerhalb der Funktion ausgeführt würden. breite Landschaft von Architekturen. Eventuell werden sehr In C/C++ kann man Funktionen mit dem Schlüsselwort ”in- spezifische Instruktionen unterstüzt, die der Compiler nicht line” versehen, um dem Compiler das Inlining nahezulegen kennt. Es kann sein, dass Maschinencode für eine aufwändige [10]. Moderne Compiler treffen beim Inlining meistens bessere Berechnung generiert wird, obwohl einzelne spezifische In- Entscheidungen, als der Programmierer. Wenn das Inlining struktionen ausgereicht hätten. In solchen Fällen kann man erzwungen werden soll, kann man beispielsweise mit Makros einzelne Funktionen direkt in Assembler programmieren. Die arbeiten. Den größten Effekt hat das Inlining bei kleinen Programmiersprachen C/C++ erlauben sogar Assemblercode Funktionen, die häufig aufgerufen werden. In diesem Fall innerhalb des regulären Programmcodes [10]. ist das Verhältnis zwischen Overhead und Funktionalität sehr Neben speziellen Instruktionen können etwa Mikrocon- hoch. Wird bei einer Funktion an vielen unterschiedlichen troller auch spezielle Peripherie an Bord haben, die kom- Stellen Inlining angewandt, wirkt sich das negativ auf die plexe Operationen ausführen können. Beispielsweise besitzt Code-Size aus. der Mikrocontroller STM32H747 Hardware für das Enco- Als eine Extremform des Inlining können für Funktionen ding/Decoding von JPEG. Die optimale Nutzung (und Aus- Lookup-Tables angelegt werden. Dabei werden die Ergebnisse wahl) der Hardwarekomponenten kann sich durchaus positiv der Funktion für bestimmte Eingaben vorberechnet und in auf Laufzeiteffizient, Code-Size und sogar Energieverbrauch einer Tabelle abgelegt. Statt einem Funktionsaufruf wird das auswirken. Ergebnis in der Tabelle nachgeschlagen. Der Aufruf wird also Auf der anderen Seite kann es auch sein, dass ein Pro- nicht nur mit dem Funktionsrumpf, sondern direkt mit dem zessor gängige Operationen nicht unterstüzt. In eingebetteten Ergebnis ersetzt. Lookup-Tables sind sehr effektiv, wenn die Systemen ist es nicht selbstverständlich, dass jede CPU ei- Definitionsmenge der Funktion klein und vorab bekannt ist. ne Floating-Point-Unit besitzt. Wenn im Code trotzdem mit Ist die Implementierung der Funktion sehr komplex und die Gelitkommazahlen gearbeitet wird, muss der Compiler dieses Lookup-Table verhältnismäßig klein, kann sich diese Maßnah- Verhalten in der Software simulieren. Das ist in der Regel sehr me sogar positiv auf die Code-Size auswirken. In modernen kostspielig, da die komplette Implementierung des IEEE 754 Standards von C++ lässt sich das Berechnen von Lookup- Standard [12] simuliert wird. Tables zur Compile-Zeit sogar teilweise automatisieren. Gleitkommazahlen sind eine Implementierung reeller Zah- Als Beisipel kann man eine Funktion betrachten, die len, die sowohl sehr große, als auch sehr kleine Werte dar- die Primfaktorzerlegung einer Ganzzahl berechnet. In der stellen kann. In vielen Fällen wird diese Flexibilität aber 53
nicht benötigt. Oft bewegen sich die Werte innerhalb einer werden, sondern auf den RAM zurückgegriffen werden muss. Domäne in vergleichbaren Größenordnungen. Beispielsweise Dieser Fall wird Cache-Miss genannt. Im Sinne der Perfor- wird bei einer Währung wie dem Euro selten mehr als zwei manzoptimierung sollte man also versuchen, die Anzahl der Nachkommastellen Präzision benötigt. Statt einen Betrag als Cache-Misses zu minimieren. Durch den großen Unterschied reellen Euro-Wert darzustellen ist es durchaus sinnvoll, ihn als der Zugriffszeiten von Cache und RAM hat eine gute Cache- ganzzahligen Cent-Wert zu modellieren. Nutzung ein sehr hohes Optimierungspotenzial. Dieses Prinzip lässt sich nicht immer auf so triviale Art Um das zu erreichen, kann man Datenstrukturen mit einer umsetzen. Die Fixed-Point-Arithmetik bietet eine Verallge- hohen Informationsdichte in Bezug auf gängige Operationen meinerung dieses Prinzips. Die Idee ist, dass bspw. eine designen. Nehmen wir zur Veranschaulichung einen naiven reelle Zahl 12, 34 als Ganzzahl 1234, 2 repräsentiert wird. Key-Value-Store. Implementiert ist er als Array der Key- Dabei ist an zweiter Stelle von rechts ein imaginärer, fixierter Value-Paare. Will man den Wert zu einem Schlüssel lesen, Dezimalpunkt zu interpretieren. Die 2 im Index der Fixed- wird das Array sequentiell durchlaufen und dabei die Schlüssel Point-Zahl steht dabei für die Position des Dezimalpunktes. verglichen. Bei dieser Operation interessieren wir uns für po- Arithmetische Operationen wie Addition/Subtraktion und tenziell alle Schlüssel, aber nur für einen Wert. In diesem Fall Multiplikation/Division mit Ganzzahlen funktionieren in die- selektiv nur die Schlüssel in den Cache zu laden ist generell ser Repräsentation unverändert. Es reicht aus, die zugrunde nicht möglich. Der Cache-Speicher lässt sich nicht byteweise liegenden Ganzzahlen zu addieren bzw. zu multiplizieren. schreiben. Stattdessen ist der Cache-Speicher üblicherweise in Beispielsweise die Operation 12, 34 + 12, 34 = 2 ⇤ 12, 34 = sogenannte Blocks unterteilt, die bspw. 64 Byte umfassen. Es 24, 68 ist in der Fixed-Point Arithmetik 12342 + 12342 = werden entsprechend große Blöcke aus dem RAM geladen. 2 ⇤ 12342 = 24682 ⌘ 24, 68. Bei der Addition zweier Werte Es bleibt also nichts anderes übrig, als alle Werte zusammen mit unterschiedlicher Präzision müssen die Werte zuerst in eine mit den Schlüsseln zu laden. Haben die Schlüssel und Werte einheitliche Präzision transformiert werden. Das ändern der dieselbe Datenbreite, bspw. 64 bit Ganzzahlen, wird so die Präzision ist dabei eine einfache Shift-Operation. Beispiels- Hälfte des Cache-Speichers verschwendet. Durch diese ineffi- weise ist 12342 ⌘ 123403 . ziente Nutzung des Caches werden Cache-Misses provoziert. Bei der Multiplikation und Division von Fixed-Point- Stattdessen kann man den Key-Value-Store als zwei ge- Zahlen untereinander werden die zugrunde liegenden Ganz- trennte Arrays implementieren, eins für die Schlüssel, das zahlen ebenfalls miteinander multipliziert bzw. dividiert. Die andere für die Werte. Dabei sind Schlüssel und der zugehörige Präzision des Ergebnisses ergibt sich aus der Summe (bei Mul- Wert unter dem selben Index abgelegt. Auf den zugehörigen tiplikation) bzw. der Differenz (bei Division) der Präzisionen Wert des gesuchten Schlüssels kann über den Index zuge- der Operanden. Das kann man am Beispiel der Multiplikation griffen werden. Jetzt können die Schlüssel effizient im Cache von 10, 00 ⇤ 10, 00 = 100, 00 sehen. Wenn 10, 00 ⌘ 10002 , abgelegt werden, ohne Speicher zu verschwenden. dann ist 10002 ⇤ 10002 = 1.000.0004 ⌘ 100, 0000. Der Ansatz, den Fokus auf bewusstes Datenlayout zu le- Die gezeigten Beispiele waren der Anschaulichkeit hal- gen, wird als Datenorientiertes Design (DOD) bezeichnet. ber im Dezimalsystem formuliert, die Prinzipien sind im DOD steht in starkem Kontrast zu Objektorientiertem Design Binärsystem aber dieselben. Dieser Ansatz ist praktikabel, (OOD). Beim OOD wird versucht, das Datenlayout unter wenn die Präzisionen ähnlich sind und man nur diese Un- Abstraktionsschichten zu verbergen. Dieser Ansatz ist also termenge der Operationen benötigt. Da die Simulation des keine Optimierungstechnik, die ad-hoc in Teilen eines Systems kompletten IEEE 754 Standards vermieden wird, wirkt sich angewendet werden kann. Vielmehr ist DOD eine fundamen- dieser Ansatz zusätzlich positiv auf die Code-Size aus. tale Grundlage des Softwaredesigns des Systems. C. Optimierung der Cache-Nutzung III. R EKONFIGURIERBARE S YSTEME Praktisch jeder Prozessor ist mit einem oder mehreren Ein weiterer Ansatz zur Steigerung der Performanz sind re- Caches ausgestattet. Diese sind typischerweise hierarchisch konfigurierbare Systeme (Reconfigurable Instruction Set Pro- angeordnet. Ein Level-1 (L1) Cache ist dabei tendenziell cessors, RISP). Als rekonfigurierbare Systeme werden Pro- kleiner und nah am Prozessorkern. Ein Level-2 (L2) Cache zessoren bezeichnet, die sich durch dynamische Hardwarespe- ist etwas größer und langsamer, aber auf demselben Chip. zialisierungen an bestimmte Anwendungen anpassen können. Zur Laufzeit werden häufig verwendete Daten in den Caches RISP wird teilweise auch für die Prozessorarchitektur Reduced gehalten. Auch die anstehenden auszuführenden Prozessorbe- Instruction Set Processor verwendet, welche allgemein als fehle werden im Voraus in den Cache geladen. Das Lesen Reduced Instruction Set Computer (RISC) bekannt ist. Ge- aus dem L1-Cache benötigt etwa 3 CPU-Zyklen, aus dem L2- genüber General Purpose-Architekturen, welche beispielswei- Cache in der Größenordnung von 10 Zyklen, das Lesen aus se eine statische Menge von CPU-Instruktionen bieten, sind dem RAM in der Größenordnung von 100 Zyklen [13]. Die rekonfigurierbare Systeme bezüglich der Performanz und dem Berechnung der Wurzel einer Gleitkommazahl (auf gängigen Energieverbrauch im Vorteil. Durch die Flexibilität können CPUs) bewegt sich zum Vergleich im Bereich zwischen 10 zwar unterschiedliche Anwendungsbereiche abgedeckt wer- und 30 Zyklen [14]. Es ist also jedes mal eine Performanz- den, die Zuwächse sind jedoch nicht so hoch wie bei spe- Einbuße zu spüren, wenn Daten nicht aus dem Cache gelesen zialisierter Hardware. Solche Application-Specific Integrated 54
Circuits (ASIC) sind dafür ausgelegt, eine Aufgabe höchst ren Konfiguration und Verbindung logische Operationen und effizient zu lösen, lassen sich aber nicht für andere Zwecke Funktionen implementiert werden können. Zusätzlich enthält nutzen [15]. So kann beispielsweise der STA013 von ST Mi- es eine Komponente zur Steuerung und Konfiguration dieser croelectronics von 2004 laut Datenblatt des Herstellers MP3- Logik sowie einem Speicher, indem die Logik-Konfigurationen Daten in Echtzeit dekodieren und bietet zusätzlich einfache abgelegt werden. Die Ausführung durch die rekonfigurierbare Equalizer-Funktionalitäten. Dieser ASIC ist für Soundkarten Logik ist zwar deutlich effizienter, allerdings lässt sich nicht von Computern und Multimedia-Playern vorgesehen. Er ar- der gesamte Code dadurch ausführen. Die rekonfigurierbare beitet bereits bei einer Taktrate von 10 MHz, typischerweise Logik bietet nur eine begrenzte Menge an Platz für die aber 14,7 MHz, und verbraucht lediglich 85 mW. Damit Abbildung logischer Schaltungen sowie an Speicher für diese ist er universell einsetzbaren Chips weit überlegen, welche Konfigurationen. üblicherweise weit höhere Taktfrequenzen benötigen und da- mit mehr Energie verbrauchen würden. Neben ASIC, welche C. Funktionsweise die Spezialisierung durch Hardware umsetzen, existieren auch Die Funktionsweise eines RISP erfolgt in sechs Schritten, Prozessoren nach dem Prinzip des anwendungsspezifischen In- die hier aber nur sehr knapp beschrieben werden können. struktionssatz (Application-Specific Instruction Set Processor, In [18] findet sich eine sehr umfangreiche Beschreibung. ASIP) [16]. Im ersten Schritt muss zunächst analysiert werden, welche Rekonfigurierbare Systeme sollen die Flexibilität der Gene- Abschnitte des Codes auf der rekonfigurierbaren Logik und ral Purpose-Prozessoren (GPP) und gleichzeitig die Vorteile welche auf dem GPP ausgeführt werden sollen. Hierbei ist das spezialisierter Chips wie ASIC und ASIP bieten. Universelle Ziel, den besten Kompromiss zwischen der Performanz und Systeme mit vielen spezialisierten Chips aufzubauen ist auf- den verfügbaren Ressourcen bezüglich der rekonfigurierbaren grund der Größe und Komplexität der vielen Komponenten Logik zu finden. Als Grundlage dafür werden aufgezeichnete nicht sinnvoll. Lediglich GPPs zu verwenden führt zwar dazu, Ausführungsprotokolle des Quellcodes mit erwarteten Einga- dass das System praktisch alles verarbeiten kann, ist dafür aber bewerten verwendet. Durch eine zusätzliche statische Analyse in keiner Domäne richtig effizient. Durch rekonfigurierbare werden geeignete und häufig durchlaufene Codeabschnitte, die Systeme soll diese Lücke geschlossen werden, auch wenn sie sogenannten Hotspots, identifiziert. keine vollständige Verschmelzung beider Extreme darstellen, Im zweiten Schritt werden diese Hotspots durch entspre- sondern mit Kompromissen verbunden sind. chende Instruktionen für die rekonfigurierbare Logik ersetzt. An diesen Stellen führt der GPP die ursprünglichen Be- A. Parallelität rechnungen nicht selbst durch, sondern kommuniziert mit Üblicherweise basieren Prozessoren auf der kontrollgesteu- der rekonfigurierbaren Logik. Für die rekonfigurierbare Logik erten Von Neumann-Architektur, wodurch die Ausführung werden Konfigurationen erzeugt, welche den ursprünglichen abhängig von den Programmbefehlen ist. Die Verarbeitung Operationen entsprechen. Diese Konfigurationen werden in erfolgt sequentiell. Anhand des Befehlszählers wird ein Be- den Konfigurationsspeicher geschrieben. fehl nach dem anderen ausgeführt. Größere Aufgaben wer- Die konfigurierbare Logik wendet in Schritt 3 zur Laufzeit den dadurch in viele kleinste Aufgaben zerlegt und einzeln die jeweilige Konfiguration aus dem Konfigurationsspeicher verarbeitet. Der bekannte Von Neumann-Flaschenhals wurde zur Ausführung der Berechnung an. Der benötigte Speicher- in den letzten Jahrzehnten durch viele Erweiterungen zwar platz der Konfiguration sowie die Zeit zur Anwendung dieser reduziert, existiert aber weiterhin. Auch wenn mittlerweile werden als Reconfiguration Overhead bezeichnet. mehrere Bussysteme parallel arbeiten, steht der Flaschenhals Nachdem die Konfiguration angewendet wurde, werden in auch für die Denkweise, dass immer nur eine Operation gleich- Schritt 4 die Eingabewerte, beispielsweise aus einem mit dem zeitig erfolgen kann [17]. Dem gegenüber steht die datenfluss- GPP geteilten Speicher oder einem Register, geladen. orientierte Verarbeitung, in welcher die vorliegenden Daten Im fünften Schritt erfolgt schließlich die eigentliche bestimmen, welche Operationen ausgeführt werden. Dadurch Ausführung der Operation. kann die größtmögliche Parallelität erreicht werden. Dieser Im letzten Schritt werden die Ergebnisse durch die gewählte Vorteil kommt allerdings mit einem Wechsel des Programmier- Kommunikationsart der GPP wieder zur Verfügung gestellt. paradigmas sowie speziellen Compilern und Werkzeugen. Ein Für alle Codeabschnitte, die durch die rekonfigurierbare Logik enormer Vorteil rekonfigurierbarer Systeme ist, dass sie unter ausgeführt werden sollen, werden die Schritte 3 bis 6 durch- Einsatz des kontrollgesteuerten Programmier-Paradigmas das geführt. Prinzip der datenfluss-orientierten Architektur ermöglichen. D. RISP und FPGA B. Aufbau Die beschriebenen Prozessoren mit rekonfigurierbaren In- Ein rekonfigurierbares System besitzt die Fähigkeit, meh- struktionssatz (RISP) sind nicht zu verwechseln mit pro- rere unterschiedliche Berechnungen durch Hardware durch- grammierbaren Gatter-Arrays (FPGA). Ein RISP ist ein zuführen. Es besteht neben einem GPP aus einer in Hard- vollständiger Prozessor mit integriertem General Purpose- ware implementierten rekonfigurierbaren Logik. Diese Lo- Prozessor, Daten- und Programmspeicher, Registern, Kontroll- gik umfasst viele einzelne Verarbeitungseinheiten, durch de- logik und weiteren Prozessor-typischen Komponenten. Dage- 55
gen besteht ein FPGA üblicherweise hauptsächlich aus Basis- aber auch neue Herausforderungen an das Co-Design von blöcken mit jeweils einer Lookup-Tabelle und einem Flipflop, Hardware und Software. und enthält keine Prozessor-typischen Bausteine. Dennoch lassen sich durch FPGAs Prozessoren nachbilden und die IV. O PTIMIERUNG DES S PEICHERSYSTEMS rekonfigurierbare Logik von RISPs lässt sich durch FPGAs Das Speichersystem ist einer der Haupteinflussfaktoren für umsetzen [19]. Es handelt sich dennoch um zwei unabhängige den Energieverbrauch von eingebetteten Systemen [22]. Da- Technologien. her sind Optimierungen an dieser Stelle sehr effektiv. Im Folgenden werden vier Ansätze betrachtet, mit denen der E. Anwendung Energieverbrauch und die Performanz des Speichersystems verbessert werden können: Das Grundprinzip der rekonfigurierbaren Prozessoren exis- • Verringerung der Speicherzugriffe durch Caches tiert bereits seit Mitte der 1990er Jahre. Es gibt mehrere Vari- • Verwendung von Scratchpad-Speichern anten, welche sich vor allem in der Kommunikation zwischen • Verbesserung der Lokalität von Speicherzugriffen rekonfigurierbarer Logik und GPP sowie der Umsetzung der • Nutzung energieeffizienterer Speichertechnologien rekonfigurierbarer Logik unterscheiden [20]. Die Idee ist aber weiterhin aktuell. In [21] wird eine A. Verringerung der Speicherzugriffe durch Caches ARM-basierte RISP-Architektur sowie dessen prototypenhafte Wie bereits beschrieben, können Caches für die Optimie- Umsetzung innerhalb eines FPGAs beschrieben. Die Leis- rung eingebetteter Systeme verwendet werden. Dabei kann tungsfähigkeit und Flexibilität der entwickelten Architektur sowohl der Energieverbrauch als auch die Performanz des Sys- wird ermittelt, indem 50.000 Mal 64 Bit Daten durch den tems verbessert werden. Allerdings können auch die Caches symmetrischen Verschlüsselungsalgorithmus Data Encryption selber hinsichtlich ihres Energiebedarfs und ihrer Performance Standard (DES) verschlüsselt und anschließend wieder ent- optimiert werden. Die dadurch erreichte Energieeinsparung hat schlüsselt werden. Die Autoren kommen zu dem Ergebnis, einen positiven Effekt auf die Alterung der in den Speicher- dass ihre RISP-Architektur auf Basis eines ARM-Prozessors chips verbauten Transistoren. In Speichern kann der Ausfall einen Speedup von 4868 gegenüber der herkömmlichen einzelner Transistoren zum Ausfall des gesamten Speichers Ausführung auf dem verwendeten ARM-Prozessor bietet. Ge- führen. Daher ist eine Energieoptimierung förderlich für die genüber einem Intel Core i5-Prozessor beträgt der Speedup Lebensdauer der Caches und somit des gesamten eingebetteten immerhin den Faktor 6,5. Der RISP-Prozessor wurde in einem Systems [23]. FPGA-Chip simuliert und bei lediglich 100 MHz betrieben. Performanz und Energieverbrauch von Caches werden durch Mit einem realen RISP-Prozessor und höherer Taktfrequenz die Anpassung der Cache-Konfiguration optimiert. Diese be- könnte laut den Autoren eine nochmals deutlich höhere Ge- steht aus mehreren Parametern. Die Optimierung dieser Pa- schwindigkeit erreicht werden. Aktuelle Beispiele wie dieses rameter ist in der Regel nur für bestimmte Anwendungen zeigen, dass diese Technologie bei eingebetteten Systemen möglich. Das bedeutet, dass eine Optimierung der Cache- auch heute noch ein hohes Potenzial bietet. Konfiguration für die konkreten Anwendungen erfolgen kann, die auf dem eingebetteten System ausgeführt werden sollen. F. Adaptive Systeme Diese Konfiguration kann allerdings nur eingeschränkt für Das Feld der adaptiven Systeme beschäftigt sich mit andere Anwendungen oder eingebettete Systeme übernommen Möglichkeiten der Anpassungsfähigkeit von Systemen. Die- werden. Der erste Parameter der Cache-Konfiguration ist die se Systeme können ihre Hardware und Software für neue Cache-Größe. Diese gibt die Kapazität des Speichers an. Die Herausforderungen und Anwendungsbereiche zur Laufzeit op- Assoziativität eines Cache-Speichers definiert, an wie vielen timieren. Die RISP-Architektur kann ein Bestandteil dieser Stellen im Cache ein Datenblock abgelegt werden kann. Auch Systeme sein. Durch rekonfigurierbare Prozessoren entsteht die Größe dieser Datenblöcke ist ein Parameter einer Cache- die Notwendigkeit, auch andere Komponenten der Architektur Konfiguration. Diese Blockgröße bestimmt, welche Daten- dynamisch dem Anwendungsfall anpassen zu können. In dem menge bei einem Cache-Miss aus dem Hauptspeicher in den folgenden Kapitel werden verschiedene Wege beschrieben, wie Cache kopiert wird. Der kopierte Block wird dann im Cache- Speichersysteme optimiert werden können. Dabei gibt es den Speicher abgelegt. Dabei muss eventuell ein anderer Block aus Ansatz, verfügbare Speicher und Caches durch rekonfigurier- dem Speicher entfernt werden. Welcher Block überschrieben bare Speicherhierarchien optimal auf den aktuellen Einsatz wird, hängt von der Auswahl des Replacement-Algorithmus abstimmen zu können. ab. Entweder wird der am längsten nicht verwendete Daten- Ein weiteres Themengebiet der adaptiven Systeme satz (Least Recently Used, LRU) oder der am längsten im beschäftigt sich mit der Anpassungsfähigkeit der Cache vorhandene Datensatz (First In First Out, FIFO) er- Kommunikation zwischen Komponenten wie Prozessoren und setzt. Außerdem können auch zufällige Datensätze (Random) Prozessorkernen. Des Weiteren gibt es auch auf der Seite überschrieben werden. Des weiteren gibt es zwei verschiedene der Software Möglichkeiten, besser auf die sich ändernde Write-Policies, mit denen festgelegt wird, wann der Wert eines Hardware adaptiver Systeme zu reagieren. Adaptive Systeme Blocks in den Hauptspeicher geschrieben wird. Bei COPY- ermöglichen neue Wege in der Software-Entwicklung, stellen BACK werden die Daten aus dem Cache nur dann in den 56
Hauptspeicher zurückgeschrieben, wenn es absolut erforder- dung, oder automatisiert durch einen Compiler. Damit ein lich ist. Bis zu diesem Zeitpunkt sind die Inhalte von Cache SPM einen Cache ersetzen kann, muss der Compiler eine und Hauptspeicher inkonsistent. Bei WRITE-THROUGH wer- effektive Zuordnung von Speicherobjekten zu SPMs finden den die Daten im Cache und im Hauptspeicher gleichzeitig [26]. Es lassen sich zwei Arten von Zuordnungen zwischen geändert. Zuletzt kann angepasst werden, wann Daten in Speicherobjekten und SPMs unterscheiden. Bei der statischen den Cache geladen werden. Dies wird mit einem Prefetch- Zuordnung bleiben die Speicherobjekte solange im SPM wie Algorithmus bestimmt. Beispielsweise können Blöcke erst bei die Anwendung ausgeführt wird, zu der sie gehören. Dadurch einem Cache-Miss geladen werden. Außerdem ist es möglich wird die Kapazität des pro laufender Anwendung verfügbaren mehrere Blöcke gleichzeitig in den Cache zu laden, wenn diese Speichers limitiert. Bei der dynamischen Zuordnung werden explizit angefordert werden. Es ist aber auch möglich immer Speicherobjekte zur Laufzeit zwischen dem Hauptspeicher und ein Prefetch durchzuführen. Das bedeutet, dass beim Laden dem SPM verschoben. Zwar handelt es sich jeweils um recht eines Blocks in den Cache auch immer der nächste Block schnelle Speicher, jedoch beeinträchtigt ein häufiges Verschie- mitgeladen wird [23]. ben die Performanz der Systems. Diese Methode ist daher Die Optimierung der Cache-Konfiguration wird vor allem für Größere Anwendungen geeignet, die mehrere hauptsächlich mit zwei verschiedenen Methoden Hotspots haben. Dabei handelt es sich um Codefragmente vorgenommen. Die erste Methode ist der Einsatz von oder Daten, die häufig verwendet werden, allerdings optimaler dynamischer Rekonfiguration, um zur Laufzeit des Weise nicht gleichzeitig oder mit häufigen Wechseln, sodass Systems die Konfiguration anzupassen. Die jeweils der Inhalt des SPM nicht laufend ausgetauscht werden muss aktive Konfiguration soll dann optimal zu den aktuellen [27]. Anforderungen des eingebetteten Systems passen. Diese Mit mehreren Prozessen oder Threads tritt das Problem Methode kann in der Regel nur wenige Parameter auf, dass diese um den verfügbaren Scratchpad-Speicher kon- optimieren und setzt außerdem voraus, dass der Entwurf des kurrieren. Die Zuordnung der Speicherobjekte kann dabei Speichersystems dynamische Anpassungen ermöglicht. Das mit drei verschiedenen Strategien vorgenommen werden. Bei Speichersystem muss also bei der Planung des eingebetteten der speichernd / wiederherstellenden Strategie wird der SPM Systems entsprechend komplexer ausgelegt werden. Ein jeweils von einem Prozess beansprucht und der Inhalt des Überblick der verfügbaren Technologien für rekonfigurierbare SPMs beim Kontextwechsel in den Hauptspeicher verdrängt. Speicher wird in [24] gegeben. Die zweite Methode Diese Strategie ist bei kleinen SPMs sinnvoll, da sonst die zur Cache-Optimierung ist die Verwendung statischer Übertragungsdauer starke Auswirkungen auf die Performanz Profile. Dabei werden die Anwendungen, die auf dem hat und den Energieverbrauch in die Höhe treibt. Bei der eingebetteten System ausgeführt werden sollen, mit mehreren nicht-speichernd / wiederherstellenden Strategie wird ein SPM Cache-Konfigurationen getestet und ein Leistungsprofil partitioniert. Jeder Prozess nutzt dann den ihm zugeteilten aufgenommen. Anhand der gemessenen Daten wird dann Speicherbereich. Das Befüllen des Speichers wird einmal die beste Konfiguration ausgewählt. Durch die hohe Anzahl während der Initialisierung des Prozesses vorgenommen. Es möglicher Cache-Konfigurationen ist es allerdings sehr kann aber auch ein hybrider Ansatz gewählt werden, bei zeitaufwändig jede einzelne davon zu evaluieren. Um diesem dem ein Teil des SPMs beim Kontextwechsel ausgetauscht Problem zu begegnen können beispielsweise genetische wird und ein anderer Teil partitioniert wird. Das Verhältnis Algorithmen zur Optimierung eingesetzt werden. Eine der beiden Anteile zu bestimmten stellt dabei eine weitere mögliche Cache-Konfiguration stellt dabei ein Chromosom Optimierungsaufgabe dar [27]. dar. Für mehrere Konfigurationen werden statische Leistungsprofile aufgenommen und die besten ausgewählt. C. Verbesserung der Lokalität von Speicherzugriffen Für die nächste Generation werden neue Konfigurationen Heute werden vermehrt eingebettete Systeme eingesetzt, durch Mutation der ausgewählten Chromosome erzeugt. Über die mehrere Prozessoren in einem Chip vereinen. Die Pro- mehrere Generationen kann so eine optimale Konfiguration zessoren werden als Prozessorkerne oder Cores bezeichnet. ausgewählt werden, ohne tatsächlich eine Leistungsbewertung Ein Vorteil dieser Multicoresysteme ist, dass die Kommuni- für jede mögliche Kombination der Cache-Parameter kation zwischen den Kernen mit einem geringeren Aufwand durchführen zu müssen [23]. verbunden ist. Da die Kommunikation zwischen den Kernen nun weniger aufwändig ist, wirken sich Zugriffe auf Kom- B. Verwendung von Scratchpad-Speichern ponenten außerhalb des Prozessors im Vergleich stärker auf Scratchpad-Speicher (Scratchpad-Memory, SPM) sind ei- den Energieverbrauch und die Performanz des Gesamtsys- ne Alternative zu Caches. Da es sich dabei ebenfalls um tems aus. Mögliche Optimierungsansätze in solchen Systemen kleine Speicher handelt, haben die Scratchpad-Speicher auch beziehen sich daher meist auf Zugriffe der Kerne über die den Vorteil, dass die Zugriffe darauf schnell sind und der Chipgrenze des Prozessors hinaus. In Systemen, bei denen sich Energiebedarf gering ist [25]. Allerdings sind diese Speicher mehrere Prozessorkerne einen Hauptspeicher teilen, beeinflus- nicht transparent wie Caches. Stattdessen werden Variablen sen sich die Zugriffe der Kerne gegenseitig. Wenn mehrere oder Instruktionen gezielt einem SPM zugeordnet. Entweder Kerne um einzelne Busse oder Pins konkurrieren, die sie geschieht dies manuell durch den Entwickler einer Anwen- zum Speicherzugriff benötigen, beeinflusst das die Performanz 57
des Gesamtsystems [28]. Außerdem werden durch die Pro- fließen in einen einzigen Anweisungsstrom zum DRAM. Da zesse auf den einzelnen Kernen in der Regel verschiedene die verschiedenen Kerne oft auf verschiedene Bereiche im Speicherbereiche verwendet. Diese Zugriffe benötigen durch Speicher zugreifen, liegen Zugriffe auf gleiche Speicherberei- die Bauweise gängiger DRAM-Speicher mehr Energie, als che im Anweisungsstrom weiter auseinander und können vom Zugriffe auf nahe beieinanderliegende Zellen im Speicher [29]. Scheduler nicht gruppiert werden [29]. Zudem hat das Speichersystem generell einen hohen Anteil am Ein Ansatz, um die Row-Buffer-Lokalität zu erhalten, ist Energieverbrauch von eingebetteten Systemen [22]. dem Scheduler zu ermöglichen eine größere Anzahl von In Systemen mit mehreren Prozessorkernen sollte zunächst Speicherzugriffen zu berücksichtigen. Dadurch können die die Anzahl der Zugriffe auf den Hauptspeicher möglichst Zugriffe besser gruppiert werden, um eine größere Anzahl gering sein. Um dies zu erreichen, könnten beispielsweise an Row-Buffer-Hits zu erzielen, bevor die aktive Zeile im Caches verwendet werden, um Zugriffe direkt beantworten Hauptspeicher gewechselt werden muss. Eine weitere Methode zu können. Das ist schneller und benötigt zudem weniger ist es, die Kerne mehrere Speicherzugriffe direkt hintereinan- Energie. Gerade in heterogenen Multicoresystemen müssen der durchführen zu lassen. Die Annahme ist hierbei, dass die teilweise große Datenmengen zwischen den verschiedenen Zugriffe eines einzelnen Kerns ein höhere Lokalität aufweisen. Kernen ausgetauscht werden. Dabei ist die Größe der Ca- Es genügt allerdings nicht, einfach jedem der Kerne eine feste ches oftmals allerdings nicht ausreichend. Zugriffe auf einen Anzahl von aufeinanderfolgenden Speicherzugriffen gestattet größeren Hauptspeicher sind also nicht vermeidbar und stellen werden. Durch diesen Ansatz können vor allem Echtzeitkerne einen wichtigen Kommunikationsweg zwischen den Kernen verdrängt werden. Diese benötigen nur eine geringe Bandbrei- dar. Daher gilt es in solchen Systemen die Zugriffe auf den te und sind darauf angewiesen schnell auf den Speicher zugrei- Hauptspeicher zu optimieren [29]. fen zu dürfen. Gleichzeitig führen Echtzeitkerne nur eine ge- Heterogene Multicoresysteme sind eine spezielle Art von ringe Anzahl an Speicherzugriffen aus. Für den Fall, dass Echt- Multicoresystemen. Diese zeichnen sich dadurch aus, dass die zeitkerne in einem heterogenen Multicoresystem vorhanden Rechenkerne im Prozessor verschieden sind. Beispielsweise sind, kann beispielsweise durch den Einsatz eines Network-on- könnte ein solches System aus Prozessorkernen mit verschie- Chip-Controllers die Row-Buffer-Lokalität verbessert werden. denen Taktraten bestehen, oder spezialisierte Kerne für die Dieser ist normalerweise nur dafür zuständig, die Speicher- Verarbeitung von Bild- oder Tondaten haben. Verschiedene zugriffe an den zuständigen Speichercontroller weiterzuleiten. Aufgaben werden von verschiedenen Kernen durchgeführt, um Durch gezieltes Weiterleiten der Anfragen auf Basis der gerade die jeweiligen Vorteile der Prozessorkerne optimal nutzen zu aktiven Zeile oder aufgrund des Prozessorkerns, von dem die können. Die Daten müssen dabei zwischen den Kernen aus- Anfrage kam, kann die Row-Buffer-Lokalität erhalten oder getauscht werden. Ein Problem dabei ist, dass beispielsweise verbessert werden und gleichzeitig vermieden werden, dass Multimediadaten nicht vollständig in die Caches passen. Da- hohe Latenzen für Echtzeitkerne entstehen [29]. durch wird bei der Verarbeitung solcher Daten der DRAM zum Neben einer hohen Row-Buffer-Lokalität bieten auch Zu- Hauptkanal für die Kommunikation zwischen den einzelnen griffe auf die selben Memory-Banks Optimierungspotenzial. Kernen [29]. Dazu muss der Speicher allerdings zunächst in mehrere klei- In heterogenen Multicoresystemen genügt der Einsatz und nere solcher Memory-Banks aufgeteilt sein. Wenn nur wenige die Optimierung von Caches also oftmals nicht. Stattdessen Memory-Banks durch die Prozessorkerne verwendet werden, müssen die Zugriffe der verschiedenen Kerne auf den Haupt- können die gerade nicht genutzten Banken des Speichers speicher optimiert werden. Ein Optimierungsansatz ergibt sich in Energiesparmodi versetzt werden. Diese Energiesparmodi aus einer Einschränkung in der DRAM-Architektur. Diese können allerdings nur begrenzt genutzt werden, wenn häufig besteht darin, dass jeweils nur eine Zeile in einem Speicher- auf die Memory-Banks zugegriffen wird. Der Wechsel zurück block aktiv sein kann. Der Wechsel der aktiven Zeile kostet aus einem Energiesparmodus in den aktiven Zustand erzeugt Energie und Zeit, da eine sogenannte Precharge-Operation außerdem Latenzen, die die Performanz negativ beeinflussen durchgeführt werden muss. Während dieser Aktion werden au- können. Zur optimalen Nutzung der Energiesparmodi sollten ßerdem noch keine Daten übertragen. Der Scheduler versucht die Prozessorkerne jeweils nur auf eine kleine Menge der die Anzahl der Precharge-Operationen daher so gering wie Memory-Banks zugreifen. Verschiedene Prozessorkerne soll- möglich zu halten. Es sollen also möglichst viele Speicherzu- ten außerdem möglichst nicht auf die gleichen Memory-Banks griffe auf der aktuellen Zeile – dem sogenannten Row-Buffer – zugreifen. Dadurch wird die Datenlokalität erhöht und es treten durchgeführt werden. Ein Speicherzugriff auf den Row-Buffer weniger Zugriffskonflikte zwischen den Prozessorkernen auf. wird als Row-Buffer-Hit bezeichnet [29]. Zudem sind die Zugriffe geordneter und damit leichter vor- Wenn viele Zugriffe auf den Row-Buffer erfolgen, spricht herzusagen, wodurch auch besser vorhergesagt werden kann, man von einer hohen Row-Buffer-Lokalität. In heteroge- welche Memory-Banks in einen Energiesparmodus versetzt nen Multicoresystemen sinkt die Row-Buffer-Lokalität, selbst werden können [28]. wenn die Zugriffe jedes einzelnen Prozessorkerns eine sehr hohe Row-Buffer-Lokalität aufweisen. Grund dafür ist die D. Nutzung energieeffizienterer Speichertechnologien gemeinsame Nutzung des Hauptspeichers durch die Prozessor- Falls der Energieverbrauch des verwendeten Speichers kerne. Die Speicherzugriffe der verschiedenen Prozessorkerne durch die bereits vorgestellten Maßnahmen nicht reduziert 58
werden kann, sollte auch abgewogen werden, ob der Einsatz Mithilfe rekonfigurierbarer Systeme können Vorteile von einer anderen Speichertechnologie Vorteile bringt. Gängige anwendungsspezifischer Hardware genutzt werden. Diese Sys- DRAM-Speicher haben den Nachteil, dass die gespeicherten teme bieten die Möglichkeit, Code teilweise in rekonfigurier- Daten flüchtig sind. Grund hierfür sind die für die Daten- bare Hardware auszulagern. Damit lassen sich Code-Teile, speicherung genutzten Kondensatoren. Diese verlieren mit der deren Ausführung auf einem General Purpose-Prozessor sehr Zeit an Ladung und müssen daher ständig ausgelesen und der aufwändig ist, performanter und mit einem geringeren Leis- Wert erneuert werden, um den Ladungsverlust auszugleichen. tungsbedarf ausführen. Dieser Vorgang wird als Refreshing bezeichnet und macht Ein wichtiger Optimierungsansatz, der betrachtet wurde, ist einen hohen Anteil an der Leistungsaufnahme von DRAM- die Optimierung des Speichersystems. Dieses hat einen hohen Speichern aus. Zudem werden die gespeicherten Daten durch Anteil am Energieverbrauch eingebetteter Systeme und bietet das Auslesen zerstört, weshalb der Row-Buffer zum Einsatz darüber hinaus bei einer Optimierung auch eine gesteiger- kommt, in dem die ausgelesenen Daten gespeichert werden. te Performanz. Erläutert wurde die Anpassung der Cache- Alternativ können nicht-flüchtige Speichertechnologien einge- Konfiguration, um den Leistungsbedarf und die Performanz setzt werden. Diese bieten gegenüber den DRAM-Speichern eines eingebetteten Systems für einzelne Anwendungen zu geringere Zugriffslatenzen und beim Schreiben von Daten optimieren. Außerdem wurde der Einsatz von Scratchpad- müssen nicht erst die im Speicher vorhandenen Datenblöcke Speichern thematisiert. Diese können als Alternative zu Ca- gelöscht werden. Außerdem bieten sie einen Kostenvorteil, da ches genutzt werden, müssen aber entweder manuell oder die Speicherzellen eine geringere physikalische Größe auf- von einem Compiler eingebunden werden. Weitere Optimie- weisen und gleichzeitig mit bestehenden Fertigungsprozessen rungsansätze in Bezug auf das Speichersystem bestehen darin, hergestellt werden können. Allerdings bringen diese Speicher- die Lokalität von Speicherzugriffen zu verbessern oder nicht- technologien auch Nachteile mit sich. Zum einen wird für das flüchtige Speichertechnologien einzusetzen. Schreiben von Daten in den Speicher viel Energie benötigt. Wichtig bei Optimierungen ist vor allem, dass es keine Zum anderen ist die Lebensdauer der Speicher eingeschränkt, Methode gibt, die uneingeschränkt zu einer Verbesserung wenn viele Schreibzugriffe erfolgen. Letzteres lässt sich al- des Energiebedarfs oder der Performanz führen. Jede der lerdings durch Caching ausgleichen, wodurch die Anzahl an vorgestellten Methoden kann für die Optimierung eingesetzt Schreibzugriffen deutlich reduziert werden kann. Insgesamt werden, jedoch ist nicht sicher, dass alle Methoden in einem bieten nicht-flüchtige Speicher einen besseren Energiever- bestimmen Anwendungsfall funktionieren. Daher sollten alle brauch, wenn die Row-Buffer-Lokalität wie beispielsweise in Optimierungsansätze abgewägt und gegebenenfalls durch den Multicoresystemen gering ist, da kleinere Row-Buffer möglich Einsatz geeigneter Metriken bewertet werden. sind [30]. L ITERATUR V. FAZIT [1] G. E. Moore, “Cramming more components onto integrated circuits, Die Optimierung eingebetteter Systeme wird immer wichti- reprinted from electronics, volume 38, number 8, april 19, 1965, pp.114 ger. Zum einen weil die Anforderungen an solche Systeme ff.” IEEE Solid-State Circuits Society Newsletter, vol. 11, no. 3, pp. 33–35, 2006. steigen. Zum anderen kann eine Leistungssteigerung nicht [2] R. Dennard, F. Gaensslen, H.-N. Yu, V. Rideout, E. Bassous, and mehr alleine durch das Hinzufügen weiterer Transistoren zu A. LeBlanc, “Design of ion-implanted mosfet’s with very small physical einem Prozessor erreicht werden. Der heutige Stand der Ferti- dimensions,” IEEE Journal of Solid-State Circuits, vol. 9, no. 5, pp. 256–268, 1974. gungstechnik von Halbleitern hat außerdem dazu geführt, dass [3] L. Eeckhout, “Is moore’s law slowing down? what’s next?” IEEE Micro, anwendungsspezifische Hardware nicht mehr kosteneffizient vol. 37, no. 4, pp. 4–5, 2017. produziert werden kann. [4] M. LaPedus, “5/3nm wars begin,” 1 2020. [Online]. Available: https://semiengineering.com/5-3nm-wars-begin/ In der vorliegenden Arbeit wurden daher verschiedene [5] B. H. McCarthy and S. Ponedal, “Ibm unveils world’s first 2 nanometer Ansätze zur Optimierung der Nutzung vorhandener Hardwa- chip technology, opening a new frontier for semiconductors,” 5 reressourcen vorgestellt. Auf Seiten der Software können bei- 2021. [Online]. Available: https://newsroom.ibm.com/2021-05-06-IBM- Unveils-Worlds-First-2-Nanometer-Chip-Technology,-Opening-a-New- spielsweise durch Inlining von Funktionen oder das Abrollen Frontier-for-Semiconductors von Schleifen die Anzahl auszuführender Instruktionen ver- [6] A. C. S. Beck, C. A. L. Lisbôa, L. Carro, G. L. Nazar, M. M. Pereira, bessert werden. Außerdem kann die Nutzung des Prozessors and R. R. Ferreira, “Adaptability: The key for future embedded systems,” in Adaptable Embedded Systems. Springer New York, Oct. 2012, pp. optimiert werden, indem besonders effiziente Instruktionen, 1–12. [Online]. Available: https://doi.org/10.1007/978-1-4614-1746-0 1 die ein Compiler eventuell nicht kennt, direkt in Assemblerco- [7] R. Zwetsloot, “Benchmarking raspberry pi 4,” The MagPi - The official de verwendet und in die eigentliche Anwendung eingebunden Raspberry Pi magazine, vol. 83, pp. 32–35, 7 2019. [8] K. Wisnudhanti and F. Candra, “Image classification of pandawa figures werden. Auch die Verwendung von Fixed-Point-Arithmetik using convolutional neural network on raspberry pi 4,” Journal of kann eine Optimierung bewirken, falls der Prozessor des Physics: Conference Series, vol. 1655, p. 012103, oct 2020. [Online]. eingebetteten Systems keine Hardware für Berechnungen mit Available: https://doi.org/10.1088/1742-6596/1655/1/012103 Gleitkommazahlen besitzt. Um Caches bei der Softwareent- [9] M. Barr and A. Massa, Programming embedded systems: with C and GNU development tools. ” O’Reilly Media, Inc.”, 2006. wicklung besser zu nutzen, können außerdem Methoden des [10] ISO/IEC 9899:2018, “Information technology – programming languages datenorientierten Designs angewendet werden. – c,” International Organization for Standardization, Tech. Rep., 2018. 59
[11] R. M. Stallman and the GCC Developer Community, Using the GNU [22] S. Steinke, N. Grunwald, L. Wehmeyer, R. Banakar, M. Balakrishnan, Compiler Collection for GCC version 10.2.0, Free Software Foundation, and P. Marwedel, “Reducing energy consumption by dynamic copying Inc., Boston, MA, 2020. of instructions onto onchip memory,” in 15th International Symposium [12] IEEE Std 754-2019, “Ieee standard for floating-point arithmetic,” Insti- on System Synthesis, 2002. IEEE, 2002, pp. 213–218. tute of Electrical and Electronics Engineers, Tech. Rep., 2019. [23] J. D. Álvarez, J. L. Risco-Martı́n, and J. M. Colmenar, “Multi-objective [13] A. Fog, Optimizing subroutines in assembly langua- optimization of energy consumption and execution time in a single level ge, Technical University of Denmark, 1 2021, htt- cache memory for embedded systems,” Journal of Systems and Software, ps://www.agner.org/optimize/optimizing assembly.pdf, abgerufen vol. 111, pp. 200–212, 2016. am 07.07.2021. [24] G. L. Nazar and L. Carro, “Reconfigurable memories,” in Adaptable [14] ——, Instruction Tables, Technical University of Denmark, 3 Embedded Systems. Springer New York, Oct. 2012, pp. 95–117. 2021, https://www.agner.org/optimize/instruction tables.pdf, abgerufen [Online]. Available: https://doi.org/10.1007/978-1-4614-1746-0 4 am 07.07.2021. [25] P. Marwedel, “Hardware eingebetteter Systeme,” in Eingebettete Syste- [15] M. Smith, Application-specific integrated circuits. Reading, Mass: me. Springer, 2021, pp. 141–219. Addison-Wesley, 2008. [26] R. Banakar, S. Steinke, B.-S. Lee, M. Balakrishnan, and P. Marwedel, [16] M. K. Jain, M. Balakrishnan, and A. Kumar, “Asip design metho- “Scratchpad memory: A design alternative for cache on-chip memory dologies: Survey and issues,” in In Proceedings of the IEEE / ACM in embedded systems,” in Proceedings of the Tenth International Sym- International Conference on VLSI Design, 2001, pp. 76–81. posium on Hardware/Software Codesign. CODES 2002 (IEEE Cat. No. [17] J. Backus, “Can programming be liberated from the von neumann 02TH8627). IEEE, 2002, pp. 73–78. style? a functional style and its algebra of programs,” Commun. [27] P. Marwedel, “Optimierung,” in Eingebettete Systeme. Springer, 2021, ACM, vol. 21, no. 8, p. 613–641, Aug. 1978. [Online]. Available: pp. 379–411. https://doi.org/10.1145/359576.359579 [28] M. T. Kandemir, “Reducing energy consumption of multiprocessor soc [18] A. C. S. Beck and M. M. Pereira, “Reconfigurable systems,” in architectures by exploiting memory bank locality,” ACM Transactions Adaptable Embedded Systems. Springer New York, Oct. 2012, pp. 41– on Design Automation of Electronic Systems (TODAES), vol. 11, no. 2, 94. [Online]. Available: https://doi.org/10.1007/978-1-4614-1746-0 3 pp. 410–441, 2006. [19] F. Barat, R. Lauwereins, and G. Deconinck, “Reconfigurable instruction [29] Y. Song and B. Lin, “Improving memory efficiency in heterogeneous set processors from a hardware/software perspective,” Software Engi- mpsocs through row-buffer locality-aware forwarding,” ACM Transacti- neering, IEEE Transactions on, vol. 28, pp. 847– 862, 10 2002. ons on Architecture and Code Optimization (TACO), vol. 17, no. 1, pp. [20] F. Barat and R. Lauwereins, “Reconfigurable instruction set processors: 1–26, 2020. a survey,” in Proceedings 11th International Workshop on Rapid System [30] J. Meza, J. Li, and O. Mutlu, “Evaluating row buffer locality in future Prototyping. RSP 2000. Shortening the Path from Specification to non-volatile main memories,” arXiv preprint arXiv:1812.06377, 2018. Prototype (Cat. No.PR00668), 2000, pp. 168–173. [21] J. Yin, X. Zhenpeng, X. Fang, and X. Zhou, The Design of Re- configurable Instruction Set Processor Based on ARM Architecture: 12th Conference, ACA 2018, Yingkou, China, August 10-11, 2018, Proceedings, 09 2018, pp. 66–78. 60
Sie können auch lesen