Que se passe-t-il si vous effectuez un speedrun en créant un processeur ?
Habituellement, la conception d’un processeur est un processus long, surtout si vous créez également un nouvel ISA. C’est quelque chose qui peut prendre des mois, voire des années, avant que le code soit exécuté pour la première fois. Et si ce n’était pas le cas ? Et si l’on essayait de rendre un processeur aussi rapide qu’humainement possible ? C’est ce que je me suis demandé il y a quelques semaines.
Entrez le Processeur « tuyau de poêle » (Je n’ai pas d’explication pour ce nom autre que le fait que j’en avais « besoin »). Le matériel de Stovepipe a été réalisé en moins de 4 heures, à l’exclusion de quelques petites corrections de bugs. J’ai commencé par concevoir l’ISA, qui est l’ISA la plus simple que j’ai jamais réalisée. Au lieu d’ajouter continuellement des éléments pour le rendre plus utile, j’ai supprimé des éléments qui n’étaient pas strictement nécessaires jusqu’à ce que je sois satisfait. Finalement, il ne restait plus que 8 opcodes majeurs et seulement 512 bits pour tout représenter. C’est bien moins que Processeur GR8 (8192 bits), mon précédent dans cette classe de CPU, et toujours moins que [Ben Eater]Le processeur de la planche à pain (2048 bits), qui est en réalité moins flexible que Stovepipe. Tout cela en prenant beaucoup moins de temps à créer que l’un ou l’autre processeur plus grand. Comment cela se compare-t-il aux autres processeurs ? Et : Comment est-ce possible ?
Stovepipe a été fabriqué à des vitesses vertigineuses
Comme je l’ai dit plus tôt, le matériel de Stovepipe était terminé après seulement 4 heures. Ajoutez encore 2 heures au total pour l’assembleur que j’ai réalisé par la suite, pour un total de 6 programmes compris, répartis sur une semaine. J’estime que le GR8CPU a été conçu à l’origine en un peu plus d’un an, outils compris, lors d’après-midis occasionnels après l’école consacrés à la conception. Cette période est notamment plus de 50 fois plus longue que la semaine sur laquelle Stovepipe s’est étalée. Dans une optique similaire, le produit minimum viable de Boa³² (RV32I) a été achevé en presque exactement deux mois, soit environ 8 semaines. Pourtant, 8 fois plus de temps que la fabrication de Stovepipe. Je n’ai pas de chiffres concrets bien sûr mais je pense que le temps réel passé en heures est encore pire pour le GR8CPU et le Boa³² ; presque certainement plus de 50x et 8x les heures (donc 300 et 48 au strict minimum) respectivement. Comment est-ce possible ?
Parce que c’est un simple processeur
Une partie de cela, bien sûr, est l’expérience. GR8CPU, qui est apparu sur Hackaday bien avant que je sois écrivain, était ma deuxième microarchitecture et [Ben Eater] Je n’ai pas vraiment commencé à étudier les processeurs immédiatement après sa série YouTube, comme je l’ai fait. Cependant, Stovepipe est aussi un exercice de minimalisme ; contrairement au GR8CPU et [Ben Eater]Dans ce cas, le seul registre accessible à l’utilisateur est l’accumulateur et chaque calcul avec un deuxième opérande doit gérer la mémoire. Il dispose de 256 octets de RAM, à égalité avec le GR8CPU, mais aucun port d’E/S d’aucune sorte ; toutes les E/S doivent être mappées en mémoire. Les instructions Stovepipe prennent 1 cycle pour être récupérées et 1 à 3 pour être exécutées (sauf NOP, qui prend 0 cycle pour s’exécuter). À égalité avec GR8CPU et [Ben Eater]’s, il a un indicateur d’exécution et un indicateur zéro.
Comparez cela à mon processeur précédent le plus récent, Boa³² (une implémentation RISC-V), qui est plus grande d’une quantité apparemment extrême bien qu’elle soit à peu près aussi puissante que les microcontrôleurs modernes. Il est 32 bits, dispose de 31 registres à usage général, dont 3 sont généralement utilisés à des fins spéciales, d’un espace d’adressage complet de 4 Go, dont 512 Ko contiennent de la RAM, des multiplications/divisions matérielles et des atomes, etc. Et plus important encore, il est pipeline et a des bus d’adresses et de données séparés, contrairement à Stovepipe, GR8CPU et [Ben Eater]qui sont toutes des architectures multi-cycles à bus unique avec un registre d’adresses dédié.
Mais comment ça marche ?
Comparons deux programmes : Calculer la séquence de Fibonacci et multiplier un nombre de 8 bits ; sur trois processeurs : Stovepipe, GR8CPU et Boa³². Je l’écrirai en assembleur pour les trois, en ignorant la multiplication du matériel de Boa³² pour que ce soit juste. Dépoussiérons un petit instant les vieux projets, d’accord ?
Processeur | Configuration de multiplication | Multiplier la boucle | Mise en place de Fibonacci | Boucle de Fibonacci |
---|---|---|---|---|
Processeur GR8 | 27 | 22-38 | 24 | 40 |
Boa³² | 2 | 7-8 | 3 | 8 |
Tuyau de poêle | 18 | 22-29 | 15 | 27 |
À ma grande surprise, le GR8CPU fonctionne en fait bien moins bien que Stovepipe, principalement parce qu’il a besoin de 3 cycles pour charger une instruction par rapport au 1 de Stovepipe. D’un autre côté, à la surprise de tous, Boa³² essuie le sol avec Stovepipe et GR8CPU en raison de son 32 registres et nature pipeline. Il exécute la plupart des instructions en un seul cycle réparti sur son pipeline en 5 étapes.
Conclusion
Essayer d’accélérer la création d’un processeur a clairement été un succès compte tenu de sa portée ; en seulement 4 heures au total, j’ai créé un processeur qui surpasse mon ancien processeur 8 bits tout en étant beaucoup plus petit. L’ensemble de l’exercice montre que plus simple est parfois mieux, mais pas toujours, car le Boa³² optimisé en vitesse bat facilement le Stovepipe optimisé en taille dans une victoire écrasante en termes de performances. Cependant, Stovepipe démolit complètement la plupart des processeurs que je connais en termes de taille ; [Ben Eater]Les processeurs GR8CPU et les processeurs plus connus comme le 8086, le 6502, le z80, etc. sont tous facilement vaincus par Stovepipe à cet égard. Ce n’est cependant pas un record du monde ; Je crois que [olofk]c’est SERVIR Le processeur est plus petit que Stovepipe, bien que je ne puisse pas faire de comparaison directe car Stovepipe n’existe que dans un simulateur logique.
Au fait : si jamais je fais un Stovepipe 2, j’enregistrerai tout le temps avec un véritable chronomètre speedrun 😉