{"id":9838,"date":"2014-04-23T00:51:51","date_gmt":"2014-04-22T22:51:51","guid":{"rendered":"http:\/\/www.bernd-leitenberger.de\/blog\/?p=9838"},"modified":"2014-04-20T13:58:07","modified_gmt":"2014-04-20T11:58:07","slug":"wie-mache-ich-dem-speicher-beine","status":"publish","type":"post","link":"https:\/\/www.bernd-leitenberger.de\/blog\/2014\/04\/23\/wie-mache-ich-dem-speicher-beine\/","title":{"rendered":"Wie mache ich dem Speicher Beine?"},"content":{"rendered":"<p>Ich habe mich als ich an dem Aufsatz &uuml;ber die Cray 3 sa&szlig;, bekam ich immer mehr Infos &uuml;ber die fr&uuml;heren Rechner von Seymour Cray und machte mich an die Cyber 6600 und die hatte schon in den fr&uuml;hen sechziger Jahre ein Problem: Die Logik war schneller als der Speicher. Zeit das vielleicht mal als Thema im Blog aufzugreifen.<\/p>\n<p>Ich glaube das Problem existierte fast von Anfang des Computers. Die ersten Rechner verwandten die gleichen Bauteile f&uuml;r Speicher und CPU, so die Rechner von Zuse oder die ersten R&ouml;hrenrechner wie die ENIAC. Doch bald kam man drauf f&uuml;r den Speicher Elemente zu nehmen, die billiger als die Logik waren. Das lag auf der Hand, denn egal wie komplex eine CPU ist, sie braucht immer weniger Elemente als der Speicher. Eine 8-Bit CPU hatte zwischen 4500 und 6500 Transistoren, f&uuml;r den Speicher von 64 KByte h&auml;tte man 524.000 Elemente gebraucht die als Flip-Flop Speicherelement rund 2 Millionen Transistoren erfordert h&auml;tten. Bei einer 16 Bit CPU waren es zwischen 29.000 und 134.000 Transistoren, f&uuml;r den Speicher h&auml;tte man 32 bis 512 Millionen Transistoren gebraucht.<!--more--><\/p>\n<p>So wich man aus auf Elemente oder Technologien aus, die billiger waren. Zuerst waren es Eisenringe, die man zwar manuell auff&auml;deln musste, aber in der Herstellung waren sie erheblich billiger als die Transistoren aus Germanium. als integrierte Schaltungen aufkamen erfand man bald das DRAM, das anders als das SRAM f&uuml;r jedes Bit nur einen Transistor (anstatt 4-6 je nach Geschwindigkeit) brauchte. Allerdings sind DRAM Speicher relativ langsam, weil das &#8222;Bit&#8220; in einem Kondensator steckt und auch das Ansprechen einer Zeile einige Zeit braucht. Die Diskrepanz wurde im Laufe der Zeit immer gr&ouml;&szlig;er. Die CPU der Cyber 6600 war zehnmal schneller als der Speicher, heute ist es der Faktor 30.<\/p>\n<p>Wie sorgt man daf&uuml;r, dass die CPU nicht 90% der Zeit warten muss?<\/p>\n<p>Das erste was man einf&uuml;hrte war der <strong>Prefetch<\/strong>. Anstatt jeden Befehl einzeln zu holen, dann auszuf&uuml;hren, holte die CPU schon die die Bytes die auf den n&auml;chsten Adressen folgten. Da zum gr&ouml;&szlig;ten Teil die Befehle linear abgearbeitet wurde konnte man so die Ausf&uuml;hrung beschleunigen, da man die Ausf&uuml;hrungszeit der Befehle f&uuml;r das Holen der n&auml;chsten Bytes nutzen konnte. Prefetch wurde sehr fr&uuml;h eingef&uuml;hrt, beschleunigte aber nur die Ausf&uuml;hrung der Befehle, nicht die der Daten die verarbeitet wurden. Das wurde f&uuml;r zahlreiche Rechner zum Bottleneck. Prominente Beispiele waren die STAR 100, der erste Vektorrechner bei dem man den Fehler machte, die Rechenoperationen vom Speicher zum Speicher auszulegen. Auch die Cray 1 war in dieser Hinsicht schlecht ausgelegt. Nur wenn die Daten in Registern standen, war sie schnell. Beim Zugriff auf den Speicher sank die Leistung auf ein Siebtel ab und wenn es keine Vektoroperationen m&ouml;glich waren, sondern Skalarberechnungen, dann sank die Leistung von maximal 130 auf 4-5 MFlops ab.<\/p>\n<p>Der n&auml;chste Schritt war es, den Speicher in B&auml;nken anzuordnen und auf diese nacheinander zuzugreifen. Die beschleunigende Wirkung erkl&auml;rt sich durch die Arbeitsweise von Speicherbausteinen. Wenn eine CPU Daten haben wollte, legte sie zuerst die Adresse an die Speicherchips an und signalisierte auf einer Leitung, dass sie auf Daten wartete. Der Speicherbaustein &uuml;bersetzte die Adresse in interne Zeilen- und Spaltenadressen, &ouml;ffnete den Zugang der Speicherzelle am Kreuzungspunkt der Spalten-\/Zeilenadressen zu den Datenleitungen, die Ladung setzte diese unter Spannung und der Baustein setzte eine Leitung unter Spannung die signalisierte, dass die Daten bereit zum Abholen waren. Nun konnte die CPU die Datenleitung abfragen und sie setzte zum Schluss eine Signalleitung zur&uuml;ck, die dem Baustein signalisierte, das die Aktion abgeschlossen ist. Spricht man nun mehrere Bausteine nacheinander an, weil man damit rechnet, die n&auml;chsten Bytes gleich zu ben&ouml;tigen (siehe Prefetch), so kann die CPU nacheinander von allen die Daten holen, weil sie im entscheidenden Schritt, dem Daten abholen, warten.<\/p>\n<p>Die Technik nennt man <strong>Bankinterleaving<\/strong>.. Es gibt sie auch beim PC, dort spricht man von Speicherkan&auml;len. Wenn man sich das Motherboard anschaut, so hat es mindestens zwei Slots, manchmal auch 4,6 oder 8. Typischerweise bilden zwei Steckpl&auml;tze eine Bank, das bedeutet wenn man vier Module in den Rechner packt, so m&uuml;sste er schneller sein als mit zwei. Aufgrund anderer Techniken ist der Vorsprung heute aber im einstelligen Prozentbereich. Das einsetzen von Banks ist sehr verbreitet, genauso wie bei Prefetch gibt es aber Probleme, wenn die Ausf&uuml;hrung nicht linear ist, das bedeutet der Code verzweigt (Spr&uuml;nge, Unterprogramme aufgerufen werden) oder die Daten wechseln (neue lokale Variablen in Unterprogrammen), dann n&uuml;tzt das vorausschauende Lesen der Daten aus der Speicherbank nichts, denn diese werden nicht mehr gebraucht. Ganz fatal ist das beim Code, weil das dann auch den Prefetch und die Pipeline betrifft, die Befehle vorrausschauend holen und Dekodieren. Es gibt auch hier einige prominente Beispiele wo dieser Effekt zuschlug. Beim Pentium Pro war es so, dass bei 16-Bit Zugriffen der Mechanismus nicht griff und der damals sehr teure Prozessor langsamer als ein niedrig getakteter preiswerter Pentium war und beim Pentium 4 gab es auch einen ziemlichen Performanceeinbruch wenn der Code nicht linear war oder Daten nicht im Cache. Ein prominenter Supercomputer der darunter litt war die <a href=\"file:\/\/\/C:\/cray-2.shtml\">Cray 2<\/a>. Man setzte dort Logikchips mit 4,1 ns Zykluszeit ein und Speicherchips mit 160 ns. So waren die Speicherchips in nicht weniger als 64 B&auml;nken angeordnet. ging es linear zu, so wurde eine Bank erst nach 262 ns wieder angesprochen &#8211; lange genug bei selbst der langsamen Zugriffszeit. Doch meist war das nicht gegeben und in der Realit&auml;t erreichte die Cray nur die H&auml;lfte ihrer nominellen Spitzenleistung von 1942 MFlops.<\/p>\n<p>Der <a href=\"file:\/\/\/C:\/Users\/Admin\/Documents\/Websites\/bernd-leitenberger\/7cache.shtml\">Cache<\/a> ist die letzte Neuerung. Der Gedanke ist der dass man einen lokalen Speicher hat, der schnell genug f&uuml;r die CPU ist. Er ist in einzelne Bereiche, <strong>Cachelines<\/strong> unterteilt. F&uuml;r jede Cacheline wird gemerkt welche Adressen des Speichers sie enth&auml;lt und wann der letzte Zugriff erfolgte, wenn die aktuell ben&ouml;tigten Daten nicht im Cache waren, dann wurde die &auml;lteste Cacheline mit neuen Daten &uuml;berschrieben (das dauerte nun so lange wie ein normaler speicherzugriff), danach kommen sie aus dem <strong>Cache<\/strong>. Dieser muss nun so schnell wie m&ouml;glich sein. Er befindet sich auch meistens im Prozessor selbst um die Wege kurz zu lassen. Da derartiger Speicher sehr teuer ist, haben heutige Prozessoren meistens gestufte Caches, einen kleinen Level 1 Cache mit hoher Geschwindigkeit, ein gr&ouml;&szlig;erer Level 2 Cache der etwas langsamer ist und einige Prozessoren wie der Power 5 von IBM haben auch einen Level 3 Cache, der ist dann auch meist au&szlig;erhalb des Prozessors in einem eigenen Baustein unteegrbracht beim L1 und L2 Cache ist das wegen der Signallautweiten nicht m&ouml;glich (bei 3 GHz legen Signale maximal 7 cm zur&uuml;ck bis der n&auml;chste Takt beginnt). Caches haben einen Vorteil gegen&uuml;ber den bisherigen L&ouml;sungen, die nur einen Speicherbereich schnell machen, aber beim Zugriff auf einen anderen versagen. Dadurch dass der Cache mehrere Bereiche hat, kann er bei Spr&uuml;ngen und Verzeigungen von verschiedenen Stellen deren Code vorr&auml;tig halten, ebenso wie die ben&ouml;tigten Variablen. vorr&auml;tig halten. Da Code &uuml;blicherweise nicht laufend neue Daten anfasst und auch immer wieder dieselben Routinen nutzt war der Cache die wichtigste M&ouml;glichkeit dem Speicher Beine zu machen. Bei den alten Prozessoren konnte man ihn noch im BIOS abschalten und pl&ouml;tzlich war der Rechner nur noch so schnell wie ein IVM AT und die alten DOS spiele liefen wieder &#8230;.<\/p>\n<p>Der SDARM Speicher f&uuml;hrte im PC Bereich den <strong>Burstmodus<\/strong> ein. Die Geschwindigkeitssteigerung liegt darin, dass man die obige aufwendige Kommunikation zwischen Prozessor und Speicher abk&uuml;rzte. Nach dem ersten &Uuml;bertragenen Wort liegt das n&auml;chste beim n&auml;chsten Takt an den Ausg&auml;ngen ohne das es quittiert wird. Das geht, weil der Chip intern die n&auml;chsten Daten l&auml;dt und an die Datenleitungen geht. Allerdings ist der Speicher nun nicht mehr universell einsetzbar. Er und der Prozessor m&uuml;ssen mit dem gleichen Takt betrieben werden, da der Speicher nicht mehr darauf wartet dass der Prozessor die Abnahme der Daten quittiert. <strong>DDR<\/strong> Speicher ist SDRAM, der zweimal pro Taktzyklus (bei jedem Flankenwechsel) Daten an die Ausg&auml;nge stellt.<\/p>\n<p>Bei den Gro&szlig;rechnern &uuml;blich, bei Prozessoren nur in kleinem Ma&szlig;e eingesetzt ist das letzte Konzept: Bandbreite. Wenn der Speicher langsam ist und man aus verschiedenen Gr&uuml;nden keine Caches einsetzen kann (bei Gro&szlig;rechnern z. B. wegen der langen Signallaufzeit zwischen den Modulen) dann kompensiert man durch Bandbreite. Wenn man eine 32 Bit Architektur hat, dann l&auml;dt man 256 Bit auf einmal, dann hat man die n&auml;chsten 16 Worte vorr&auml;tig. Im PC Bereich ist vor allem der Cache mit einer hohen Bandbreite angebunden, der Pentium hatte auch einen 64 Bit Datenbus bei einer 32 Bit Architektur. Verbreiteter ist das Konzept bei Grafikkarten, hier bringen Caches wenig, weil hunderte von Recheneinheiten dauernd neue Daten anfordern und im Prinzip auf den ganzen Speicher mehrmals pro Sekunde zugegriffen wird. Hier wird Geschwindigkeit erreicht durch einen Datenbus von 128 bis 512 Bit Breite der dann bei einem Taktzyklus (und der liegt weit unter dem von CPU&#8217;s) gleich mal 16 bis 64 Bytes auf einmal transferiert.<\/p>\n<p>Architekturen k&ouml;nnen sich auch an den Umstand anpassen, das geschah mit Befehlen wie <a href=\"\/simd-vliw.shtml&quot;\">SIMD<\/a> (Single Instruction multiple Data), bei denen mehrere Daten mit einem Befehl kombiniert werden. Es entfallen dann die Zugriffe auf den Speicher, da die Daten schon am Code h&auml;ngen oder CLIW (Very Long Instruction Word, bei dem mehrere Befehle zu einem gro&szlig;en Block kombiniert werden &#8211; auch hier kann man diesen Block auf einmal holen anstatt mehrmals auf den Speiche zuzugreifen.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/910f44d0edec4903b42aed6de10e0a55\" alt=\"\" width=\"1\" height=\"1\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe mich als ich an dem Aufsatz &uuml;ber die Cray 3 sa&szlig;, bekam ich immer mehr Infos &uuml;ber die fr&uuml;heren Rechner von Seymour Cray und machte mich an die Cyber 6600 und die hatte schon in den fr&uuml;hen sechziger Jahre ein Problem: Die Logik war schneller als der Speicher. Zeit das vielleicht mal als [&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":[3598,3600,3602,3599,3596,3601,3597],"class_list":["post-9838","post","type-post","status-publish","format-standard","hentry","category-computer","tag-cache-ddr-ram","tag-datenrate","tag-dram","tag-prefetch","tag-simd","tag-speicher","tag-vliw","entry"],"a3_pvc":{"activated":false,"total_views":907,"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":9838,"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":9838,"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":9838,"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":9838,"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":5216,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2011\/08\/10\/fcea2\/","url_meta":{"origin":9838,"position":4},"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":[]},{"id":18603,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/12\/politikverdruss\/","url_meta":{"origin":9838,"position":5},"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":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/9838","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=9838"}],"version-history":[{"count":0,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/9838\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/media?parent=9838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/categories?post=9838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/tags?post=9838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}