So einfach ist es! Balakirevskaya (automatische) Architektur von Prozessoren / Sudo Null IT News

Früher oder später werden Sie sich fragen, wie die Zukunft der Prozessoren aussehen wird. Die Errungenschaften moderner Fabriken wie TSMC zeigen, dass wir das Maximum unserer technologischen Möglichkeiten erreicht haben. Dadurch ist jede nachfolgende technologische Stufe mit immer mehr Arbeitsaufwand und vervielfacht steigenden Kosten verbunden. Bei Transistoren ging die Rechnung auf wenige Atome, und nachdem wir die Möglichkeit zur Reduzierung ihrer Größe ausgeschöpft hatten, gingen wir zur Schaffung von mehrschichtigen “Kuchen” über. Aber auch hier geht es nicht ohne Probleme – etwa bei der Wärmeableitung oder der gleichen Lagenzahl. Allerdings ist nicht alles so schlimm, denn. es gibt Möglichkeiten auf der Ebene der Prozessorarchitekturen, die nicht weniger und manchmal sogar effizienter sind als die neuen technologischen Normen. Darüber reden wir später…

Einführung

Die Princeton- und Harvard-Architekturen wurden zu Beginn der Entwicklung von Prozessoren gegründet, aber bis heute bestimmen sie die Grundlagen von Computersystemen (für weitere Details siehe. [1]). Der erste kombiniert den Datenfluss und die Programmbefehle in einem einzigen Kanal, und der zweite trennt die Befehls-, Daten- und Stapelflüsse. Infolgedessen ist die Princeton-Architektur durch das Vorhandensein eines “Engpasses” und dementsprechend einer Leistungsbegrenzung gekennzeichnet. Die Harvard-Architektur hingegen hat viele parallele Kanäle, was sich positiv auf die Geschwindigkeit von Rechenprozessen auswirkt (näheres dazu siehe. [2]).

Auf der Ebene des Rechenmodells, das sich recht gut in der Struktur von Programmiersprachen widerspiegelt, sind die Unterschiede zwischen den genannten Architekturen eher bedingt. Der Nachteil der Harvard-Architektur, verbunden mit einer ineffizienten Speichernutzung, wird derzeit tatsächlich durch Hardware-Fähigkeiten ausgeglichen. Somit ist eine Erhöhung der Anzahl von Datenübertragungskanälen kein Problem mehr und dient als eine der wichtigen Ressourcen zum Erhöhen der Leistung von Computersystemen.

Aber die Jahre laufen, und in modernen Programmen können Sie nach wie vor Daten, Befehle, einen Stapel und … alles auswählen? Alles andere, was einem gewöhnlichen Programmierer oft verborgen bleibt – ein mehrstufiger Cache, lange und kurze Befehle, Befehlsvorhersage und viele andere “Goodies” erhöhen die Leistung in gewissem Maße, aber nicht so sehr, dass es einen qualitativen Sprung gibt. Darüber hinaus können sich diese Mechanismen sogar negativ auf die Rechengeschwindigkeit auswirken. Ein ernsthafter Fortschritt scheint jetzt nur durch eine Änderung der Architektur des Computersystems erreicht zu werden.

Im Folgenden betrachten wir ein formales Modell, das die Architektur des Prozessors qualitativ verändert und alle Chancen hat, die Rechenleistung des Systems zu erhöhen. Wir werden über die automatische Programmierung (AP) sprechen, deren Modell in ausreichend detailliert betrachtet wird [3]. Die darauf basierende Architektur, die nach dem Vorbild der oben genannten Architekturen nach dem Ort ihrer Weiterentwicklung Balakirevskaya genannt werden kann, werden wir weiter betrachten.

Funktionale Aufteilung

Durch die Aufteilung des Programms in Blöcke können Sie deren effizientes Einlesen in den schnellen Zwischenspeicher organisieren, mit dem der Zentralprozessor bereits arbeitet. Funktionen sind für die Rolle solcher Blöcke sehr gut geeignet. Aber erstens haben sie eine große Streuung in der Größe, und zweitens wird mit hoher Wahrscheinlichkeit irgendwann nur noch ein unbedeutender Teil des Funktionscodes funktionieren, was einen großen Overhead für das Verschieben seines Codes provoziert.

Die Technologie der automatischen Programmierung (AP) bietet einen Ansatz, der ein Programm auf natürliche Weise in eine Reihe von Programmen aufteilt [небольших] Funktionen, deren Code vollständig nachgefragt wird. Solche Funktionen sind Prädikate und Aktionen eines Automatenprogramms. Sie können sogar separate Speicher für Prädikate und Aktionen einführen. Dies schafft einzigartige Möglichkeiten zur Feinabstimmung der Hardware, die diese Funktionen übernimmt.

Da also ein gemeinsamer langsamer Speicher vorhanden ist, können Automatenfunktionen in einen schnellen Speicher verschoben und dann ausgeführt werden. Aus der Gesamtzahl solcher Funktionen kann man zu Optimierungszwecken diejenigen herausgreifen, die aktuell relevant sind [дискретном] Programmausführungsschritt. In diesem Fall sind die Prädikate immer relevant, und die Aktionen sind nur diejenigen, die beim aktuellen Übergang des Automaten ausgewählt werden. Aber selbst wenn keiner von ihnen nachgefragt wird, wird dies die Effizienz des Systems nicht wesentlich beeinträchtigen, da beispielsweise bei getrennten Speicherkanälen Aktionen parallel zu den Prädikaten geladen werden.

Kontroll-Kanal

Das automatische Programmmodell ermöglicht es Ihnen, die Steuerlogik des Programms von seinen Operatoren und Daten zu trennen. Und durch diese Steuerung wird ein effektives Blockladen der notwendigen Funktionen organisiert. Die Zuweisung der Steuerung führt einen anderen Speichertyp in die Architektur ein und dementsprechend einen weiteren Datenübertragungskanal für Sprungtabellen (TP). Es besteht die Möglichkeit weiterer Optimierungen in Bezug auf die Verarbeitung der Übergangstabellen von Automaten und die Steuerung des Rechenvorgangs.

Um TP zu speichern, können Sie den assoziativen Speicher effizienter als herkömmliche Speicher verwenden. [5]. Es ist zwar eine teure Ressource, aber da es in kleinen Mengen benötigt wird, ist sein Einsatz hier völlig gerechtfertigt. Es ist wichtig, dass es hier für seinen vorgesehenen Zweck verwendet wird: den Sprungstring anhand des Namens des Programmzustands zu suchen und den neuen aktuellen Zustand des Programms zu setzen.

Über Parallelität von Prädikaten, Aktionen und Schattengedächtnis

Die Architektur der AP-Programme bildet zusätzlich zur Schaffung zusätzlicher Kanäle parallele Threads der Codeausführung innerhalb des Prozessors. Es bezieht sich auf [загруженным в быструю память] bereits erwähnte Prädikate und Aktionen. Außerdem sind die Prädikate eines Automatenprogramms per Definition parallel. Sie können gleichzeitig alle oder nur diejenigen starten, die im aktuellen Zustand der Maschine notwendig sind.

Bei Aktionen ist die Situation etwas komplizierter. Es ist sinnvoll, nur diejenigen zu laden, die für Übergänge aus dem aktuellen Zustand relevant sind. Davon funktionieren nur die Aktionen der aktiven Transition tatsächlich und übrigens auch parallel. Und um ihre Parallelität korrekt umzusetzen, müssen Aktionen das sogenannte Schattengedächtnis nutzen. Dies ist ein weiterer Speichertyp, der dazu beiträgt, die Effizienz des Computersystems zu verbessern.

Fazit

Der Übergang zu einer Automatenarchitektur negiert nicht die bestehenden Architekturen. Tatsächlich sprechen wir über die Erweiterung des letzteren. Die Koexistenz von Architekturen liegt darin, dass die gewöhnliche Architektur auf der Ebene der Funktionen und die automatische auf der Steuerungsebene arbeitet. Aber auch bei einer Software-Interpretation des Automatenmodells, wie in der aktuellen Situation, ist AP oft effizienter als bestehende Programmierwerkzeuge, trotz der Unterstützung letzterer durch Hardware. Wir sprechen von paralleler Programmierung – Multi-Threaded und Multi-Core.

Ich möchte die Vorläufer der automatischen Architektur erwähnen. Dies sind beispielsweise zellulare Automaten [6]. Ähnliche Prinzipien liegen grafischen Prozessoren zugrunde, und neuronale Netze selbst sind eine Reihe parallel arbeitender Neuronen, die ursprünglich als ziemlich einfache automatische Modelle konzipiert wurden (siehe die Definition von neuronalen Netzen in [7]).

Zusammenfassen. Harvard-Architektur „an den Fingern“ ist etwa dreimal effizienter als die von Princeton. Hinsichtlich der Anzahl der Kanäle sollte der Automat fünfmal effizienter sein als der Princeton-Automat und fast doppelt so effizient wie der Harvard-Automat. All dies jedoch ohne Berücksichtigung der Möglichkeiten der Parallelisierung, die einen noch größeren Beitrag zur Geschwindigkeitssteigerung des Prozessors leisten. Dazu gehört auch die Arbeit mit Management und Schattenspeicher. Aber es gibt noch neue Synchronisationsmechanismen [автоматных] parallele Prozesse basierend auf direktem Zugriff auf ihre Zustände. Dies ersetzt die derzeitigen schwergewichtigen und ineffizienten Synchronisationstechniken (Semaphore, Mutexe usw.). Und schließlich leisten letztere vielleicht den Hauptbeitrag zur Reduzierung der Geschwindigkeit paralleler Programme. Wenn keine Synchronisierung erforderlich wäre, würde die Geschwindigkeit der Berechnungen proportional zur Anzahl der Prozessorkerne steigen. Die Praxis bestätigt jedoch, dass sich moderne Parallelisierung häufiger negativ als positiv auf die Geschwindigkeit von Programmen auswirkt.

Nun, wie sehen Sie jetzt die Zukunft der Prozessoren? Wenn die technologischen Möglichkeiten fast ausgeschöpft sind, ist es vielleicht an der Zeit, die architektonischen Prinzipien der Computerorganisation zu ändern? Oder, genauer gesagt, zu fortgeschritteneren Rechenmodellen übergehen. Das automatische Programmmodell ist ein Beispiel dafür. Gleichzeitig implementiert sie, anders als beispielsweise die gleiche funktionale Programmierung, einen „sanften Modus“ des Übergangs zu einer neuen Denkweise, ohne das bereits durch die Zeit erprobte Programmiermodell aufzugeben.

Anwendung. Ein Beispiel für einen Automatenalgorithmus

Auf Abb. Abbildung 1 zeigt den Steueralgorithmus der Guillotine, der aus dem realen Projekt des Steuersystems für die Metallwalzstraße entlehnt wurde. Funktional unterscheidet es sich nicht wesentlich von seinem Gegenstück während der Französischen Revolution. Der technologische Fortschritt hat Positionssensoren und Steuersignale für elektrische Antriebe hinzugefügt. Und wenn es früher von einer Person kontrolliert wurde (lassen wir seinen Beruf beiseite), werden seine Funktionen jetzt vom Managementsystem ausgeführt. In diesem Beispiel entspricht es zwei interagierenden und parallelen Automaten – Überwachung des Zustands der Guillotine-Sensoren und der eigentlichen Steuerung der Guillotine. Beachten Sie, dass diese Automaten in einem realen System manchmal durch ein paar Dutzend weitere derselben ergänzt werden [параллельных] Maschinen.

Die vorgestellten Automaten demonstrieren die oben beschriebenen Momente der Programmcode-Parallelisierung im Rahmen der Automatenarchitektur. Zum Vergleich des Automatenmodells mit dem aktuellen von Neumann-Modell, Abb. 3 und 4 zeigen Automaten äquivalente Modelle in Form von Blockdiagrammen. Sie demonstrieren, wie ein einfacher Austausch des Steuerungsmodells zu einem qualitativ anderen Programmiermodell führen kann. Vor dem Hintergrund von Blockdiagrammen liegen die Vorteile des Automatenmodells auf der Hand. Nicht zu bedenken, dass der Zustand des Automaten eine Art Parallelisierungspunkte von Algorithmen und Synchronisation paralleler Prozesse ist, und eine solche Möglichkeit zu schätzen, nur Programmierer, deren Gehirn von Multithreading- und “Coroutine”-Denken begeistert ist, sind nicht in der Lage.

Es sollte auch beachtet werden, dass, obwohl ein formales Verfahren bekannt ist, das es jedem Blockdiagramm ermöglicht, einen ihm äquivalenten Automaten zu finden, und folglich [автоматически] Um parallel ausführbare Codeblöcke des Programms zu identifizieren, ist es jedoch wichtig und sinnvoll, zunächst in automatischen Modellen zu „denken“. Genau das implementiert VKPa – Technologien für das objektvisuelle automatische Design von Programmen in der Sprache C ++.

Reis.  1. Guillotine-SteuerungsmodellReis. 1. Guillotine-Steuerungsmodell

Aber auch wenn die Fähigkeiten von Hard- und Software recht begrenzt sind, was beispielsweise der SPS-basierten Programmierung innerhalb des IEC-61131-3-Standards innewohnt (für weitere Details siehe GOST R IEC 61131-3-2016), gibt es sind sehr einfache Tricks, die es Ihnen, wenn auch in begrenztem Umfang, ermöglichen, auch in solchen Fällen die Möglichkeiten von AP zu genießen. All dies hilft, die Möglichkeiten der Automatenarchitektur wirklich „auszuloten“, dabei aber im Rahmen bestehender Programmiersprachen und Hardwarearchitekturen zu bleiben. Aber wir werden uns hoffentlich ein andermal mit der Demonstration und Diskussion darüber befassen.

Reis.  2. Blockdiagramm des Guillotine-SteueralgorithmusReis. 2. Blockdiagramm des Guillotine-Steueralgorithmus Reis.  3. Blockdiagramm des Algorithmus zur Steuerung der Position der Guillotine Reis. 3. Blockdiagramm des Algorithmus zur Steuerung der Position der Guillotine

Literatur

1. Computerarchitektur. [Электронный ресурс]Zugriffsmodus: https://prog-cpp.ru/comp-architecture/, frei. Jaz. Russisch (abgerufen am 18.07.2022).

2. Backus J. Kann die Programmierung von von Neumanns Stil befreit werden? Funktionaler Stil und entsprechende Programmalgebra. [Электронный ресурс]Zugriffsmodus: http://rkka21.ru/docs/turing-award/jb1977r.pdf, frei. Jaz. Russisch (abgerufen am 18.07.2022).

3. Automatisches Modell der Programmsteuerung. [Электронный ресурс], Zugriffsmodus: frei. Jaz. Russisch (abgerufen am 18.07.2022).

4. Rylov S. Programmiersprachen des IEC 61131-3-Standards. [Электронный ресурс]Zugriffsmodus: https://finestart.school/media/programming_languages, frei. Jaz. Russisch (abgerufen am 18.07.2022).

5. Foster K. Assoziative Parallelprozessoren: Per. aus dem Englischen. – M.: Energoizdat, 1981. – 240 S.

6. Toffoli T., Margolus N. Maschinen zellularer Automaten: Per. aus dem Englischen. – M.: Mir, 1991. – 280 S.

7. Minsky M. Berechnungen und Automaten. M.: Mir, 1971. – 364 S.

Similar Posts

Leave a Reply

Your email address will not be published.