Was ist das absolute Minimum an Anweisungen, die zum Erstellen eines vollständigen Prozessors von Turing erforderlich sind?

19

Ich habe eine allgemeine Vorstellung davon, wie der Prozessor mit Anweisungen umgeht, verbringe aber meine Zeit damit, hauptsächlich in Hochsprachen zu arbeiten. Vielleicht kann jemand, der näher am Eisen arbeitet, wertvolle Erkenntnisse liefern.

Angenommen, Programmiersprachen sind im Grunde genommen Abstraktionen auf sehr hoher Ebene des Befehlssatzes eines Prozessors. Was ist der grundlegendste Befehlssatz, der zum Erstellen einer vollständigen Maschine erforderlich ist?

Hinweis: Ich weiß nichts über die Vielfalt der Hardwarearchitekturen, gehe aber der Einfachheit halber davon aus, dass es sich um einen typischen Prozessor mit einer ALU (falls erforderlich) und einem Anweisungsstapel handelt. *

Evan Scholle
quelle
Computer Science SE könnte ein besserer Ort sein, um ähnliche Fragen zu stellen. (Es macht keinen Sinn, Sie zu diesem Zeitpunkt dorthin zu führen.) Interessante Frage.
Oskar Skog
Wenn die Anzahl der Anweisungen einer ISA abnimmt, nimmt auch die Aussagekraft der ANZAHL der Anweisungen ab. ISAs werden seltsamer, wenn sie weniger Anweisungen als ein "optimales" RISC haben. Eine ISA mit nur einer Anweisung wird seltsam sein. // Sie werden auch seltsamer, wenn die Anzahl steigt und die ISA zu einer CISC wird. // "komisch" ist natürlich mehr oder weniger subjektiv.
Oskar Skog

Antworten:

35

Es stellt sich heraus, dass Sie nur eine Anweisung benötigen , um eine Maschine zu bauen, die Turing-fähig ist. Diese Klasse von Maschinen, die nur eine Anweisung haben und vollständig sind, heißt One Instruction Set Computers oder auch Ultimate RISC .

Jörg W. Mittag
quelle
4
+1 für die bestmögliche Antwort, es sei denn, es wird eine Null-Anweisungslösung gefunden (tatsächlich werden Ein-Anweisungscomputer manchmal als Null-Anweisungscomputer bezeichnet, da in der Anweisung selbst keine Informationen gefunden werden)
Cort Ammon - Reinstate Monica
4
Ja, aber dieser eine Befehl ist nicht das, was die Maschine komplett macht. Turing: Die Magie steckt in all den verschiedenen Spezialregistern, die der Befehl ansprechen kann. Ich denke, Ihre Antwort weist darauf hin, dass das OP "Computer" mit "Von Neumann-Architektur" gleichsetzt, obwohl die Kategorie "Computer" viel weiter gefasst ist.
Solomon Slow
2
@jameslarge Die Magie ist nicht unbedingt in spezialisierten Registern. BitBitJump, SBNZ, SUBLEQ und SUBNEG benötigen überhaupt keine Register, nur jeweils einen Befehl und keinen Speicher.
8bittree
2
@ 8bittree, Hunh! Ich habe wohl vergessen, dass das Entwerfen komischer, aber kompletter Architekturen ein Wettkampfsport ist. Als ich Jörgs Antwort las, erinnerte ich mich an einen Freund aus meiner Anfangszeit (um 1980), der plante, einen "Ein-Befehl-Computer" aus Chips der 74LS-Serie zu bauen und ihn dann so zu programmieren, dass er ein DecSystem 10 emuliert auf der Wikipedia-Seite, und ich weiß jetzt, dass sein Design heute als "Transport Triggered Architecture" bezeichnet wird. Ich weiß nicht, ob er jemals nachgefolgt ist.
Solomon Slow
2
@jameslarge: Die Intel MMU ist ebenfalls Turing-komplett (insbesondere der Trap-Mechanismus). Es ist in der Tat sehr seltsam, aber es ist das Gegenteil von Design, es ist ein reiner Zufall.
Jörg W Mittag
15

Es gibt viele Möglichkeiten, etwas zu implementieren, in das man eine Turing-Maschine implementieren kann.

Bei Prozessoren ist wahrscheinlich das Registermaschinenmodell am besten geeignet . Das einfachste von diesen (in Bezug auf Symbole) ist das Multiband-Zwei-Symbol ( markund blank). Wenn Sie sich für etwas entscheiden, das nicht ganz so esoterisch ist, können Sie die Befehle inc(r), dec(r)und jz(r,z)(Sprung, wenn das Register rNull ist z) oder clr(r)(Löschen r) inc, je(i,j,z)(Sprung, wenn die Register i und j gleich dem Befehl z sind) verwenden.

Ich habe die Erwähnung einer Registriermaschine gesehen, die ist:

  • inc (i, m) - Inkrementiere das Register i und gehe zu Zeile m
  • jzdec (i, m1, m2) - Wenn das Register i 0 ist, gehe zu Zeile m, sonst dekrementiere i und gehe zu Zeile m2

Das ist auch komplett - es ist eine Minsky-Registermaschine, obwohl es andere Einschränkungen für die Daten auf dem Band gibt (es muss eine Gödel-Nummer sein, die den Zustand und nicht einzelne Register speichert).

Das ist es. Nichts mehr.


Warum werden diese Ultra Risc-Prozessoren nicht stattdessen verwendet? Es ist ein echtes Problem, einen Compiler für sie zu schreiben, und Sie geben viele andere Dinge auf, die der Prozessor tun kann. Es ist wirklich schön, ein bitweises zu haben andund addnicht zu versuchen, alles mit inkrementierenden Registern und Schleifen zu tun. Das ist die Basis einer bevorzugten Programmiersprache mit dem Titel Brainfuck, die 8 Anweisungen enthält.

  • > Inkrementieren Sie den Datenzeiger
  • < Dekrementieren Sie den Datenzeiger
  • + Inkrementieren Sie die Daten am Datenzeiger
  • - Dekrementieren Sie die Daten am Datenzeiger
  • . Die Daten werden am Datenzeiger ausgegeben
  • , Leseeingang, Speichern der Daten am Datenzeiger
  • [Wenn die Daten am Zeiger Null sind, anstatt den Befehlszeiger um eins vorwärts zu bewegen, springen Sie vorwärts zum Befehl nach dem übereinstimmenden ]Befehl
  • ]Wenn die Daten am Zeiger ungleich Null sind, anstatt den Befehlszeiger vorwärts zu bewegen, springen Sie zum Befehl nach dem übereinstimmenden ]Befehl zurück

Man kann Compiler für Brainfuck finden, obwohl es wirklich keinen Spaß macht, auch nur einfache Dinge darin zu machen. Es sei denn, Sie genießen die Frustration, die der Zweck der Sprache ist.

Verwandte Lesung:

Gemeinschaft
quelle
5

Ich vermute , dass Beitrag Maschine über die einfachste Form eines Turing-complete - Geräts ist. Sie benötigen einen bitadressierbaren Speicher, ein Adressregister, das auf die aktuelle Datenposition verweist, und fünf Anweisungen:

  • Setzen Sie das Bit an der aktuellen Position.
  • Setzen Sie das Bit an der aktuellen Position zurück.
  • Zur nächsten Adresse gehen (Datenadressregister inkrementieren);
  • Zur vorherigen Adresse gehen (Datenadressregister dekrementieren);
  • Überprüfen Sie das Bit an der aktuellen Datenposition.

Ich denke nicht, dass es einfach ist, Hardware einfacher zu erfinden, obwohl es wahrscheinlich etwas noch Reduzierteres gibt.

9000
quelle
5

Implementierungen

Diese Antwort konzentriert sich auf interessante Implementierungen von CPUs, Compilern und Assemblern mit einem Befehlssatz.

movfuscator

https://github.com/xoreaxeaxeax/movfuscator

Kompiliert C-Code nur mit movx86-Anweisungen und zeigt auf sehr konkrete Weise, dass eine einzelne Anweisung ausreicht.

Die Vollständigkeit von Turing scheint in einem Artikel nachgewiesen worden zu sein: https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

subleq

https://esolangs.org/wiki/Subleq :

Siehe auch

/programming/3711443/minimal-instruction-set-to-solve-any-problem-with-a-computer-program/38523869#38523869

Ciro Santilli ist ein Schauspieler
quelle
3

Was ist das absolute Minimum an Anweisungen, um einen Turing-Komplettprozessor zu erstellen?

Jörg W. Mittag sagte "Eins", aber wie wäre es mit Null?

Warum nehmen Sie an, dass ein "Prozessor" "Anweisungen" haben muss?

Eine Turing-Maschine ist ein Turing-Komplettprozessor und arbeitet nicht mit "Anweisungen" als solchen. Es hat Regeln , aber die Regeln sind keine Anweisungen, die aus einem Arbeitsspeicher abgerufen werden.

Als Alan Turing sich seine gleichnamige Maschine ausgedacht hatte, suchte er nach einem möglichst einfachen "Rechenmodell", um die Frage "Was ist berechenbar?" Mit mathematischen Methoden beantworten zu können.

Es würde Ihnen schwer fallen, eine Turing-äquivalente Maschine zu entwickeln, die einfacher ist als eine tatsächliche Turing-Maschine.

FWIW, der Prozessortyp, an den Sie denken - ein Prozessor, der Anweisungen aus dem Speicher abruft, sie decodiert und ausführt und mit Daten arbeitet, die im selben Speichersystem gespeichert sind - ist als Von Neumann-Architektur bekannt

https://en.wikipedia.org/wiki/Von_Neumann_architecture

Solomon Slow
quelle