{"id":15892,"date":"2022-04-28T18:49:59","date_gmt":"2022-04-28T16:49:59","guid":{"rendered":"https:\/\/www.bernd-leitenberger.de\/blog\/?p=15892"},"modified":"2022-04-28T18:49:59","modified_gmt":"2022-04-28T16:49:59","slug":"die-zahl-fuer-heute-2312","status":"publish","type":"post","link":"https:\/\/www.bernd-leitenberger.de\/blog\/2022\/04\/28\/die-zahl-fuer-heute-2312\/","title":{"rendered":"Die Zahl f&uuml;r heute: 23,12"},"content":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_15892\" class=\"pvc_stats all  \" data-element-id=\"15892\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.bernd-leitenberger.de\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p>In dem heutigen Blog geht es erneut um die CPU-Entwicklung und ich will mal die einzelnen Faktoren auseinander dividieren, um dann auf die omin&ouml;se Zahl 23,12 zu kommen und zuletzt mal begr&uuml;nden, warum ich den 32-Bit-Mikroprozessor f&uuml;r das Optimum halte.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vg07.met.vgwort.de\/na\/b1b6268c375f49d6a117234a1fec70e9\" width=\"1\" height=\"1\" alt=\"\"\/><br \/>\nFangen wir mal mit dem Nettoergebnis an. Um wie viel ist die Geschwindigkeit eines Computers seit meinem ersten gestiegen? Nun wenn man es genau nimmt, vom ersten (Ti 99\/4a) gibt es kein Benchmark, das heute noch laufen w&uuml;rde, aber es gibt vom Z80 Prozessor der in meinem zweiten Rechner steckte ein Ergebnis des Dhrystone Benchmarks. Der erreichte bei<a href=\"https:\/\/hackaday.io\/project\/27433-16-bit-modern-homebrew-cpu\/log\/67703-dhrystone-scores-are-in\"> 2,5 MHz 91 Dhrystones<\/a>, skaliert man das auf 4 MHz so sind es 145, in einem Emulator erreichte ein 3,47 MHz Z80 142 Dhrystones. Normiert wird der Benchmark auf die VAX 11\/780 die je nach Literatur bei 1560 bis 1757 liegt. G&auml;ngig werden 1757 Dhrystones als 1 Dhyrstone-MIPS zu definiert.<br \/>\n<!--more--><\/p>\n<p>Das Problem ist nat&uuml;rlich auch das es den Dhrytsone Benchmark nicht gibt. Ich habe eine alte und eine moderne Version mit dem Cbuilder kompiliert und schon hier gibt es werte von 6332 und 9570 VAX-MIPS pro Kern und ein besserer Compiler erreicht dann wiederum mehr VAX-MIPS. Das ist aber die Problematik jedes <a href=\"https:\/\/www.bernd-leitenberger.de\/blog\/2018\/02\/13\/die-ipc-werte-in-der-intel-welt-bestimmt-mit-dhrystone\/\">Benchmarks<\/a>.<\/p>\n<p>Mein derzeitiger Prozessor (Core i5-4690) erreicht mit allen vier Kernen &uuml;ber 119.000 Dhrystone MIPS. Er ist also fast 1,5 Millionen mal schneller als mein Z80A Rechner. Nun ist mein heutiger Rechner fast acht Jahre alt, wer will kann bei Sisoft das Systeminformationsprogramm Sandra lite <a href=\"https:\/\/www.sisoftware.co.uk\/download-buy\/\">herunterladen<\/a> welche die Dhrystones berechnet. Warnung: Das dauert einige Minuten, w&auml;hrend denen der PC praktisch unbenutzbar ist.<\/p>\n<h3 class=\"western\">Nun wie kommt die Mehrleistung zustande?<\/h3>\n<p>Also zuerst mal hat die heutige CPU vier Kerne ein <a href=\"https:\/\/www.bernd-leitenberger.de\/z80.shtml\">Z80A<\/a> nat&uuml;rlich nur einen. Das reduziert dann schon den Vorteil um den Faktor vier auf rund 368.000-fach.<\/p>\n<p>Der zweite offensichtliche Punkt ist die Taktfrequenz. Die CPU-Kerne der heutigen CPU takten mit 3,5 GHz, der Z80 damals mit 4 MHz wobei er netto sogar nur mit 3,2 MHz lief (Wartezyklen durch gleichzeitigen Zugriff auf den Bildschirmspeicher durch das Gate Array). Der Takt ist also um den Faktor 875 kleiner. Nun schrumpft der Vorteil schon auf den Faktor 420 zusammen. Das gilt allerdings nur, wenn der Zusammenhang Taktsteigerung \u2013 Geschwindigkeitssteigerung linear ist. F&uuml;r den Dhrytone Benchmark der relativ klein ist \u2013 er muss ja auch von einer Z80 ausgef&uuml;hrt werden k&ouml;nnen, gilt das. Die Problematik das mehr Takt nicht immer viel mehr Geschwindigkeit bringt, ist aber seit Anfang der Achtziger gegeben. Seitdem ist der Zugriff von Prozessoren immer schneller angestiegen als Speicher Daten liefern k&ouml;nnen. Schon die Z80 hatte als Abhilfe den Mechanismus des Waitstates, eines Wartetakts. Konnte der Speicher die Daten nicht liefern, so wartete die CPU einen Takt, das war immer noch g&uuml;nstiger als einen kompletten Zyklus (4 Takte) lang zu warten. Wartezyklen schlugen erst richtig bei der <a href=\"https:\/\/www.bernd-leitenberger.de\/80286.shtml\">80286 Generation<\/a> zu. Der <a href=\"https:\/\/www.bernd-leitenberger.de\/ibm-pc-at.shtml\">IBM PC\/AT<\/a> kostete zwar &uuml;ber 15.000 DM, aber die 8 MHz Version hatte schon einen Wartetakt, weil IBM beim Speicher etwas Geld sparte und nicht die schnellsten Chips verbaute. Konkurrenten lieferten Rechner ohne \u201eWaitstate\u201c und warben damit. Mit dem <a href=\"https:\/\/www.bernd-leitenberger.de\/80386.shtml\">80386 Prozessor<\/a> wurde das Problem noch gr&ouml;&szlig;er, der war noch h&ouml;her getaktet und es zog der Cache ein, Der besteht aus schnellem SRAM, derselben Technologie wie die Register im Prozessor. Allerdings muss ein <a href=\"https:\/\/www.bernd-leitenberger.de\/cache.shtml\">Cache<\/a> auch verwaltet werden, das addiert Zeitverluste und befindet sich Daten nicht im Cache, so muss auf den langsamen Arbeitsspeicher zugegriffen werden. Dies zeigt sich, wenn man Datenstrukturen immer gr&ouml;&szlig;er w&auml;hlt wie in <a href=\"https:\/\/www.anandtech.com\/show\/17047\/the-intel-12th-gen-core-i912900k-review-hybrid-performance-brings-hybrid-complexity\/6\">diesem Test<\/a>: Die Latenz ist in L1-Cache vernachl&auml;ssigbar. Sie steigt im L2-Cache auf rund 3 ns \u2013 klingt nach wenig, sind aber bei 4 GHz Takt schon 12 Takte, beim L3-Cache sind es 14 ns \u2013 56 Takte (Intel Angabe: 53) und beim Hauptspeicher sind es &uuml;ber 90 ns. Bei dem kleinen Dhrystone Benchmark kann man davon ausgehen, dass er komplett im Cache ist, daher auch hier eine starke Beschleunigung, die aber bei anderen Programmen durchaus nicht so sein muss.<\/p>\n<p>Der zweite gro&szlig;e Punkt f&uuml;r eine Geschwindigkeitssteigerung ist die Vergr&ouml;&szlig;erung der Bits die ein Prozessor auf einmal verarbeitet. Der heutige Prozessor ist ein 64 Bit Prozessor, der Z80 war ein 8 Bit Prozessor. Der Nutzen ist offensichtlich bei Berechnungen. Eine Berechnung mit 64 Bit kann der 64-Bit Prozessor in einem Rutsch durchf&uuml;hren, ein 8 Bitter braucht dazu acht Berechnungen die auch mit acht Lade- und Speicheranweisungen gekoppelt sind. Beim Dhrystone Benchmark der mit 32 Bit Zahlen arbeitet sind 8 und 16 Bit Prozessoren performen daher auch relativ schlecht, verglichen mit einem 32 oder gar 64 Bit Prozessor. Doch nicht &uuml;berall ist der Vorteil sofort offensichtlich. Bei Spr&uuml;ngen scheint der Vorteil von immer mehr Bits nicht gegeben zu sein. Ebenso bei Textoperationen, die fr&uuml;her immer mit 8 Bit erfolgten, heute mit Unicode mit 16 Bit, weil bei der Sprache C man jedes Zeichen einzeln pr&uuml;fen muss ob es nicht das Nullzeichen ist, damit wurde das Stringende markiert. Aber \u2013 da ein 64 Bit Prozessor auch 64 Bit auf einmal l&auml;dt, kann er bei einem Sprung die Adresse in zwei Zugriffen laden, ein 8 Bitter braucht daf&uuml;r mindestens drei Zugriffe da eine Adresse 16 Bit breit ist (plus ein Zugriff f&uuml;r den Opcode). &Auml;ndert sich an den Anforderungen nichts, so ist der Geschwindigkeitsgewinn nicht so hoch. Ich habe ja mal das <a href=\"https:\/\/www.bernd-leitenberger.de\/blog\/2019\/12\/24\/benchmark-my-computer\/\">Benchmark der ct\u2018 10\/1987<\/a> erw&auml;hnt das ich dank der langen Lebenszeit von DOS bis hin zu einem Athlon mit 550 MHz testen konnte. Das skalierte relativ linear hoch. Denn DOS nutzte eben von dem 32 Bit Befehlen nichts.<\/p>\n<p>Aber mit jeder Generation kommen neue Befehle dazu. Der Z80 konnte 16 Bit Arithmetik nur eingeschr&auml;nkt durchf&uuml;hren (Addition, Subtraktion, Inkremente, Dekremente), 8 Bit Arithmetik hatte mehr M&ouml;glichkeiten, aber konnte auch nicht multiplizieren und dividieren. Das konnten die 16 Bit CPUs. Mit jeder Generation kamen Befehle hinzu, selbst bei RISC-Prozessoren. Solche Befehle k&ouml;nnen bestimmte Operationen enorm beschleunigen. Mein Paradebeispiel ist der Z80 Befehl LDIR \/ LDDR. Dieser Befehl kopiert einen Speicherblock dessen Adresse im Register HL steht in die Adressen ab Register DE, die L&auml;nge wird in Register BC angegeben. Ein Z80 Code daf&uuml;r w&uuml;rde so aussehen:<\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">hl<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,startadresse <\/span><\/span><span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; Lade Quelladresse in Register HL<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">de<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,zieladresse <\/span><\/span><span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; Lade Zieladresse in Register DE<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">bc<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,laenge <\/span><\/span><span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; Lade Blockl&auml;nge in Register BC<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ldir<\/b><\/span><\/span><\/span><\/p>\n<p>W&uuml;rde man denselben Code, ohne den LDIR Befehl schreiben, so w&auml;re eine ganze Sequenz n&ouml;tig:<\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">hl<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,startadresse<\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">de<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,zieladresse<\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">bc<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,laenge<\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">loop: <\/span><\/span><span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">a<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,(<\/span><\/span><span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">hl<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">) <\/span><\/span><span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; lade Wert aus Adresse HL ins Register A<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>ld<\/b><\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"> (<\/span><\/span><span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">de<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">),<\/span><\/span><span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">a<\/span><\/span> <span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; lade Wert aus Register A in den Speicher der durch DE adressiert wird<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>inc<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">hl<\/span><\/span> <span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; erh&ouml;he Quelladresse<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>inc<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">de<\/span><\/span> <span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; erh&ouml;he Zieladresse<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>dec<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">bc<\/span><\/span> <span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; erniedrige Z&auml;hler<\/i><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: small;\"> <span style=\"color: #ff0000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><b>jp<\/b><\/span><\/span> <span style=\"color: #008080;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">nz<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\">,loop <\/span><\/span><span style=\"color: #008000;\"><span style=\"font-family: DejaVu Sans Mono, monospace;\"><i>; Springe wenn Z&auml;hler nicht Null ist an den Schleifenanfang (loop)<\/i><\/span><\/span><\/span><\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<thead>\n<tr valign=\"top\">\n<th width=\"33%\"><\/th>\n<th width=\"33%\">LDIR<\/th>\n<th width=\"33%\">Code<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr valign=\"top\">\n<td width=\"33%\">L&auml;nge<\/td>\n<td width=\"33%\">2 Bytes<\/td>\n<td width=\"33%\">8 Bytes<\/td>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"33%\">Ausf&uuml;hrungszeit pro Byte<\/td>\n<td width=\"33%\">21 Takte<\/td>\n<td width=\"33%\">42 Takte<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Es wird \u00be des Codes eingespart. Relevanter ist die Beschleunigung der Ausf&uuml;hrung. Bei der Z80 werden f&uuml;r f&uuml;nf Befehle die Fetches aus dem Arbeitsspeicher und das Dekodieren eingespart. Da der Sprungbefehl noch einen weiteren Fetch erfordert und jeder Fetch\/Decode mindestens 3 Takte erfordert, halbiert sich die Ausf&uuml;hrungsdauer.<\/p>\n<p>W&auml;re die Z80 CPU f&auml;hig, mehrere Instruktionen gleichzeitig auszuf&uuml;hren, wie heute &uuml;blich, dann w&auml;re beim LDIR Befehl intern viel parallelisierbar \u2013 das Erh&ouml;hen der Adressen w&auml;re direkt nach den Ladebefehlen m&ouml;glich. Im Prinzip w&auml;ren die drei Inkrement\/Dekrement Befehle parallel ausf&uuml;hrbar. Die Parallelit&auml;t kann in komplexen Befehlen aber schon intern in dem Microcode genutzt werden, dagegen ben&ouml;tigt man f&uuml;r die obige Schleife eine aufwendige Logik die Abh&auml;ngigkeiten erkennt. Heutige Prozessoren haben Spezialbefehle f&uuml;r Verschl&uuml;sselung und Entschl&uuml;sselung die eine noch viel h&ouml;here Beschleunigung erm&ouml;glichen. &Auml;hnliches findet man bei Vektoroperationen: AVX kann in der neuesten Version AVX512 acht Zahlen in der gleichen Zeit bearbeiten wie mit den normalen Flie&szlig;kommaoperationen.<\/p>\n<p>Die n&auml;chste Stufe ist die interne Optimierung, dies kann man nicht an Befehlen festmachen, sondern an ihren Ausf&uuml;hrungszeiten. Und hier komme ich zu der omin&ouml;sen Zahl 23,12. Sie gibt an, um wie viel schneller ein Befehl intern ausgef&uuml;hrt wird \u2013 jetzt unabh&auml;ngig von der Art und Leistungsf&auml;higkeit des Befehls. Beim Z80 brauchte ein Befehl im Instruktionsmix 6,8 Takte. Die schnellsten Befehle brauchten 4 Takte, die langsamsten 23. Durch eine Pipeline kann man die Ausf&uuml;hrungszeit auf minimal 1 Takt pro Befehl dr&uuml;cken, das wurde beim Z80 auch gemacht. Der eZ80 hat eine solche Pipeline und ist dreimal schneller als ein Z80 bei gleichem Takt (also 2,2 Takte im Mix). Mehr geht nur durch interne <a href=\"https:\/\/www.bernd-leitenberger.de\/paralelles-rechnen.shtml\">Parallelit&auml;t<\/a>, sprich man f&uuml;hrt mehrere Befehle parallel aus, wie ich dies schon beim obigen Codest&uuml;ck angedeutet habe. Der eZ80 reduziert so die Ausf&uuml;hrungszeit des LDIR Befehls auf 8 Takte, nutzt man einen neuen Modus in dem er 16 Bit auf einmal kopiert (anstatt byteweise) so sind es sogar nur 6 Takte.<\/p>\n<p>So kam ich auch auf die Zahl 23,12. Die Angabe bezieht sich auf die \u201eInstructions per Cycle\u201c IPC also Anweisungen pro Takt. Beim Z0 betrug dieser Wert 1\/6,8. &Auml;hnlich sah es bei8086 aus (1\/7,5), dann wurde es schrittweise besser: 80286: 1\/4,92, 80386: \u00bc, 80486 1\/1,95 und der Pentium erreichte als erster Prozessor die magische Zahl 1.<\/p>\n<p>Die modernsten Prozessoren der x86 Architektur (Alder Lake \u2013 Core 12.te Generation und Zen 3) erreichen einen IPC von 3,4, daraus ergibt sich eine Beschleunigung des internen Ablaufs in knapp 40 Jahren um den Faktor 23,12. Alles was oberhalb von 1 liegt, ist nur durch interne Parallelit&auml;t und das Vorziehen von Befehlen m&ouml;glich. Das ging los im Pentium.<\/p>\n<h3 class=\"western\">Der 32 Bit Prozessor als Optimum<\/h3>\n<p>Zuletzt noch einen Blick, warum ich einen 32 Bit Prozessor f&uuml;r das ideale handele. Die Angabe \u201en Bit\u201c legt fest, wie gro&szlig; die internen Register sind. Damit wird auch festgelegt, wie viele Bits maximal in einer Operation verarbeitet werden k&ouml;nnen und wie gro&szlig; der Adressbereich ist. Bei Intel stieg die Bitbreite schnell von 4 Bit (1971) &uuml;ber 8 Bit (1973) zu 16 Bit (1978) und 32 Bit (1985). Doch dann dauerte es 20 Jahre bis die Architektur auf 64 Bit erweitert wurde. Der Grund war, das vorher der Adressbereich immer um 4 Bits anstieg, was in zwei Chipgenerationen, damals etwa sechs bis sieben Jahren aufgeholt war:<\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<thead>\n<tr valign=\"top\">\n<th width=\"20%\">Prozessor<\/th>\n<th width=\"20%\">Jahr<\/th>\n<th width=\"20%\">BitBreite<\/th>\n<th width=\"20%\">Adressbits<\/th>\n<th width=\"20%\">Standard Speicherchipgr&ouml;&szlig;e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr valign=\"top\">\n<td width=\"20%\">4004<\/td>\n<td width=\"20%\">1971<\/td>\n<td width=\"20%\">4<\/td>\n<td width=\"20%\">12<\/td>\n<td width=\"20%\">1 KBit<\/td>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"20%\">8008<\/td>\n<td width=\"20%\">1972<\/td>\n<td width=\"20%\">8<\/td>\n<td width=\"20%\">14<\/td>\n<td width=\"20%\">1 kbit<\/td>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"20%\">8080<\/td>\n<td width=\"20%\">1974<\/td>\n<td width=\"20%\">8<\/td>\n<td width=\"20%\">16<\/td>\n<td width=\"20%\">4 kbit<\/td>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"20%\">8086<\/td>\n<td width=\"20%\">1978<\/td>\n<td width=\"20%\">16<\/td>\n<td width=\"20%\">20<\/td>\n<td width=\"20%\">64 Kbit<\/td>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"20%\">80286<\/td>\n<td width=\"20%\">1982<\/td>\n<td width=\"20%\">16<\/td>\n<td width=\"20%\">24<\/td>\n<td width=\"20%\">256 kbit<\/td>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"20%\">80386<\/td>\n<td width=\"20%\">1985<\/td>\n<td width=\"20%\">32<\/td>\n<td width=\"20%\">32<\/td>\n<td width=\"20%\">256 kbit<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"justify\">Man brauchte bei Vorstellung der Prozessoren bis zum 80286 immer 128 Chips der aktuellen Generation f&uuml;r den Speichervollausbau Das war viel und angesichts der Preise auch teuer. Beim 80286 stieg dies auf 512 Chips, aber drei Jahre sp&auml;ter steigerte der 80286 dies um den Faktor 256, was vier Chipgenerationen entsprach. Erst 2004 war so viel RAM auch bezahlbar und Intel sah die Notwendigkeit, die Bitbreite zu erweitern um mehr RAM zu adressieren. 64 Bit nutzt f&uuml;r die Adressierung &uuml;brigens kein Prozessor, es sind zwischen 40 und 48 Bit. 2<sup>64<\/sup> Speicherzellen belegen selbst wenn man pro Siliziumatom (Durchmesser 210 pm) ein Elektron speichern k&ouml;nnte, und es keine Isolation zwischen ihnen geben w&uuml;rde, knapp einen Quadratmeter Siliziumfl&auml;che. Der durch eine gr&ouml;&szlig;ere Breite der Reigster verf&uuml;gbare Adressraum d&uuml;rfte die Hauptantriebsfeder f&uuml;r die Erweiterung der internen Architektur gewesen sein.<\/p>\n<p align=\"justify\">Der zweite Grund ist nat&uuml;rlich, dass ein Prozessor maximal so gro&szlig;e Zahlen in einem St&uuml;ck bearbeiten kann wie seine Bitbreite betr&auml;gt. Dabei reden wir von Ganzzahlen. Flie&szlig;kommazahlen mussten fr&uuml;here Prozessoren per Software verarbeiten bzw. es gab spezialisierte Coprozessoren die dann aber auch Zahlen verarbeiteten die erheblich gr&ouml;&szlig;er als die Adressbreite des Prozessors war, so z.B. mit dem 8087 Coprozessor bis zu 80 Bit Flie&szlig;kommazahlen bei einem 16 Bit 8086 Hauptprozessor.<\/p>\n<p align=\"justify\">Ganzzahlen braucht man entweder als Indexe f&uuml;r Schleifen oder Arrays, daneben Koordinaten (z.B. auf dem Bildschirm) oder weil der Datentyp, der verarbeitet wird, eine Ganzzahl ist. Das kann auch ein Zeichen sein, das intern auch nur eine Zahl ist. Es ist logisch, das man je gr&ouml;&szlig;er der Wertebereich ist, man mit mehr Bits immer mehr Anwendungen abdeckt. Mit einem Byte kommt man als Index f&uuml;r ein Feld oder als Koordinate f&uuml;r den Bildschirm nicht weit. Mit 16 Bit kann man schon viele Anwendungen mehr abdecken und mit 32 Bit kann man wirklich Arrays indizieren, die gr&ouml;&szlig;er als der adressierbare Arbeitsspeicher sind. Der Zugewinn wird also immer kleiner. F&uuml;r 64 Bit sprechen nur zwei Aspekte. Das eine ist, das nun Flie&szlig;kommazahlen und Ganzzahlen gleich gro&szlig; sind , zumindest beim standardisierten Flie&szlig;kommatyp \u201elong double\u201c, der meist eingesetzt wird. Das vereinfacht die Befehlsstruktur des Prozessors und den Fetch. Der zweite Vorteil ist ,dass man mit so langen Ganzzahlen auch viele Flie&szlig;kommarechnungen erschlagen kann indem man eine Festpunktdarstellung einsetzt. F&uuml;r W&auml;hrungen gibt es z.B. einen 64 Bit Ganzzahl-Typ mit 15 Vor- und 4 Nachkommastellen.<\/p>\n<p align=\"justify\">Ansonsten hat aber jede Erweiterung der Bitgr&ouml;&szlig;e Nachteile. Ein Befehl besteht aus mehreren Teilen. Zum einen einem Bereich der den Befehlstyp angibt, dann folgen Parameter, die dazu geh&ouml;ren. Bei Rechnungen z.B. die Register die beteiligt sind und sp&auml;testens, wenn Daten aus dem Speicher geholt und geschrieben werden m&uuml;ssen, oder es Spr&uuml;nge gibt folgen dann Adressen. Der Code wird so bei l&auml;ngeren Adressen automatisch l&auml;nger wenn die Bitbreite ansteigt. Bei der Intel Architektur ist 64 Bit Code rund doppelt so gro&szlig; wie 32 Bit Code, aber nicht schneller. Deshalb r&auml;t selbst Microsoft zu der 32 Bit Version von Office.<\/p>\n<p align=\"justify\">Bei einem 32 Bit Prozessor ergibt sich eine sehr elegante L&ouml;sung f&uuml;r Befehlsformate, man kommt n&auml;mlich mit zwei aus, die dann sogar noch auf geraden 32 Bit Grenzen liegen, dazu sp&auml;ter noch etwas. Das w&auml;re das erste Format wenn der Befehl keine Adresse beinhaltet<\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<thead>\n<tr valign=\"top\">\n<th width=\"17%\">Opcode<\/th>\n<th width=\"17%\">Register1\/Parameter<\/th>\n<th width=\"17%\">Register 2<\/th>\n<th width=\"50%\">Register 3<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr valign=\"top\">\n<td width=\"17%\">\n<p align=\"justify\">8 Bit<\/p>\n<\/td>\n<td width=\"17%\">\n<p align=\"justify\">8 Bit<\/p>\n<\/td>\n<td width=\"17%\">\n<p align=\"justify\">8 Bit<\/p>\n<\/td>\n<td width=\"50%\">\n<p align=\"justify\">8 Bit<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"justify\">Ein Opcode von 8 Bit l&auml;sst 256 grundlegende Befehle (ohne Varianten) zu. F&uuml;r mathematische Operationen im <a href=\"https:\/\/www.bernd-leitenberger.de\/adressierung.shtml\">3-Adressschema<\/a> stehen dann je 8 Bit f&uuml;r 256 Register zur Verf&uuml;gung (wenn man noch Teilbereichsoperationen wie 8 oder 16 Bit unterst&uuml;tzen will, kann man hier in jedem Feld 1 Bit opfern und so 8 weitere Unterscheidungsm&ouml;glichkeiten haben bei 128 Registern.<\/p>\n<p align=\"justify\">Es gibt auch befehle mit weniger Parametern wie keinem (NOP \u2013 No Operation) oder EI (Enable Interrupts) oder einem Parameter (bedingte Spr&uuml;nge, Push\/Pop, Incement\/decrement \u2026) dann sind hier Felder leer.<\/p>\n<p align=\"justify\">Das zweite Format dient dazu Adressen\/Zahlen in die Register zu laden\/speichern:<\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">\n<thead>\n<tr valign=\"top\">\n<th width=\"17%\">Opcode<\/th>\n<th width=\"17%\">Register1\/Parameter<\/th>\n<th width=\"67%\">Zahl<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr valign=\"top\">\n<td width=\"17%\">\n<p align=\"justify\">8 Bit<\/p>\n<\/td>\n<td width=\"17%\">\n<p align=\"justify\">8 Bit<\/p>\n<\/td>\n<td width=\"67%\">\n<p align=\"justify\">48 Bit<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"justify\">Das ist dann genau 64 Bit lang, also so lang wie zwei 32 Bit B&uuml;ndel. Wie man sieht hat man sogar 48 Bit zur Verf&uuml;gung. Bei Nicht-Adressen w&uuml;rde man davon nur 32 Bits ben&ouml;tigen. Die 48 Bits kann man &uuml;ber segmentierte Adressierung nutzen oder die Adressregister sind 48 Bit breit \u2013 solche Architekturen mit unterschiedlich breiten daten- und Adressregistern hatten fr&uuml;her zahlreiche Rechner z.B. alle Rechner von <a href=\"https:\/\/www.bernd-leitenberger.de\/cray.shtml\">Seymour Cray<\/a>. Aber auch ohne dieses Feature mit nur 32 Bit f&uuml;r Adressen\/Zahlen hat dieses Format am wenigsten \u201eVerschnitt\u201c (mit einem 16 Bit Format g&auml;be es au&szlig;er bei Befehlen ohne Parameter gar keinen Verschnitt, aber ein 32 Bit Rechner greift eben 32 Bit weise auf den Arbeitsspeicher zu. Es ist klar, dass der Verschnitt bei einem 64 Bit Zugriff gr&ouml;&szlig;er ist.<\/p>\n<p align=\"justify\">Nat&uuml;rlich sind auch unterschiedlich lange Befehlsformate denkbar, wie sie bei der <a href=\"https:\/\/www.bernd-leitenberger.de\/x86-artikel.shtml\">x86 Linie<\/a> historisch gewachsen sind. Aber sie haben deutliche Nachteile. Das Dekodieren ist aufwendiger, der Fetch ist nicht vorhersehbar und vor allem bestraft der Prozessor Zugriffe auf Adressen, die nicht auf ganzen Wortgrenzen liegen. Viele Prozessoren erlauben das gar nicht erst, die Systemprogrammiersprache BCPL sieht z.B. Pointer nur auf durch 4 teilbaren Adressen vor. Bei der x86 Architektur geht der Zugriff weil man dort noch 8 und 16 Bit Werte verarbeiten kann, ein Zugriff auf eine Adresse die zwischen zwei 32 oder 64 Bit Worten liegt erfordert aber dann real zwei Zugriffe, bremst also aus.<\/p>\n<p align=\"justify\">Der einzige Nachteil eines 32 Bitters ist eigentlich der auf 4 GByte begrenzte Adressraum, der so heute nicht mehr ausreicht. Aber nur auf den ersten Blick. Zum einen kann man wortweise adressieren, anstatt byteweise, dann sind es schon 16 GByte. Daneben haben wir heute in den Prozessoren mehrere Kerne, jeder kann aber einen getrennten Adressraum haben, anstatt sich einen zu teilen. Das Betriebssystem kann dann in einem gemeinsamen geteilten Bereich sitzen. Bei einem <a href=\"https:\/\/amzn.to\/3vp0S7n\">AMD Threadripper<\/a> mit 64 logischen Kernen k&auml;me man so auf 1 TByte Speicher und das ist heute noch mehr, als in den meisten Servern steckt. Wenn 1 TByte in einigen Jahren nicht mehr reichen sollten, wette ich hat auch der Prozessor mehr Kerne.<\/p>\n<p align=\"justify\">Daher sehe ich den 32 Bit Prozessor als die Optimall&ouml;sung an.<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_15892\" class=\"pvc_stats all  \" data-element-id=\"15892\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.bernd-leitenberger.de\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p>In dem heutigen Blog geht es erneut um die CPU-Entwicklung und ich will mal die einzelnen Faktoren auseinander dividieren, um dann auf die omin&ouml;se Zahl 23,12 zu kommen und zuletzt mal begr&uuml;nden, warum ich den 32-Bit-Mikroprozessor f&uuml;r das Optimum halte. Fangen wir mal mit dem Nettoergebnis an. Um wie viel ist die Geschwindigkeit eines Computers [&hellip;]<\/p>\n","protected":false},"author":169,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[1657,3786,4841,3784],"class_list":["post-15892","post","type-post","status-publish","format-standard","hentry","category-computer","tag-benchmark","tag-dhrystone","tag-ipc","tag-mips","entry"],"a3_pvc":{"activated":true,"total_views":3938,"today_views":0},"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":18612,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/28\/galileos-cds-teil-2\/","url_meta":{"origin":15892,"position":0},"title":"Galileos CDS \u2013 Teil 2","author":"Bernd Leitenberger","date":"28. M\u00e4rz 2026","format":false,"excerpt":"So, heute geht es weiter mit Teil 2 \u00fcber Galileos CDS, dieser Beitrag schlie\u00dft nahtlos an den ersten Beitrag von gestern an, wie man schon an der ersten Textzeile sieht. Nach der Einleitung im ersten Teil geht es heute weiter damit warum der RCA 1802 genutzt wurde und was seine\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/191e4b0728de42829cf656027b84dc82","width":350,"height":200},"classes":[]},{"id":18614,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/29\/galileos-cds-teil-3\/","url_meta":{"origin":15892,"position":1},"title":"Galileos CDS &#8211; Teil 3","author":"Bernd Leitenberger","date":"29. M\u00e4rz 2026","format":false,"excerpt":"So nun zum dritten Teil \u00fcber das prim\u00e4re Computersystem von Galileo, das CDS. Nachdem sich die ersten beiden Teile nur mit dem RCA 1802, warum er gew\u00e4hlt wurde und seiner Architektur befassten geht es heute um das Computersystem selbst. Der Artikel schlie\u00dft so an seine beiden Vorg\u00e4nger gestern und vorgestern\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/6e7f572a246b4ac395de9c260733b707","width":350,"height":200},"classes":[]},{"id":18610,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/27\/galileos-cds-teil-1\/","url_meta":{"origin":15892,"position":2},"title":"Galileos CDS &#8211; Teil 1","author":"Bernd Leitenberger","date":"27. M\u00e4rz 2026","format":false,"excerpt":"Hall\u00f6chen, es wird Zeit das ich mich mal wieder melde. Es gab zwei Gr\u00fcnde, warum ich mich so rar gemacht habe. Das eine ist das es gerade nicht so viel aktuelles gibt, au\u00dfer einem Update zu Artemis, zu dem ich vielleicht noch etwas schreibe. W\u00e4hrend Trump das ganze Programm nach\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/4fb81c7bafbd4d9d88b5695abdb33d29","width":350,"height":200},"classes":[]},{"id":18511,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/01\/27\/musks-ki-rechenzentren-im-orbit\/","url_meta":{"origin":15892,"position":3},"title":"Musks KI-Rechenzentren im Orbit","author":"Bernd Leitenberger","date":"27. Januar 2026","format":false,"excerpt":"Bei meinem regelm\u00e4\u00dfigen Besuch des Space Reviews stie\u00df ich auf diesen Artikel: SpaceX, orbital data centers, and the journey to Mars. Ich hatte in meiner Nachlese schon erw\u00e4hnt das Elon Musk, nachdem er dies lange verschoben hat nun plant SpaceX an die B\u00f6rse zu bringen. Ich meinte aber, das l\u00e4ge\u2026","rel":"","context":"In &quot;SpaceX&quot;","block_context":{"text":"SpaceX","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/spacex\/"},"img":{"alt_text":"","src":"https:\/\/vg06.met.vgwort.de\/na\/0ee72da693054bc3b5c3f00214a7e2b3","width":350,"height":200},"classes":[]},{"id":18380,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2025\/09\/03\/die-glorreichen-10-das-war-mal-weg-pc-hardware\/","url_meta":{"origin":15892,"position":4},"title":"Die glorreichen 10 &#8211; Das war mal weg: PC Hardware","author":"Bernd Leitenberger","date":"3. September 2025","format":false,"excerpt":"Ich will heute mal zwei ZDF Info \/ Neo Sendungen verbinden. Die glorreichen 10, die bei mir als Vorlage f\u00fcr einige Blogs dienten und die von mir noch mehr gesch\u00e4tzte Sendung \"Das war mal weg\", wo es um Dinge geht, die fr\u00fcher fast jeder hatte und die heute aus unserem\u2026","rel":"","context":"In &quot;Die Glorreichen 10&quot;","block_context":{"text":"Die Glorreichen 10","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/allgemein\/die-glorreichen-10\/"},"img":{"alt_text":"","src":"https:\/\/vg02.met.vgwort.de\/na\/876c61d389304d98aa0332fadd769381","width":350,"height":200},"classes":[]},{"id":18524,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/02\/06\/elon-musks-ki-rechenzentren-im-orbit-nochmals-nachgerechnet\/","url_meta":{"origin":15892,"position":5},"title":"Elon Musks KI-Rechenzentren im Orbit &#8211; nochmals nachgerechnet","author":"Bernd Leitenberger","date":"6. Februar 2026","format":false,"excerpt":"Ich habe mich ja schon mal mit diesem Thema besch\u00e4ftigt, in dem es vor allem um die Kosten und den wirtschaftlichen Unsinn ging - warum sollte ich ein Rechenzentrum in den Orbit bringen, wenn ich es billiger auf der Erde bauen kann und es auch gen\u00fcgend Gegenden gibt in denen\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg06.met.vgwort.de\/na\/78014052fde04012a2be60bd108cd4bb","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/15892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/comments?post=15892"}],"version-history":[{"count":0,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/15892\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/media?parent=15892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/categories?post=15892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/tags?post=15892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}