Quel est le minimum absolu d'instructions nécessaires pour construire un processeur complet Turing

19

J'ai une idée générale de la façon dont le processeur gère les instructions, mais je passe mon temps à travailler dans des langues principalement de haut niveau. Peut-être que quelqu'un qui travaille plus près du fer peut fournir des informations précieuses.

En supposant que les langages de programmation sont fondamentalement des abstractions de très haut niveau du jeu d'instructions d'un processeur, quel est le jeu d'instructions le plus basique nécessaire pour créer une machine complète turing?

Remarque: Je ne sais rien de la diversité des architectures matérielles mais - pour des raisons de simplicité - supposons qu'il s'agit d'un processeur typique avec une ALU (si nécessaire) et une pile d'instructions. *

Plie d'Evan
la source
Computer Science SE pourrait être un meilleur endroit pour poser des questions similaires. (Inutile de vous y diriger pour le moment.) Question intéressante cependant.
Oskar Skog
À mesure que le nombre d'instructions d'un ISA diminue, la signification du NOMBRE d'instructions diminue également. Les ISA deviennent plus étranges lorsqu'ils ont moins d'instructions qu'un RISC "optimal". Un ISA avec une seule instruction va être bizarre. // Ils deviennent de plus en plus étranges à mesure que le nombre augmente et que l'ISA devient un CISC. // "bizarre" est bien sûr plus ou moins subjectif.
Oskar Skog

Réponses:

35

Il s'avère que vous n'avez besoin que d' une seule instruction pour construire une machine capable de calculer Turing. Cette classe de machines qui n'ont qu'une seule instruction et sont complètes de Turing est appelée One Instruction Set Computers ou aussi en plaisantant Ultimate RISC .

Jörg W Mittag
la source
4
+1 pour obtenir la meilleure réponse possible, à moins qu'une solution à instruction zéro ne soit trouvée (en fait, un ordinateur d'instructions est parfois appelé ordinateur à instruction zéro, car aucune information ne se trouve dans l'instruction elle-même)
Cort Ammon - Reinstate Monica
4
Oui, mais cette instruction n'est pas ce qui rend la machine Turing complète: La magie est dans tous les différents registres spécialisés auxquels l'instruction peut s'adresser. Je pense que votre réponse souligne que le PO assimile "ordinateur" à "architecture Von Neumann", alors qu'en réalité, la catégorie "ordinateurs" est beaucoup plus large que cela.
Solomon Slow
2
@jameslarge La magie n'est pas forcément dans des registres spécialisés. BitBitJump, SBNZ, SUBLEQ et SUBNEG n'ont pas du tout besoin de registres, juste une seule instruction chacun et une mémoire stupide.
8bittree
2
@ 8bittree, Hunh! J'imagine que j'ai oublié que concevoir des architectures étranges mais complètes est un sport de compétition. Quand j'ai lu la réponse de Jörg, je me suis souvenu d'un ami de mes premiers jours (vers 1980-quelque chose) qui prévoyait de construire un "ordinateur à une instruction" à partir de puces de la série 74LS, puis de le programmer pour émuler un DecSystem 10. Je viens de regarder sur la page Wikipedia, et je sais maintenant que sa conception s'appellerait aujourd'hui une "architecture déclenchée par le transport". Je ne sais pas s'il a jamais donné suite.
Solomon Slow
2
@jameslarge: l'Intel MMU est également Turing-complete (en particulier, le mécanisme de trap). C'est en effet très bizarre, cependant, c'est le contraire d'être conçu, c'est un pur accident.
Jörg W Mittag
15

Il existe de nombreuses façons d'implémenter quelque chose dans lequel on peut implémenter une machine de turing.

Comme vous regardez les processeurs, celui qui est le plus applicable est probablement le modèle de machine de registre . Le plus simple d'entre eux (en termes de symboles) est le symbole à deux bandes multiples ( market blank). Si vous optez pour quelque chose de pas tout à fait aussi ésotérique, le inc(r), dec(r)et jz(r,z)(saut si registre rest égal à zéro à l' instruction z) ou clr(r)(clair r), inc, je(i,j,z)(saut si vous inscrire i et j sont égaux à l' instruction z).

J'ai vu une machine d'enregistrement qui est:

  • inc (i, m) - incrémente le registre i et passe à la ligne m
  • jzdec (i, m1, m2) - si le registre i vaut 0 aller à la ligne m, sinon décrémenter i, et aller à la ligne m2

ce qui est également complet - c'est une machine à registres Minsky bien qu'elle ait d'autres contraintes sur les données dans la bande (ce doit être un nombre Gödel stockant l'état plutôt que des registres individuels)

C'est ça. Rien de plus.


Alors, pourquoi ces processeurs ultra-risc ne sont-ils pas utilisés à la place? C'est vraiment difficile d'écrire un compilateur pour eux et vous abandonnez beaucoup d'autres choses que le processeur peut faire. C'est vraiment bien d'avoir un bit à bit and, et addplutôt que d'essayer de tout faire avec des registres d'incrémentation et des boucles. C'est la base d'un langage de programmation préféré intitulé Brainfuck qui a 8 instructions.

  • > incrémenter le pointeur de données
  • < décrémenter le pointeur de données
  • + incrémenter les données au pointeur de données
  • - décrémenter les données au pointeur de données
  • . sortie des données au pointeur de données
  • , lire l'entrée, stocker les données au pointeur de données
  • [si les données au pointeur sont nulles, au lieu de déplacer le pointeur d'instruction vers l'avant, passez-le à la commande après la ]commande correspondante
  • ]si les données du pointeur ne sont pas nulles, au lieu de déplacer le pointeur d'instruction vers l'avant, faites-le revenir à la commande après la ]commande correspondante

On peut trouver des compilateurs pour Brainfuck, bien que ce ne soit vraiment pas amusant de faire des choses même simples. À moins que vous n'aimiez la frustration, qui est le but de la langue.

Lecture connexe:

Communauté
la source
5

Je soupçonne que Post machine est la forme la plus simple d'un appareil complet de Turing. Vous avez besoin d'une alimentation en mémoire adressable par bits, d'un registre d'adresses qui pointe vers l'emplacement actuel des données et de cinq instructions:

  • Réglez le bit à l'emplacement actuel;
  • Réinitialisez le bit à l'emplacement actuel;
  • Passer à l'adresse suivante (incrémenter le registre d'adresses de données);
  • Passer à l'adresse précédente (décrémenter le registre d'adresses de données);
  • Vérifiez le bit à l'emplacement actuel des données.

Je ne pense pas qu'il soit facile d'inventer quelque chose de beaucoup plus simple sur le plan matériel, bien qu'il existe probablement quelque chose d'encore plus réduit.

9000
la source
5

Implémentations

Cette réponse se concentrera sur des implémentations intéressantes de processeurs, compilateurs et assembleurs à jeu d'instructions unique.

movfuscator

https://github.com/xoreaxeaxeax/movfuscator

Compile le code C en utilisant uniquement movdes instructions x86, montrant de manière très concrète qu'une seule instruction suffit.

L'intégralité de Turing semble avoir été prouvée dans un document: https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

subleq

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

Voir également

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

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
3

Quel est le minimum absolu d'instructions nécessaires pour construire un processeur complet Turing?

Jörg W Mittag a dit "un", mais qu'en est-il de zéro?

Pourquoi supposez-vous qu'un "processeur" doit avoir des "instructions"?

Une machine de Turing est un processeur complet de Turing, et elle ne fonctionne pas comme telle sur des "instructions". Il a des règles , mais les règles ne sont pas des instructions extraites d'une mémoire à accès aléatoire.

Quand Alan Turing a imaginé sa machine éponyme, il cherchait le modèle de «calcul» le plus simple possible afin de pouvoir utiliser des techniques mathématiques pour répondre à la question «Qu'est-ce qui est calculable?

Il vous serait difficile de concevoir une machine équivalente à Turing plus simple qu'une machine Turing réelle.

FWIW, le type de processeur auquel vous pensez --- celui qui récupère les instructions de la mémoire, les décode et les exécute, et qui fonctionne sur les données stockées dans le même système de mémoire --- est connu comme une architecture Von Neumann

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

Salomon Slow
la source