{"id":13175,"date":"2018-01-25T11:05:45","date_gmt":"2018-01-25T10:05:45","guid":{"rendered":"https:\/\/www.bernd-leitenberger.de\/blog\/?p=13175"},"modified":"2018-01-25T11:05:45","modified_gmt":"2018-01-25T10:05:45","slug":"wie-macht-man-dem-speicher-beine","status":"publish","type":"post","link":"https:\/\/www.bernd-leitenberger.de\/blog\/2018\/01\/25\/wie-macht-man-dem-speicher-beine\/","title":{"rendered":"Wie macht man dem Speicher Beine?"},"content":{"rendered":"<p>Ich denke es ist mal wieder an der Zeit einen Nicht-Raumfahrtblog einzuschieben. Im Prinzip ist das was ich schreibe nichts Neues, steht sogar viel ausf&uuml;hrlicher auf der Webseite, doch ich wei&szlig; auch das es nicht jeder gerne lange Aufs&auml;tze liest. Warum geht es? Es ist das Problem das der Speicher bei Computern zu langsam ist, und es schon immer war.<\/p>\n<p>Das Problem entsteht eigentlich dadurch, dass Speicher billig sein muss. Die gr&ouml;&szlig;ten CPUs und GPUs haben &uuml;ber 1 Milliarde Transistoren entsprechend liegen solche Grafikkarten und CPU im hohen dreistelligen Euro-Bereich. W&uuml;rde man pro Transistor ein Bit speichern, dann w&uuml;rde das f&uuml;r gerade mal 128 MByte Speicher reichen, der nur einige Euro kostet.<!--more--><\/p>\n<p>Speicher musste also billig sein. Der erste Speicher war sogar mechanisch. Schallwellen in Quecksilber wurden als Speichermedium genutzt, sp&auml;ter magnetisch beschichtete Trommeln. Das war schon langsam gegen&uuml;ber R&ouml;hrenrechnern. F&uuml;r zwei Jahrzehnte war der Standardspeicher der Ringkernspeicher, bei dem kleine Eisenringe magnetisiert wurden. Auch Ringkernspeicher war immer langsamer als die Logik, auch wenn die Zugriffszeit von Millisekunden der mechanischen Speicher auf Millisekunden fiel. Ende der Sechziger Jahre war die Technologie soweit, das man signifikante Datenmengen auf IC speichern konnte. Damit er&ouml;ffnete sich das Potenzial, das der Speicher genauso schnell ist wie die Logik. Doch es kam nicht so. Es gab zwei Gr&uuml;nde. Das eine war, das wenn man ein Bit so speichert wie im Prozessor, man 4 Transistoren braucht. K&ouml;nnte man die Zahl reduzieren so bekommt man mehr Bits pro Speicherchip. Das zweite war das eine neue Technologie versprach den Platzbedarf pro Transistor zu reduzieren. Das zweite war der &Uuml;bergang von der Bipolar auf die noch heute verbreitete MOS-Feldeffekt Technologie. Aus Bipolar-Transistoren, bzw. dessen Abk&ouml;mmling ECL basierte die Logik der Computer. Sie schaltete schnell, da ein Transistor nie den S&auml;ttigungszustand erreichte, verbrauchte aber viel Energie und damit war ein Transistor auch recht gro&szlig;. Die MOS-FET versprach viermal kleinere Strukturen, aber schaltete viel langsamer als Bipolar-Technologie. Intels erster Speicherchip hatte 64 Bit in Bipolartechnologie, der zweite 256 Bit in MOS-FET. Er war trotz vierfacher Kapazit&auml;t billiger.<\/p>\n<p>Das zweite war das man einen Weg fand, ein Bit in nur einem Kondensator zu speichern und man nur einen Transistor als Auslasstor brauchte, anstatt vier bei der Verwendung eines Flip-Flops die man in der CPU n&uuml;tzte, um Bits zu speichern. Das DRAM war dann nochmals viermal billiger pro Bit.<\/p>\n<p>Damit war RAM aber wieder langsam. Die ersten D-RAMS die Anfang der Siebziger Jahre auf den Markt kamen, hatten Zugriffszeiten von 250 bis 300 ns. Die Zugriffszeit ist die Zeit, die ein Speicher braucht, bis er nach einer Anforderung durch die CPU die Daten herausr&uuml;ckt. Es gibt dann noch die Zykluszeit \u2013 meistens kann man nach dem Zugriff nicht sofort den n&auml;chsten starten, sondern der Speicher muss die Informationen wieder schrieben, da das Auslesen sie vernichtet. (Heute wird das ganze noch granul&auml;rer angegeben wie Zugriffszeit pro Reihe\/Spalte etc.)<\/p>\n<p>Als einfacher Richtwert kann gelten: Braucht eine CPU einen Takt f&uuml;r einen Zugriff, so betr&auml;gt die maximale Taktfrequenz ohne das sie auf Daten warten muss, den Kehrwert der Zugriffszeit, bei 250 ns also 4 MHz. 10 Jahre sp&auml;ter hatte sich die Zugriffszeit verdoppelt, zwanzig Jahre sp&auml;ter nochmals verdoppelt. Im gleichen Zeitraum hatten sich bei Prozessoren die Taktfrequenzen aber um den Faktor 20 erh&ouml;ht und anstatt 4 Takten f&uuml;r einen Speicherzugriff brauchte der Prozessor nur noch einen. Speicher wurde also immer langsamer, verglichen mit dem Prozessor. Das ist bis heute so.<\/p>\n<p>Schon fr&uuml;her hat man also nach Wegen gesucht, die Langsamkeit zu Kaschieren. Alle Versuche basieren auf einer Tatsache: sowohl Computercode, wie auch Daten sind sehr lokal. Sprich: braucht man den Wert einer Speicherzelle so ist es sehr wahrscheinlich, das der n&auml;chste Zugriff auf die n&auml;chste Speicherzelle geht, weil Code linear ausgef&uuml;hrt wird und Variablen hintereinander im Speicher stehen.<\/p>\n<p>Die erste L&ouml;sung ist es, einen schnellen Speicher lokal verf&uuml;gbar zu halten. Die einfachste L&ouml;sung war ein Befehlspuffer, der die n&auml;chsten und letzten Befehle speicherte. So was hatten viele Gro&szlig;computer in den Sechzigern. Er bestand aus schnellem Speicher und die Logik war oft sehr einfach \u2013 es flogen immer die Daten raus dem Buffer die am weisesten von der aktuellen Position des Befehlszeigers entfernt waren. Daf&uuml;r musste der Prozessor vorausschauen lesen, im Fachjargon Prefetch. In der x86-Linie wurde das schon beim 8086 eingef&uuml;hrt.<\/p>\n<p>F&uuml;r Daten, die ja auch abgespeichert werden m&uuml;ssen, war die L&ouml;sung es viele Register einzusetzen. Ein Compiler konnte so m&ouml;glichst viele Register f&uuml;r das Programm nutzen und die Speicherzugriffe minimieren. Das gipfelte schlie&szlig;lich in Vektorregistern, die 64 bis 1024 Zahlen aufnahmen. Bei Intel ist das in der AVX\/SSD Technologie implementiert. Anstatt die Zahl der Register zu vergr&ouml;&szlig;ern fassen die daf&uuml;r bis zu 512 Bit, was bis zu 16 einfach genauen Zahlen entspricht.<\/p>\n<p>Die zweite M&ouml;glichkeit einen lokalen Speicher einzusetzen ist der Cache. Es ist ein kleiner Speicher der in einzelne Bereiche, Cachelines unterteilt ist. Eine Logik speichert immer die zuletzt gebrauchten Daten im Cache. Es gibt mehrere Technologien der Verwaltung. Das Problem ist, das das Verwalten des Caches auch Zeit ben&ouml;tigt, z.b. zum Durchsuchen. Das darf nicht zu lange dauern. Heute haben alle gr&ouml;&szlig;eren Prozessoren Caches, meist sogar mehrere gestufte, z. B. einen kleinen, schnellen und einen gr&ouml;&szlig;eren langsameren.<\/p>\n<p>Die zweite M&ouml;glichkeit ist es Langsamkeit durch Bandbreite zu ersetzen. Ein Prozessor der nur 32 Bit verarbeitet, ruft z. B. 256 Bit vom Speicher ab. Das sind dann die n&auml;chsten 8 Speicherzellen. Die hat er dann schon und muss sie nicht abrufen. Mit gro&szlig;er Bandbreite arbeiten heute Grafikkarten, fr&uuml;her Gro&szlig;rechner. Bei austauschbaren Modulen bekommt man meist die vielen Leistungen daf&uuml;r nicht unter. So arbeitet DDR-RAM nur mit 64 Bit.<\/p>\n<p>Die dritte M&ouml;glichkeit ist das vorausschauende Lesen. Wenn man wei&szlig;, das man die n&auml;chsten Daten bald braucht, dann kann der Speicher intern sie schon mal auslesen und in einen schnellen Zwischenspeicher ablegen. So arbeiteten viele Speicherb&auml;nke f&uuml;r Gro&szlig;computer, die mindestens das n&auml;chste Wort so voraussehend lasen. Eine Variation des Prinzips ist DDR-RAM. Hier &uuml;bertr&auml;gt das RAM automatisch die n&auml;chsten 64 Bit bei dem n&auml;chsten Flankenwechsel, insgesamt 8-mal, das ist angepasst an die 64 Byte gro&szlig;en Cacheslines heutiger Prozessoren. Nur f&uuml;r diesen Modus gilt die Daten&uuml;bertragungsrate, die ausgewiesen ist.<\/p>\n<p>Bei heutigen Rechnern un&uuml;blich, aber fr&uuml;her bei Gro&szlig;rechnern verbreitet, war das verteilte Lesen. Ein heutiger PC kommt mit einem Speichermodul aus, bis zu vier passen in normale PC-Boards. Bei Servern sind es mehr. Dabei geht jeweils ein Zugriff auf die erste Bank, der n&auml;chste auf die zweite usw. Zwischen den Zugriffen kann die Bank sich erholen (Zykluszeit &gt; Zugriffszeit) und sie kann auch vorausschauend lesen. Die Technik ist n&uuml;tzlich, wenn eine hohe Linearit&auml;t vorliegt. Bei Supercomputern von Cray die gro&szlig;e Arrays verarbeiteten, war dies gegeben. Diese hatten bis zu 256 Speicherb&auml;nke. Bei einem PC liegt dagegen der Geschwindigkeitsvorteil dagegen im einstelligen Prozentbereich.<\/p>\n<p>Insgesamt ist die Technik die ja heute kombiniert eingesetzt wird, sehr erfolgreich. Seit etwa 15 Jahren ist die Zugriffszeit von Speicherbausteinen kaum gesunken. Sie liegt heute bei 7 bis 10 ns, was f&uuml;r Taktzyklen von 100 bis 150 MHz, nicht aber viele GHz ausreicht. Durch Caches und vorausschauendes Lesen merkt man davon fast nie etwas. Findet am die Information aber nicht im Cache so kann es sogar noch l&auml;nger dauern als die Zugriffszeit des Rams betr&auml;gt. Die typische Latenz eines Speichers betr&auml;gt heute <a href=\"https:\/\/www.anandtech.com\/show\/11544\/intel-skylake-ep-vs-amd-epyc-7000-cpu-battle-of-the-decade\/13\">80 bis 100 ns<\/a>. Das ist 10-mal langsamer als der Speicher selbst. Das Problem: Auch wenn man nur ein Byte braucht, werden 64 Byte in 8 Zyklen &uuml;ber DDR-RAM gelesen. Dann wandert die Information durch die Caches, die ebenfalls Verz&ouml;gerungen haben bis zu 40 Takte beim L3-Cache. Wer programmieren kann, kann sich mal an folgendem versuchen:<\/p>\n<ul>\n<li>Dimensionieren Sie ein Array das signifikant gr&ouml;&szlig;er als die Caches des Prozessors ist, aber noch deutlich kleiner als der Arbeitsspeicher des Computers, bei 4 GB Arbeitsspeicher z. B. 1 GByte gro&szlig;.<\/li>\n<li>F&uuml;llen Sie es mit Werten. Nun rufen sie die Werte ab:<\/li>\n<li>a.) einmal sequentiell<\/li>\n<li>b.) einmal indem der Index per Zufallszahl ausgew&auml;hlt wird. (vorher f&uuml;r den Vergleich bestimmen wie lange das Ziehen der Zufallszahl dauert und den Wert sp&auml;ter abziehen.).<\/li>\n<li>Stoppen sie jeweils die Zeit.<\/li>\n<\/ul>\n<p>Bei der zweiten Methode werden Caches ausgetrickst, die Geschwindigkeit kann um den<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/1d81cb5dc40a4aac9905daf105fcaae7\" alt=\"\" width=\"1\" height=\"1\" \/> Faktor 100 einbrechen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich denke es ist mal wieder an der Zeit einen Nicht-Raumfahrtblog einzuschieben. Im Prinzip ist das was ich schreibe nichts Neues, steht sogar viel ausf&uuml;hrlicher auf der Webseite, doch ich wei&szlig; auch das es nicht jeder gerne lange Aufs&auml;tze liest. Warum geht es? Es ist das Problem das der Speicher bei Computern zu langsam ist, [&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":[],"class_list":["post-13175","post","type-post","status-publish","format-standard","hentry","category-computer","entry"],"a3_pvc":{"activated":false,"total_views":627,"today_views":0},"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":18610,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/27\/galileos-cds-teil-1\/","url_meta":{"origin":13175,"position":0},"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":18612,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/28\/galileos-cds-teil-2\/","url_meta":{"origin":13175,"position":1},"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":13175,"position":2},"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":18380,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2025\/09\/03\/die-glorreichen-10-das-war-mal-weg-pc-hardware\/","url_meta":{"origin":13175,"position":3},"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":18603,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/12\/politikverdruss\/","url_meta":{"origin":13175,"position":4},"title":"Politikverdruss","author":"Bernd Leitenberger","date":"12. M\u00e4rz 2026","format":false,"excerpt":"Bei uns wurde in BW gew\u00e4hlt und nat\u00fcrlich gab es jede Menge Sendungen im Radio und Fernsehen mit den Spitzenkandidaten. Ich habe mir die SWR1 Reihe \"Leute\", ein Radio-Talkformat mit den Spitzenkandidaten angeh\u00f6rt und nehme das mal als Aufh\u00e4nger etwas \u00fcber das zu schreiben was mich an der Politik in\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/9297ac798f9047d9a27f46008ab7fa99","width":350,"height":200},"classes":[]},{"id":5216,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2011\/08\/10\/fcea2\/","url_meta":{"origin":13175,"position":5},"title":"FCEA2","author":"Bernd Leitenberger","date":"10. August 2011","format":false,"excerpt":"CEA2 (Chemical Equilibrium with Applications) ist ein seit gut 30 Jahren entwickeltes NASA Programm mit dem verschiedenste Probleme bei Gasphasen berechnet werden k\u00f6nnen. Ich beschr\u00e4nke mich auf das, was Raumfahrtliebhaber wohl am meisten machen: Die Berechnung der Performance von Triebwerken bei Raketen. Ich will die Benutzung des Programmes einmal erl\u00e4utern,\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:\/\/vg01.met.vgwort.de\/na\/89efc24160614a1a93d97d19447e81a6","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\/13175","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=13175"}],"version-history":[{"count":0,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/13175\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/media?parent=13175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/categories?post=13175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/tags?post=13175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}