{"id":10656,"date":"2014-12-08T00:47:13","date_gmt":"2014-12-07T23:47:13","guid":{"rendered":"http:\/\/www.bernd-leitenberger.de\/blog\/?p=10656"},"modified":"2014-12-07T18:48:24","modified_gmt":"2014-12-07T17:48:24","slug":"simd-und-vliw","status":"publish","type":"post","link":"https:\/\/www.bernd-leitenberger.de\/blog\/2014\/12\/08\/simd-und-vliw\/","title":{"rendered":"SIMD und VLIW"},"content":{"rendered":"<p>Heute wieder ein Thema aus dem Bereich Computer. Ich habe meinen Artikel &uuml;ber <a href=\"\/simd-vliw.shtml\">SIMD und VLIW<\/a> aktualisiert (in dem noch mehr drin steht, f&uuml;r alle die der Blog nicht reicht). Fangen wir mit der Begriffsdefinition an:<\/p>\n<ul>\n<li>SIMD steht f&uuml;r Single Instruction, Multiple Data<\/li>\n<li>VLIW steht f&uuml;r Very Long Instruction Word<\/li>\n<\/ul>\n<p>Fangen wir mit SIMD an. Eine klassische Assembleranweisung eines Prozessors bearbeitet einen oder zwei Werte die in einem Register stehen. Bei SIMD sind es mehr als maximal zwei Werte, die entweder in Registern stehen, die viele Werte fassen oder in &uuml;berlangen Registern, in denen einzelne Teilbereiche jeweils f&uuml;r einzelne Werte stehen. Es gibt dann noch SISD (Single Instruction Single Data, das sind entspricht den meisten Prozessorbefehlen eines x86-Prozessors und MIMD (Multiple Instruction, Multiple Data), das liegt bei einem Mehrkernprozessor oder einem Rechner mit mehreren CPUs vor.<!--more--><\/p>\n<p>Das Paradebeispiel f&uuml;r die erste Architektur ist der Vektorrechner, so die Rechner von <a href=\"\/cray.shtml\">Seymour Cray<\/a>, das zweite ist die Umsetzung in der x86 Architektur die SSE oder AVX hei&szlig;t. Die Rechner von Cray hatten Register die 64 Werte fassten. AVX hat derzeit 256 Bit breite Register (ab n&auml;chstem Jahr 512 Bit), die maximal acht einfach genaue oder vier doppelt genaue Zahlen fassen.<\/p>\n<p>Das wichtigste ist: Mit einem Befehl wird nun die Berechnung vieler Werte &#8222;angesto&szlig;en&#8220;. Bei der Cray gab es drei funktionelle Einheiten f&uuml;r diese Operationen, in die pro Takt eine Zahl reingesteckt wurde und Nach einer gewissen Latenz ein Ergebnis pro Takt herauspurzelte. Man konnte sie miteinander verketten und so die relativ h&auml;ufige Kombination von Multiplikation gefolgt von einer Addition beschleunigen. W&auml;hrend eine Cray f&uuml;r eine einfache Berechnung (eines Wertes) 7-10 Takte brauchte, fiel diese Zeitdauer bei den SIMD Anweisungen nur f&uuml;r die erste Rechnung an, die folgenden brauchten nur einen Takt bzw. Bei Kombination mehrerer Rechenwerke waren sogar zwei Operationen pro Takt m&ouml;glich.<\/p>\n<p>Intel nutzt mehrere Rechenwerke, die jeweils einen Teilbereich des &uuml;berbreiten Registers als Eingang und Ausgang nutzen und so parallel arbeiten. Beschleunigt werden die Operationen auch durch den unten angesprochenen Burstzugriff &#8211; das Laden von 4 Zahlen auf einen Rutsch geht schneller als das einzelne Laden von einer Zahl.<\/p>\n<p>SIMD nutzt vor allem dann etwas, wenn in einer Schleife in einem Feld immer dieselben Anweisungen durchlaufen werden, dann kann man n Schleifendurchl&auml;ufe durch eine einzelne SIMD Instruktion ersetzen die N Werte verarbeitet.<\/p>\n<p>Intel verweist immer dann, wenn es um die Performance ihrer Prozessoren geht, auf die Steigerungen durch SIMD Anweisungen die bei Intel in den Befehlserweiterungen AVX und SSE stecken. Damit lenken sie den Blick davon weg, dass bei Nichtnutzung der Befehle die Anwender bei dem Kauf eines neuen Prozessors seit einigen Jahren nur noch eine leichte Beschleunigung ihrer Software wahrnehmen. Kann man die Software optimieren, wie dies bei Supercomputern, wo Zehntausende dieser Prozessoren abreiten und die Rechner zweistellige Millionenbetr&auml;ge kosten, dann lohnen sich SIMD Anweisungen, zumal die dortigen Probleme auch sehr gut f&uuml;r SIMD Anweisungen geeignet sind. Bei\u00a0 dem was der Benutzer mit seinem PC tut, ist dies eher nicht der Fall. Der fr&uuml;her von Intel als Hauptzweck angef&uuml;hrte Einsatz f&uuml;r die Beschleunigung von Multimediainhalten wird heute von den GPU besser erledigt. Selbst eine im Prozessor integrierte GPU wie die Intel HD 4X00 Grafik ist da effizienter als die AVX Anweisungen des Prozessors.<\/p>\n<p>VLIW hat einen anderen Ansatz:<\/p>\n<p>Heute haben die meisten Prozessoren mehr als eine ALU oder FPU, k&ouml;nnen also mehr als einen Ganzzahlen- und einen Flei&szlig;kommabefehl pro Takt durchf&uuml;hren. Doch folgen diese im Befehlsstrom linear aufeinander. Will man vermeiden dass der gr&ouml;&szlig;te Teil des Prozessors D&auml;umchen dreht muss man zwei Dinge tun:<\/p>\n<ul>\n<li>Befehle vorziehen und an eine gerade freie Einheit &uuml;bergeben<\/li>\n<li>Feststellen ob es keine Wechselwirkungen gibt.<\/li>\n<\/ul>\n<p>Das letztere ist nicht ganz einfach. Es gibt hier sehr viele Wechselwirkungen. So k&ouml;nnen sich Befehle bei der Ausf&uuml;hrung &uuml;berholen und ein sp&auml;terer Befehl kann das Ergebnis eines fr&uuml;heren Befehles &uuml;berschreiben. Es kann Abh&auml;ngigkeiten geben, das man das Ergebnis einer Rechnung als Ausgangswert f&uuml;r eine zweite braucht oder ein Ladevorgang kann ein Ergebnis &uuml;berschrieben bevor es genutzt wird. Das Umsortieren der Befehle Fachwort &#8222;Out of Order Execution&#8220; ist heute Standard, macht aber auch sehr komplexe Chips n&ouml;tig. Intel hat dieses Feature bei der ersten Atom-Generation eingespart &#8211; Der Atom hatte mit 42 Millionen Trasnsistorfunktionen nur ein Zehntel der Elemente eines iCore Prozessors, aber er war auch entsprechend langsam<\/p>\n<p>Beim Itanium Prozessor ging man mit VLIW einen anderen Weg. In einem Befehlsb&uuml;ndel, dem VLIW wurden mehrere Befehle so gruppiert, das sie m&ouml;glichst parallel durchgef&uuml;hrt werden. Einige Statusbits informieren &uuml;ber die Abh&auml;ngigkeiten. Die eigentlich geniale Idee dahinter: der Compiler, der den Quelltext hat und daher die Abh&auml;ngigkeiten viel besser kennt, soll den Code so erzeugen das m&ouml;glichst viel parallel abgearbeitet werden kann. Doch das klappte nicht so wie gew&uuml;nscht. Das war ein Grund f&uuml;r den fehlenden kommerziellen Erfolg des Itaniums.<\/p>\n<p>Das ist eine Form von VLIW, es gibt weitere, so kann man Befehle die zusammenh&auml;ngen, z.B. in einer Schleife ausgef&uuml;hrt werden b&uuml;ndeln. Man kann auch VLIW mit SIMD kombinieren, wie dies bei der Verarbeitung von Signalen der Fall ist.<\/p>\n<p>Es gibt f&uuml;r SIMD wie auch VLIW Architekturen einen zweiten wichtigen Grund, der liegt in der Funktionsweise von DDR Speicher. Nach einer Latenz, die von der Langsamkeit des Speichers abh&auml;ngt und viele Taktzyklen des 200 MHz Basistaktes betr&auml;gt, liefert der Speicher das erste Datenwort aus, danach bei jeder Taktflanke ein weiteres Wort, insgesamt achtmal. Er greift dazu parallel auf verschiedene B&auml;nke zu, sodass die langsame Zugriffszeit als Latenz nur beim ersten Zugriff erfolgt. der Prozessor muss dann acht mal 64 Bit entgegennehmen. Bei DDR-3 Speicher und einem mit 3,2 GHZ getakteten Prozessor der Nehalem Architektur braucht man f&uuml;r die 64 &uuml;bertragenen Byte 109 Takte, davon entfallen 45 f&uuml;r den ersten Zugriff und die Wartezeit nach dem letzten Zugriff bis ein neuer erfolgen darf und 64 Takte auf den Transfer.<\/p>\n<p>W&uuml;rde man die Befehlsworte immer 64 Byte breit machen, so kann man pro Transfer eines transferieren das dann mehrere elementare Befehle enth&auml;lt. Mehr noch: das n&auml;chste steht direkt dahinter, das erleichtert das vorrauschschauende Lesen und erh&ouml;ht die Systemgeschwindigkeit weiter, denn normalerweise sind Befehlsworte unterschiedlich lang, in der X86 Architektur zwischen einem und 17 Bytes. Intern kann dann ein 64 Byte Wort, das mehrere Befehle enth&auml;lt parallel dekodiert werden, also gleichzeitig mehrere Befehle ausgef&uuml;hrt und an die Funktionseinheiten verteilt werden.<\/p>\n<p>Trotzdem ist VLIW noch nicht so verbreitet in der Hardware, was vielleicht auch daran liegt das einige VLIW Architekturen ihr Performanceversprechen nicht einl&ouml;sen konnten, so z. B. der I860 Prozessor der VLIW einsetzte.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/20a7c4e9d111499cbaaf8d7d9d5bda59\" width=\"1\" height=\"1\" alt=\"\"\/><\/p>\n<p>So, nun noch ein R&auml;tsel: Welcher Rechner setzte VLIW und SIND ein? Mir pers&ouml;nlich f&auml;llt spontan einer ein, aber sicher gibt es mehrere richtige Antworten)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute wieder ein Thema aus dem Bereich Computer. Ich habe meinen Artikel &uuml;ber SIMD und VLIW aktualisiert (in dem noch mehr drin steht, f&uuml;r alle die der Blog nicht reicht). Fangen wir mit der Begriffsdefinition an: SIMD steht f&uuml;r Single Instruction, Multiple Data VLIW steht f&uuml;r Very Long Instruction Word Fangen wir mit SIMD an. [&hellip;]<\/p>\n","protected":false},"author":169,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[3780,3596,3779,3597],"class_list":["post-10656","post","type-post","status-publish","format-standard","hentry","category-computer","tag-avx","tag-simd","tag-sse","tag-vliw","entry"],"a3_pvc":{"activated":false,"total_views":664,"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":10656,"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":18610,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/27\/galileos-cds-teil-1\/","url_meta":{"origin":10656,"position":1},"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":18614,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/29\/galileos-cds-teil-3\/","url_meta":{"origin":10656,"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":18676,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/05\/31\/die-glorreichen-10-programmiersprachen\/","url_meta":{"origin":10656,"position":3},"title":"Die glorreichen 10 \u2013 Programmiersprachen","author":"Bernd Leitenberger","date":"31. Mai 2026","format":false,"excerpt":"Ich wollte mal eine Reihe in dieser Rubrik \u00fcber Programmiersprachen machen. Zuerst dachte ich daran eine Liste nach meinen pers\u00f6nlichen Favoriten zu erstellen. Anfangs bef\u00fcrchtete ich, dass ich gar nicht auf 10 komme, aber es sind tats\u00e4chlich mehr, wenngleich ich in vielen Sprachen nur kleine Programme verfasst habe oder mich\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:\/\/vg09.met.vgwort.de\/na\/4073c4f9dc6943a08702cdde13605d43","width":350,"height":200},"classes":[]},{"id":18683,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/06\/01\/die-glorreichen-10-programmiersprachen-2\/","url_meta":{"origin":10656,"position":4},"title":"Die glorreichen 10 \u2013 Programmiersprachen (2)","author":"Bernd Leitenberger","date":"1. Juni 2026","format":false,"excerpt":"Der heutige Teil schlie\u00dft nahtlos an den ersten Teil an, der gestern erschien. Es geht um 10 Kriterien anhand derer man Programmiersprachen kategorisieren kann. Maschinennah oder universell, aber komplex Als eine maschinennahe Sprache bezeichnet man eine Sprache, die nahe den M\u00f6glichkeiten von Prozessoren ist. Das Paradebeispiel ist C. Alle Prozessoren\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:\/\/vg09.met.vgwort.de\/na\/7f5d9cf5265047179df05b778bf455b5","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":10656,"position":5},"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":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/10656","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=10656"}],"version-history":[{"count":0,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/10656\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/media?parent=10656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/categories?post=10656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/tags?post=10656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}