Home Site Map Sonstige Aufsätze Weblog und Gequassel counter

Web Log Teil 597: 30.7.2020 -

30.7.2020: Prozessorarchitekturentwicklung

Im heutigen Artikel will ich knapp mal die Grundlagen der internen Optimierung von Prozessoren aufgreifen. Das Thema ist nicht neu, ich habe es auf meiner Webseite in mehreren Artikeln ausführlich behandelt.

Der Befehlszyklus

Ein Mikroprozessor der ersten Generationen, aber auch viele größere alte Computer arbeiteten nach dem Befehlszyklus. Die Ausführung jedes Befehls unterteilte sich in drei elementare Operationen:

Jeder Befehl besteht mindestens aus diesen drei Phasen, sie können sich aber auch wiederholen. Sind Daten Bestandteil des Befehls, so kommt mindestens ein weiterer Fetch-Zyklus hinzu, um diese zu holen. Komplexe Befehle belegen mehr als ein Byte und dann steht der Befehl nach dem ersten Decode nicht fest und es kommt noch ein Fetch / Decode hinzu und zuletzt benötigen nur einfache Befehle einen Ausführungszyklus. Komplexe Befehle können davon mehrere benötigen. Bei mathematischen Operationen sind das z.B. Multiplikation oder Division. Für jeden Mikroprozessor kann man so für einen Befehlsmix, den man anhand typischer Programme bestimmen kann angeben, wie viele Takte er typischerweise für eine Befehlsausführung braucht. Beim Urahn der x86 Reihe, dem 8086 waren dies 10 Takte. Bei maximal 8 MHz bei seiner Einführung konnte er also 800.000 Instruktionen pro Sekunde ausführen – diese Zahl (0,8 MIPS) war früher eine grobe Leistungsangabe. Grob nur deswegen, weil die Befehle der verschiedenen Prozessoren unterschiedlich waren und so nicht direkt vergleichbar.

Die Pipeline

Intern zerfällt ein Prozessor in Untereinheiten mit jeweils einer bestimmten Funktion. Das können z.B. sein:

Das sind nur einige mögliche Einheiten. Die erste Erkenntnis der Prozessorbauer war, dass bei dem obigen Zyklus bei jeder Phase nur eine dieser Einheiten aktiv war. Beim Fetch eben die Busansteuerung und bei Decode der Befehlsdecoder. Bei Execute hing es vom Befehl ab. Die anderen Einheiten hatten nichts zu tun. Bei einer Pipeline ist das anders. Da holt bei jedem Takt die Fetch Einheit ein Byte aus dem Speicher, der Dekoder dekodiert ein Byte und die Ausführungseinheiten führen den Befehl aus. Da der Befehl so von Station zu Station wandert, nennt man das Pipeline.

Das ganze klingt, aber einfacher als es ist und hat in der Praxis einige Tücken. So kann die Adresse wechseln, wenn z.B. ein Unterprogramm aufgerufen wird. Dann wurden schon Daten aus dem Speicher geholt, die man gar nicht brauchte. Trotzdem kann eine Pipeline die Ausführung drastisch beschleunigen. Bei der x86 Serie wurde sie mit dem 80286 eingeführt, bei Großcomputern Mitte der Sechziger Jahre. Ein prominentes Beispiel war die IBM 360 Serie.

Wie groß eine Pipeline ist, das hängt von der Architektur ab. Beim 80286 hatte sie drei Stufen also drei Befehle konnten gleichzeitig bearbeitet werden. Bei Großrechnern mit RISC-Architektur stellte man in den Sechzigern fest, dsas das Optimum für diese Befehle bei sechs Stufen lag. Demgegenüber erreichten einige Versionen des Pentium III eine Pipeline von 32 Stufen – das war dann doch etwas zu viel und heutige Prozessoren haben zwischen 14 und 19 Stufen. Rein theoretisch kann man so mit eiern Pipeline die Ausführungszeit auf minimal 1 Takt pro Befehl drücken, das hatte man bei der x86 Architektur mit dem 80486 erreicht, der 80 % aller Befehle in einem Takt ausführen konnte.

Superskalar

Der Begriff „superskalar“ ist etwas verwirrend. Es ist so ein typisches Fachwort. Skalare sind bei Computern einfache Daten, also eine Zahl, ein Byte oder eine Adresse. Das Gegenteil davon ist der Vektor, eine Datenstruktur aus vielen Skalaren, wir würden dazu sagen ein Feld wie man es auch direkt in Programmiersprachen (meist mit dem Schlüsselwort „Array“ deklarieren kann. „Super“ bedeutet in Latein „über“, es ist also mehr als eine skalare Architektur. Gemeint ist damit schlicht und einfach, dass die oben erwähnten Funktionseinheiten mehrfach vorhanden sind.

Will man mehr als einen Befehl pro Takt ausführen, so ist logisch, das diese Einheiten mehrfach vorhanden sein müssen, denn nur so kann man mehr als einen Befehl pro Pipelinestufe bearbeiten. Bei Großcomputern wurde das ebenfalls Mitte der Sechziger Jahre eingeführt, einer der ersten Rechner war die CDC 6600. Bei der x86 Linie hatte der Pentium erstmals eine Einheit verdoppelt, das war die ALU, welche auch die meisten Operationen ausführen muss.

Doch auch hier gibt es Probleme. So können Befehle voneinander abhängen. Bei jeder Befehlszeile in einer höheren Programmiersprache, die mehr als eine mathematische Operation beinhaltet, ist das der Fall, denn Prozessoren können (meist) nur eine Operation pro Befehl durchführen. Dann gibt es aber eine Abhängigkeit – die zweite Operation braucht das Ergebnis der ersten um weiter rechnen zu können. Bei:

D = A+ B + C

muss man zuerst A+B addieren, bevor man zum Zwischenergebnis C addieren kann. Das hält dann wieder auf. Die Lösung bei komplexeren Prozessoren ist eine eigene Einheit, der Scheduler, der Buch führt, welche Einheiten wie belegt sind und die Befehle dann auf die Einheiten verteilt. Er kann Befehle so vorziehen, wenn wie oben ein Befehl auf ein Ergebnis warten muss. Das nennt man „out of Order execution“. Das ist ein mächtiges Werkzeug. Innerhalb der x86 Serie haben alle Prozessoren dieses Feature bis auf die Atoms. Wer jemals einen Computer mit einem Atom (z.B. ein billiges Notebook oder Tablett) und einen iCore Prozessor hatte ,weiß wie unterschiedlich schnell die bei ähnlichem Takt sein können. Seit der Haswell-Generation hat ein x86 Prozessor übrigens 14 Funktioneinheiten, die ALU ist als häufigste Einheit nicht weniger als sechsmal vorhanden. Maximal 4 Befehle pro Takt können ausgeführt werden.

Mehrere Kerne

Verhältnismäßig spät wurden bei der x86 Architektur mehrere Kerne eingeführt. Der große Unterschied – der ganze Prozessor ist mehrfach vorhanden. Dazu gehören neben den Funktionseinheiten bei heutigen Prozessoren auch die Caches – Zwischenspeicher, weil bezahlbares DRAM schon seit 30 Jahren zu langsam für Prozessoren sind, Register aber auch die gesamte Verbindung zur Außenwelt.

Mehrere Kerne verlagern die Logik, wie man die Beschleunigung von Programmen verbessern kann, vom Prozessor auf das Betriebssystem. Es ordnet jedem Kern einen Prozess zu. Selbst wenn nur ein Benutzer am Computer sitzt, können das viele Prozesse für Systemaufgaben sein. Bei Großrechnern, die aber meist viele Benutzer bedienen, zogen Mehrkernprozessoren viel früher ein, da man so praktisch jedem Kern einen oder mehrere Benutzer zuweisen konnte. Auch ein einzelnes Programm kann so beschleunigt werden, weil oft in einer Schleife immer die gleiche Operation auf unterschiedlichen Daten durchgeführt wird, dann kann man jeden Schleifendurchlauf einem anderen Kern zuweisen. Auch dies verlagert die Logik auf eine höhere Ebene, diesmal auf die Entwicklungsumgebung welche das Programm in einer höheren Sprache wie C in den Maschinencode überträgt. Der Nachteil: erfolgt das nicht, dann wird nur ein Kern benutzt.

Ein Zwischending ist SMT – Symmetrical Multithreading. Bei Intel auch als Hyperthreading bezeichnet. Das ist im Prinzip ein Prozessor, der dem Betriebssystem mehr Kerne meldet als er tatsächlich hat, z.B. acht anstatt vier. Intern nutzt er in den vier Kernen unbenutzte Einheiten, um damit die Befehle der nicht existierenden vier Kerne abzuarbeiten. Das ist also eine interne Optimierung der Auslastung. Der Nachteil: gegenüber einem echten Kern beträgt der Gewinn an Geschwindigkeit nur 25 %. Beim obigen Beispiel wäre der Prozessor also so schnell ein Prozessor mit fünf Kernen.

Immer mehr Kerne

Als Intel 2005 den ersten Mehrkernprozessor einführte, versprach die Firma das sich jede Generation, also alle zwei Jahre, die Kernanzahl verdoppeln würde, man heute also 256 Kerne haben müsste. Dem ist nicht so. Xenons, Prozessoren für Server sind mit bis zu 28 Kernen zu haben. Beim Desktop stieg die Kernanzahl sogar nur langsam und lag bis vor drei Jahren bei maximal sechs. Durch AMD und seine Ryzen-Architekltur ist da etwas Bewegung gekommen.

Das grundlegende Problem bei mehr Kernen ist das jeder Kern natürlich seine eigenen Signalleitungen hat. Es gibt pro Kern mindestens 64 Daten- und 44 Adressleitungen, dazu etliche Leitungen mit Spannungen und für Signale oder Handshhakes. Aktuell haben die gängigen Fassungen über 1.000 Anschlusspins. Das ist nicht einfach steigerbar. So ruderte Intel auch beim Xenon Phi zurück, der mal 256 Kerne haben sollte, als er mit mehrjähriger Verzögerung herauskam, waren es schließlich 50. Die Serverprozessoren haben mehr Kerne, weil auch der Chipsatz mehr Speicherriegel zulässt, acht oder 16 pro Board. Bei der iCore Serie ist bei maximal vier Speicherslots Schluss und der Speicher muss die Daten auch liefern. 28 Prozessoren benötigen eben siebenmal mehr Daten pro Zeit als vier und entsprechend mehr Speicherkanäle, jeden mit seinem eigenen Bus der dann weitere Anschlusspins benötigt.

Grafikkarten zeigen wie eine mögliche Lösung aussehen könnte. In der Architektur unterscheiden sie sich leicht von den CPU. Sie haben nicht mehr Kerne, dafür sehr viele, bis über Tausend Funktionseinheiten, die meist jedoch viel einfacher aufgebaut sind als die von Prozessoren. Sie sind auf eine massiv parallele Abarbeitung von immer gleichen Daten getrimmt, nicht auf die universelle Ausführung beliebiger Programme. Die Daten holen sie daher über sehr breite Busse (bis zu 512 Bit pro Zugriff anstatt 64) und damit dies schnell geht, ist das RAM direkt angebunden, fest auf die Karte verlötet, wie dies bis 1990 auch bei den PC der Fall war.

Vielleicht geht der Trend auch wieder zurück zu diesem Fall, dass man eben ein Mainboard mit mehreren festen RAM-Ausbaustufen anbietet, dafür es aber einen viel breiteren Bus zum Prozessor gibt, der ebenfalls dann fest verlötet auf dem Board ist, was die Zwischenstation über die Pins die man aus mechanischen Gründen nicht beliebig verkleinern kann, umgeht.

31.7.2020: Die Lösung für ein überflüssiges Problem: Die ISS mit dem Space Shuttle

Die große Tragik im Space Shuttle Programm war meiner Ansicht nach, das es ursprünglich gebaut wurde, um eine Raumstation zu versorgen und aufzubauen und gerade als diese fertig wurde es außer Dienst gestellt wurde. In allen anderen Rollen, die es vorher innehatte, war es entweder ein teurer Ersatz für eine Rakete oder erlaubte nur kurze bemannte Missionen. Zuggegeben – das Shuttle, das als Space Station Versorger geplant war, war auch eine Nummer kleiner mit nur 12 t Nutzlastmasse, was aber heute gemessen an den unbemannten Versorgern immer noch viel wäre.

Ich will heute mal skizzieren, wie eine ISS aussehen könnte, die das Space Shuttle versorgt und auch mal einen Preisvergleich anstellen.

Das Wichtigste zuerst: die heutige Situation auf der ISS ist nicht die die geplant war. Die ISS war bis 2005 auf eine Stammbesatzung von 7 Astronauten (davon 4 im westlichen Segment) ausgelegt, die sich alle 90 Tage abwechseln. Erst die Außerdienststellung des Space Shuttles reduzierte die Besatzung auf sechs, weil mehr nicht mit zwei Sojus Kapseln fliegen können. Ebenso wurde die Aufenthaltsdauer verdoppelt, weil Russland nicht acht Sojus, die man sonst benötigt hätte pro Jahr fertigen kann.

So blieben dann auch zwei Module, davon ein Wohnmodul komplett am Boden. Inzwischen gibt es aber zwei neue Module. Das BEAM, ein aufblasbares Modul von Bigelow und das PMM ein umgebautes MPLM des Space Shuttles. Beide werden derzeit aber nur genutzt, um Dinge zu verstauen.

Mannschaften

Würde das Space Shuttle noch fliegen, so könnte jeder Start 7 Astronauten transportieren. Wenn der Pilot und Copilot nur für das Space Shuttle zuständig sind und wieder mit der alten Mannschaft zurückkehren, könnte es also 5 Personen zur ISS bringen, dazu kämen drei Kosmosnauten die Russland mit der Sojus startet. Das wäre eine Stammbesatzung von 8, würden auch die beiden Piloten an Bord der ISS bleiben, dann sind es 10. Den Platz für sie gäbe es, wenn man das PMM als Wohnmodul nutzt und jedes der schon existierenden Labore hat genug Platz und Experimente für zwei bis drei Personen, an Arbeit fehlt es bei drei Laboren also auch nicht. Wenn nicht kann Russland ja (mit inzwischen 14 Jahren Verzögerung) mal Nauka starten und natürlich könnte das Space Shuttle auch die zwei Module die mal geplant waren noch starten. Die Arbeit an ihnen wurde allerdings schon im Rohbau beendet.

Die Personenzahl ist von Bedeutung, weil die ISS relativ viel Arbeit nur für "Housekeeping" also Aufrechtherhalten des Zustandes benötigt. Früher war dies noch schlimmer, doch auch heute geht dafür viel Zeit drauf. Bedingt durch den Ausfall einer Sojus im letzten Jahr kann man das gut beziffern: Während Expedition 57/58 fehlten zwischen dem 11.10 und 3.12. drei Astronauten, da es einen Fehlstart der Sojus gab. Nominell sollten es 1080 Manntage sein, nun waren es 159 Tage weniger. Das sind 15 % weniger Arbeitszeit. Bedingt durch die fehlenden Arbeitskräfte, aber auch die Situation, die sicher Mehrarbeit verursachte wurden, bei Expedition 57/58 nur 1144 Arbeitsstunden abgeleistet, bei der folgenden dagegen 2857 – also fast das zweieinhalbfache. Dieses Missverhältnis erklärt sich daraus, das die ISS mindestens drei Personen braucht, damit sie überhaupt reibungslos läuft. In den über 50 Tagen mit drei Astronauten fiel die Forschung daher ganz aus. Die 2857 Stunden entsprechen, wenn man 6 Arbeitstage pro Woche ansetzt, auch nur 3 Stunden Nettoarbeitszeit pro Astronaut, das heißt, wenn man 12 Stunden pro Tag als nutzbare Zeit ansetzt, dann gehen ¾ dieser Zeit für andere Tätigkeiten drauf, dazugehört auch Sport. Die Verlängerung der Aufenthaltsdauer von 90 auf 180 Tage bedeutet auch das die Astronauten mehr trainieren müssen, um ihre Gesundheit nicht zu sehr zu gefährden. Es sind 2 Stunden pro Tag. Wenn man dies nur auf die Hälfte reduzieren kann, weil man auch schon nach 90 Tagen zurückkehrt, gewinnt man schon ein Drittel der Arbeitszeit.

Würde man mit dem Space Shuttle die Astronautenzahl von 6 auf 8 erhöhen so sähe dann eine Rechnung so aus:

Bezogen auf die heutigen 180 Tagesmissionen, abzüglich 4 Tagen für den Transfer und je einen freien Tag pro Woche entspricht das 3318 Stunden mehr, also eine Verdopplung der Zeit, die für Forschung zur Verfügung steht (die Qualität dieser Forschung ist wiederum ein anderes Thema). Mit dem Space Shuttle, das ohne Problem vier Flüge pro Jahr durchführen kann, würde die Forschung also um mehr als 100 % zunehmen.

Fracht

Ein Vorteil des Space Shuttles war, das es anders als die heutigen Zubringer auch Personen und Fracht transportieren konnte. Brutto maximal 18,2 t, doch davon gehen zahlreiche Dinge ab. So der Kopplungsadapter, wenn es Fracht in einem Druckmodul ist, die Leermasse eine MPLM und bei Fracht ohne Druckausgleich ist es das Gewicht der Paletten. Wenn ich nur den schlechtesten Fall nehme, ein MPLM ohne Paletten so sind es 9,1 t pro Flug pro Jahr mithin 38,4 t. Im Jahre 2019 flogen folgende Transporter die ISS an:

Das sind zusammen 27.377 kg Fracht für sechs Personen und ein Jahr Betrieb. Bei acht Personen sind es dann ein Viertel mehr also 36,5 t. Das liegt in dem Transportvermögen des Space Shuttles.

Kosten

Allgemein wird das Space Shuttle ja als teuer angesehn. Doch ist dem wirklich so? Auch das kann man nachrechnen. Die NASA zahlt 90 Millionen Dollar für jeden der vier Sitze an Bord eines Starliners und 55 Millionen für eine Crew Dragon, dass führt zu 360 bzw. 220 Millionen Dollar pro Flug. Wie das Space Shuttle könnten beide Vehikel auch mehr als die geplanten vier Astronauten befördern und das wahrscheinlich ohne signifikante Mehrkosten. Nur benötigt man für eine 90 Tage Crewrotation vier Starts pro Jahr, je zwei von SpaceX und Boeing, die addieren sich so zu 1.160 Millionen Dollar. Die NASA rechnet mit Frachtkosten von 71.800 Dollar/kg im Durchschnitt bei CRS-2. Das sind bei 36,5 t Fracht weitere 2.621 Millionen Dollar, zusammen also 3.871 Millionen Dollar.

Nimmt man dagegen die Kosten des Space Shuttles Programms von 2007 bis 2010 (danach lief das Programm aus, vorher gab es hohe Aufwendungen für die Umrüstung, Kündigungsverträge ohne Flüge), so gab es in der Zeit 17 Flüge und Aufwendungen in Höhe von 12.722 Millionen Dollar, also 741 Millionen Dollar pro Flug, bei vier pro benötigten Space-Shuttle-Starts pro Jahr mithin 2.964 Millionen Dollar im Jahr. Das Space Shuttle wäre also billiger als eine adäquate Lösung mit Kapseln, und zwar um rund 900 Millionen Dollar. Bei noch mehr Flügen würde das noch günstiger werden, weil das Space Shuttle Programm einen hohen Fixkostenanteil hat, der bei etwa 9.600 Millionen Dollar für die vier Jahre liegt. Und dabei ist dies noch pessimistisch gerechnet, mit einer Palette zum MPLM käme man auf weitere 1,5 bis 2 t Fracht ohne Druckausgleich, wenn man die Nutzlastkapazität voll ausnutzen würde. Und wie schon gesagt könnte man auch die Besatzung auf 10 Personen erhöhen, wenn die beiden Piloten auch an Bord der ISS bleiben – beim Space Shuttle würde eine Dauerbesatzung von 10 Personen fast keine Mehrkosten verursachen, bei unbemannten Vehikeln dagegen weitere 656 Millionen Dollar für die benötigte Fracht mehr (aber keine für den Crewtransport).

Vielleicht versteht ihr nun, warum ich von einer Tragik spreche.

Sitemap Kontakt Neues Impressum / Datenschutz Hier werben / Your advertisment here Buchshop Bücher vom Autor Top 99