Kannagi, rĂ©cemment interrogĂ© sur son SDK pour Neo Geo, travaille sur un nouveau concept de processeurâŻ: lâAltairX a pour but de concilier au maximum coĂ»t, facilitĂ© de conception et performance.
Câest un processeur VLIW, ce qui veut dire que câest le compilateur qui a en charge une bonne partie de lâoptimisation, ce qui permet une conception plus facile avec moins de transistors quâun processeur classique.
Sommaire
- Préambule
- PrĂ©sentation de lâAltairX
-
Interview de Kannagi
- Pourquoi un nouveau CPU et pas le RISC-V�
- Quelles sont les évolutions possibles�
- LâAltairX pourrait-il devenir un GPUâŻ?
- Quid du hardware autour�
- Est-ce que lâAltairX demande aussi de revoir la conception des couches plus hautes (compilateur, langage, OS)âŻ?
- Comment pensez-vous fabriquer lâAltairXâŻ? Est-ce vous travaillez avec des constructeursâŻ?
- Mais fonctionner Ă quelle vitesseâŻ? Est-ce que « lâimitation est parfaite », ou alors y a-t-il tout de mĂȘme des choses quâon ne voit pasâŻ?
- Mais se pose la question de lâusage, nonâŻ? Car le processeur sans carte mĂšre ne sert Ă rien. Nâest-ce pas tout un Ă©cosystĂšme Ă bĂątir, ou pourrait-on commencer avec des petites cartes simplesâŻ?
- Est-ce quâil est prĂ©vu de mettre en place une association ou une fondation Ă terme pour piloter le projet, comme câest dĂ©jĂ le cas pour RISC-V ou OpenPowerâŻ?
- Que souhaitez-vous dire aux lecteurs de LinuxFR en conclusion�
Préambule
Cet article est complexe avec beaucoup de vocabulaire technique en anglais. Vous pouvez consulter la page CPU, nouvellement créée dans le wiki de Linuxfr pour bien comprendre le fonctionnement des processeurs et des architectures modernes.
Si vous connaissez bien les processeurs, nâhĂ©sitez pas Ă enrichir ce wiki ou Ă commenter cette dĂ©pĂȘche pour donner des explications Ă tout le monde.
PrĂ©sentation de lâAltairX
Approche de ce CPU
LâAltairX tente dâavoir de bonnes performances, tout en conciliant simplicitĂ© dâimplĂ©mentation et Ă©conomie de transistors et dâĂ©nergie. Pour cela, il dĂ©charge la complexitĂ© vers le compilateur, qui gĂšre et indique les diverses optimisations Ă effectuer. Câest aussi le compilateur qui indique le nombre dâinstructions Ă exĂ©cuter en parallĂšle de façon explicite : ici, deux instructions par cycle.
LâAltairX pourrait trĂšs bien faire quatre instructions par cycle et ĂȘtre meilleur que les Ryzen Zen 5 ou Intel 13900, mais comme il est trĂšs compliquĂ© dâavoir autant dâinstructions en parallĂšle de maniĂšre statique1 sur un processeur gĂ©nĂ©raliste, Kannagi a dĂ©cidĂ© de le faire Ă deux instructions par cycle pour le moment, car une plus grande complexitĂ© nâamĂšne que des gains minimes : avec plus dâinstructions par cycle, il faudrait trouver constamment des instructions Ă exĂ©cuter pour exploiter au maximum le CPU.
Sur un processeur gĂ©nĂ©raliste, le processeur a souvent tendance Ă sâarrĂȘter sur un if et surtout, câest beaucoup moins parallĂ©lisable (on ne fait pas constamment du multimĂ©dia, mais on traite du code avec Ă©normĂ©ment de structure de contrĂŽle if, else, switch). On considĂšre gĂ©nĂ©ralement quâun code binaire a 20% de branchement (une instruction sur cinq). Câest pour cela que, mĂȘme les processeurs rĂ©cents dâAMD ou Intel ne dĂ©passent pas trois ou quatre instructions par cycle en moyenne. Deux instructions par cycle restent trĂšs honorables, et donnent de bonnes performances.
LâAltairX a 64 registres : 56 registres «âŻrĂ©elsâŻÂ» et 8 registres spĂ©ciaux qui servent pour le bypass. Le bypass est une technique dâoptimisation qui intervient dans la premiĂšre des quatre grandes tĂąches dâoptimisation :
- Résoudre les dépendances de données
- Paralléliser les instructions
- Optimiser les conditions
- Optimiser les caches
La rĂ©solution des dĂ©pendances sâoptimise soit via le renommage de registre, soit via le bypass. Le renommage de registre sert quand on a les mĂȘmes registres utilisĂ©s dans deux opĂ©rations, mais pas rĂ©ellement de dĂ©pendance entre elles. Dans ce cas, on peut renommer les registres pour rĂ©soudre le problĂšme. Le principe du bypass est quâon ne passe pas par les registres, et quâon lie deux unitĂ©s de calcul directement pour Ă©viter que le CPU se bloque le temps de lire/Ă©crire les registres entre les deux instructions. La difficultĂ© du bypass est quâil demande au processeur pas mal dâanalyse pour quâil le fasse de lui-mĂȘme, et que le dĂ©bogage peut ĂȘtre fastidieux. Donc, sur lâAltairX le bypass est explicite ; câest au compilateur de bien savoir lâutiliser, lâimplĂ©mentation ne fait aucune vĂ©rification.
Pour les conditions, lâAltairX nâa aucune prĂ©diction de branchement. La raison est que son pipeline est court (six Ă©tapes, ou stages, dĂ©taillĂ©s ci-dessous), ce qui fait que les branchements ont un coĂ»t de un Ă cinq cycles (tout dĂ©pend de comment le compilateur arrive Ă optimiser). Câest relativement faible vu quâune mauvaise prĂ©diction sur le x86 fait environ vingt cycles.
Ce choix de ne pas faire de prĂ©diction de branchement est un compromis pour faciliter lâimplĂ©mentation.
Ă la place de la prĂ©diction de branchement, les conditions sont en delay slot, ce qui veut dire que tout le branchement sâexĂ©cute avec un cycle de retard. Pour optimiser un peu les branchements, deux instructions sont rajoutĂ©es : un CMOVE qui est un move conditionnel, et lâinstruction LOOP, qui permet dâexĂ©cuter un for assez rapidement.
GenĂšse
Souvent déçu par x86 et son architecture quâil trouve mal faite, mais aussi par la complexitĂ© de la programmation sur PS2 et PS3, Kannagi sâest inspirĂ© du MIPS, des VU de la PS2, du CELL de la PS3, dâune partie de l'ARM et du M68000 pour la syntaxe.
Le nom combine une étoile et un X pour se démarquer et faire référence systÚme Unix ou la lettre X est souvent utilisée.
LâISA de lâAltairX
L'ISA, acronyme dâInstruction Set Architecture, câest lâarchitecture du processeur. LâISA de lâAltairX est assez simple :
- il y a 1 bit de pairing pour indiquer une ou deux instructions par cycle,
- 7 bits pour lâopcode, cette taille permet 128 instructions, ce qui est un peu limite â câest un peu son «âŻdĂ©fautâŻÂ» et Kannagi sâarrache les cheveux pour trouver des solutions avec cette contrainte ;
- 2 bits pour indiquer la taille des opĂ©rations (8/16/32/64 bits) â câest lâĂ©quivalent de faire un Â
char
short
int
long
en C ou unu8
u16
u32
u64
en Rust. - et 3 x 6 bits pour les registres.
Les instructions sur le premier et le second Opcode peuvent ĂȘtre diffĂ©rentes, câest un avantageâŻ! Du coup lâAltairX tourne autour de 150-160 instructions diffĂ©rentes (instruction SIMD compris).
Les VLIW fonctionnent avec des bundles (un groupe dâinstructions). LâAltairX a un groupe de deux instructions, donc on dispose de 64 bits. Mais lâavantage du bundle, câest que lâon peut combiner les deux instructions soit pour en faire une plus Ă©voluĂ©e, soit pour faire des immĂ©diates plus grandes. Attention Ă ne pas confondre la taille de lâinstruction et celle des opcodes, par exemple sur le RISC-V les instructions font 32 bits, lâopcode bien moins.
Les caches de lâAltairX
La plupart des architectures gĂšrent les caches de façon conventionnelle et ne sortent pas des sentiers battus. Pourtant les caches sont primordiaux et il est important dâinventer des façons plus originales, voire carrĂ©ment «âŻexotiquesâŻÂ» de les gĂ©rer. LâAltairX possĂšde ainsi trois «âŻcachesâŻÂ» ou pour ĂȘtre plus exact deux caches plus un SPM ou scratchpad memory :
- Le CPU a un cache lecture et un cache Ă©criture. Pourquoi celaâŻ? Dâune part parce que ça permet dâavoir une lecture bien plus rapide, et dâautre part parce que ça Ă©vite de vider le cache inutilement en cas de lecture seule. Une chose dĂ©rangeait Kannagi avec les optimisations sur PC x86, câest que lorsquâon a une grosse quantitĂ© de donnĂ©es Ă gĂ©rer (par exemple 32 Mo), on va «âŻvider le cacheâŻÂ» pour y mettre ces donnĂ©es et tout le reste sera ralenti.
- Le SPM est une version trĂšs manuelle des caches. Un cache est gĂ©nĂ©ralement automatique et transparent, mĂȘme si vous codez en assembleur vous ne savez pas exactement ce qui est en cache ou pas. Le SPM permet de dire ce que vous voulez y mettre. Lâavantage «âŻultimeâŻÂ» câest que le SPM nâa jamais de dĂ©faut de cacheâŻ! Comme dans beaucoup de consoles, le SPM de lâAltairX fonctionne avec un DMA, ce qui prĂ©sente beaucoup dâavantages : on peut en faire un double buffer pour gĂ©rer ses donnĂ©es, ne pas avoir de cache miss et ne pas avoir Ă vider le cache.
Les CPU Intel et AMD utilisent du 8 way pour les caches L1, les caches L2 sont du 8 ou 16 way et les caches L3 du 16 way. Cela rend ces caches trĂšs performants avec peu de conflits dâadresses, mais ce sont aussi des caches relativement lents. Pour lâAltairX, Kannagi envisage idĂ©alement du 4 way (ou 2 way au pire). Sur les premiĂšres versions de lâAltairX, il nây aura que des caches L1. Kannagi ne compte pas mettre de L3, car plus vous avez de niveaux de cache, plus cela ralentit les accĂšs Ă la RAM. De la mĂȘme façon, Apple pour les M1 et M2 nâutilise pas non plus de cache L3.
Il existe bien sĂ»r pas mal dâalgorithmes de cache, celui de lâAltairX utilisera le PLRUm.
Lâarchitecture de lâAltairX
Lâarchitecture interne de lâAltairX se dĂ©compose en six Ă©tapes exĂ©cutĂ©es en parallĂšle (voir lâexemple de la bouteille) :
- Fetch
- Decode / Execute BRU
- Read Register
- Execute
- Memory
- Write Back
La diffĂ©rence avec un MIPS (de cinq stages) câest le Read Register : celui de lâAltairX sera forcĂ©ment plus «âŻlongâŻÂ», parce quâon a beaucoup de registres Ă lire et Ă Ă©crire. Mais aussi pour quâil puisse monter facilement en frĂ©quence. Reprenons le pipeline :
- Le Fetch est donc capable de fournir 64 bits (8 octets) par cycle pour fournir deux instructions.
- Ensuite le Decode relativement simple, mais le Decode gĂšre aussi les branchements en lisant un register flag interne et/ou des registres internes au BRU.
- Le Register fait donc six lectures et deux Ă©critures de registre par cycle.
- Execute exĂ©cute les instructions Ă proprement parler donc ALU/LSU ici, sur le LSU il gĂ©nĂšre lâadresse.
- Memory lit le cache L1 (sâil nây a pas de cache miss, sinon ça fait plus dâun cycle), sur lâALU cette Ă©tape est vide.
- Write Back indique la fin du pipeline et lâenvoi de lâĂ©criture du registre.
Ensuite lâAltairX a deux ALU, deux LSU, deux FPU, un BRU (Branch Unit), un MDU (MulDiv Unit), un EFU (Extent Float-point Unit, pour les 'div', 'sqrt', 'sin', etc.), un FPU-D (FPU pour les doubles) et un DMA. Ă titre de comparaison un processeur AMD dispose de quatre ALU, quatre «âŻLSUâŻÂ» (AppelĂ© AGU) et quatre FPU.
Dans un premier temps, le FPU ne respectera pas Ă 100% le standard IEEE, parce que le respecter totalement prendrait trop de cycles. Plus tard, lâAltairX gĂšrera peut-ĂȘtre les half float (float de 16 bits).
Quelques CPU remarquables qui ont inspirĂ© lâAltairX
Trois processeurs ont tenté des approches trÚs différentes de ces problÚmes :
Beaucoup ne le savent pas mais lâEmotion engine et le CELL sont trĂšs ressemblants. Bien sĂ»r ce nâest pas la mĂȘme ISA : lâun est sur du MIPS avec des VU et lâautre sur du PowerPC avec des SPE. Mais le principe est le mĂȘme : un processeur «âŻstandardâŻÂ» superscalaire in order et dâautres processeurs VLIW. Ces processeurs VLIW tentaient de rĂ©soudre un problĂšme existant dĂ©jĂ Ă lâĂ©poque : «âŻla latence de la RAMâŻÂ».
Lâexploit quâarrivent Ă rĂ©aliser ces machines est quâil est possible dâatteindre leur chiffre thĂ©orique, parce que la SPM (une mĂ©moire interne dont il sera question plus loin dans cette dĂ©pĂȘche) ne provoque aucun dĂ©faut de cache. De plus ces processeurs VLIW sont bien conçus pour permettre facilement deux instructions par cycle, y compris avec une division dessus.
Le souci câest quâil Ă©tait compliquĂ© de coder dessus ; et surtout ils nâavaient pas vocation Ă ĂȘtre des processeurs gĂ©nĂ©ralistes.
LâItanium est vraiment unique : il a crĂ©Ă© un type de micro architecture Ă lui tout seul. Il avait des bundles (un groupe d'opcode) de 128 bits pouvant exĂ©cuter trois instructions par cycle, voire plus (Ă©tant en partie superscalaire, il pouvait exĂ©cuter deux bundles par cycle, soit six instructions par cycle).
Le CELL et LâItanium ont deux visions diffĂ©rentes, le CELL voulait Ă©viter les cache miss, et lâItanium exploser le compteur dâinstructions par cycle. Mais les deux avaient le mĂȘme souci, un compilateur beaucoup trop complexe qui nâarrivait pas Ă gĂ©rer leur architecture exotique. Pourtant, ce sont ces processeurs qui ont donnĂ© Ă Kannagi lâidĂ©e de son processeur AltairX, suivant deux axes :
- sâinspirer des processeurs dĂ©diĂ©s aux consoles et en faire des processeurs gĂ©nĂ©ralistes ;
- faire une ISA pas trop complexe mais qui permet nĂ©anmoins dâavoir des informations du compilateur pour optimiser au mieux.
Interview de Kannagi
Pourquoi un nouveau CPU et pas le RISC-V�
Alors de base on pourrait souvent me dire « pourquoi tu nâutilises pas du RISC-V ? » Je ne suis pas un fan inconditionnel du RISC, pour la simple raison que pour moi lâISA doit reprĂ©senter en partie le fonctionnement interne du processeur. De plus, jâai toujours une prĂ©fĂ©rence pour MIPS et je trouve quâon fonde peut-ĂȘtre trop dâespoirs pour «âŻrienâŻÂ» sur le RISC-V qui est un MIPS mis au goĂ»t du jour. En second point, RISC-V se veut trop «âŻsimplisteâŻÂ».
Vous avez surement entendu dire que le RISC ne fait que des trucs simplistes, et le CISC non. Oui et non, mais ceux qui conçoivent RISC-V (qui sont aussi les gĂ©niteurs du RISC) restent attachĂ©s Ă cette idĂ©e. Câest une critique rĂ©currente que reçoit RISC-V : il se veut trop simpliste, il veut toucher Ă la fois les microcontrĂŽleurs et les ordinateurs haute performance, tout en Ă©tant facile Ă Ă©muler et pĂ©dagogique.
Alors il réussit pas mal de ces choses, mais bien sûr au prix de beaucoup de compromis. Si vous voulez mon avis, je pense que ARM restera un RISC bien plus performant que le RISC-V, il est bien plus pragmatique dans sa conception.
L'ISA du RISC-V est loin dâĂȘtre parfaite. Je vais Ă©viter les diffĂ©rents points que beaucoup trouvent «âŻproblĂ©matiquesâŻÂ», mais ceux qui conçoivent RISC-V rĂ©pondent : «âŻpas de souci, en Out of Order on rĂ©soudra ces dĂ©fautsâŻÂ». Alors oui câest vrai, ils nâont pas tort, le x86 y arrive trĂšs bienâŻ! Mais du coup quel intĂ©rĂȘt de faire du RISC-V en se disant «âŻpas grave en y allant au bazooka on y arriveraâŻ!»âŻ?
Lâautre point est que le RISC-V se dit open-source, ce qui est exact pour l'ISA, mais pas pour son implĂ©mentation. Comme je lâavais dit, câest un peu comme dire que lâAPI Linux est open source, mais que son code source ne lâest pas. Câest un peu ça le souci du RISC-V vendu «âŻopen sourceâŻÂ» pour le hardware. Et donc que lâISA soit «âŻouverteâŻÂ» de mon point de vue nâest pas trĂšs importantâŻ? Il existe de nombreuses ISA ouvertes maintenant (Open RISC, openPower, openSparc, mĂȘme le MIPS rĂ©cemmentâŻ!).
Et le point forcĂ©ment qui me gĂȘne le plus, le RISC-V nâest pas forcĂ©ment un bon processeur in-order. Et sa seule proposition alternative est donc de faire du superscalaire out of order, technologie relativement complexe et coĂ»teuse Ă faire. Jâai pu lire ici entre autres que SiFive sera le futur IntelâŻ? Alors je ne le pense pas. Câest lĂ tout le souci, si demain Intel ou AMD veulent faire du RISC-V, ils pourront le faire, et bien mieux que nâimporte quelle entreprise actuelle. Cela fait 30 ans quâils font du Superscalaire Out of Order pour les hautes performances, ils ont crĂ©Ă© un gros fossĂ© pour le ticket dâentrĂ©e dans ce genre de technologie.
Quelles sont les évolutions possibles�
Mon processeur est loin dâĂȘtre parfait, le souci du VLIW câest quâon atteint vite ses limites thĂ©oriques. Dans mon cas, deux instructions par cycle, et ensuiteâŻ? On pourrait faire quatre ou huit instructions par cycle, mais comme dit plus haut ça ne servirait pas Ă grand-chose. Comme expliquĂ© avant, de façon statique pour un CPU gĂ©nĂ©raliste, quatre instructions serait «âŻcorrectâŻÂ», mais resterait limitĂ©. On aurait des gains ici et lĂ , mais probablement pas satisfaisants Ă mon avis. A huit ça augmenterait encore plus la complexitĂ© du processeur, pour des gains trĂšs minimes.
LâexpĂ©rience de lâItanium est pour moi intĂ©ressante, câĂ©tait un VLIW «âŻĂ©voluĂ©âŻÂ» qui pouvait fournir six instructions par cycle. Et pourtant, mĂȘme comparĂ© aux Intel 3xxx, par exemple, qui ne fournissaient pas un IPC trĂšs Ă©levĂ© en moyenne (autour de une ou deux instructions/cycle), lâItanium ne faisait pas beaucoup mieux. Alors, certes il Ă©tait trĂšs dĂ©pendant du compilateur, mais il montre que cette approche, de façon statique Ă six instructions par cycle, nâest pas satisfaisante parce que les gains ne sont pas «âŻproportionnelsâŻÂ» au nombre dâinstructions par cycle.
Câest pour cela que je nâai pas envie dâavoir la mĂȘme approche (faire un VLIW 4/8 ou plus) et faire les mĂȘmes erreurs.
Une autre idĂ©e est de gĂ©rer deux instructions de façon statique et les deux autres de façon dynamique. Il y a des cas (une boucle/condition) oĂč il est un peu plus compliquĂ© de gĂ©rer les instructions statiquement. Sauf si vous dĂ©pliez la boucle, mais lĂ vous vous trouvez avec un gros dĂ©pliage.
Alors la version que je veux faire Ă©voluer est ce quâon peut appeler de lâEPIC. LâEPIC est un mĂ©lange entre VLIW et superscalaire.
Je veux intĂ©grer aussi un «âŻwindowâŻÂ» pour fenĂȘtre dâexĂ©cution. Cela me permettrait de connaĂźtre Ă lâavance le code, et donc de le traiter plus facilement (et aussi que les boucles inconditionnelles soient gĂ©rĂ©es bien avant). Cela me permet plusieurs gains : une meilleure optimisation des boucles, monter plus facilement Ă trois ou quatre instructions par cycle, des caches miss et des blocages du processeur moins pĂ©nalisants, etc.
Bien sĂ»r pour ce genre dâarchitecture tout est à «âŻinventerâŻÂ», on ne peut pas trop sâinspirer dâun processeur existant vu le peu dâexistant justement.
LâAltairX pourrait-il devenir un GPUâŻ?
Alors jâavais prĂ©vu de faire un GPU aussi. Faute de temps, je nâai pas eu le temps de mâen occuper. Disons que je privilĂ©gie un GPU relativement spĂ©cifique, un GPU qui ne serait quâen lecture seule, et ne permettrait dâĂ©crire que via le SPM ou un PPU (pour Pixel Process Unit). Le but Ă©tant que le fillrate (donc le remplissage de pixels) et le calcul soient en parallĂšle.
Le souci dâun GPU, câest que câest forcĂ©ment «âŻgrosâŻÂ», du coup je rĂ©flĂ©chis Ă faire une version plus «âŻpetiteâŻÂ». Une rĂ©flexion est de tout faire en float 16 bits, ça serait Ă testerâŻ! Mais comme jâaimerais un GPU par dĂ©faut sur mon CPU, il faudrait un GPU petit mais assez puissant quand mĂȘme.
Un autre point, je ne compte pas forcĂ©ment le rendre «âŻcompatibleâŻÂ» OpenGL. Le seul point que je tenterai de faire, câest de le rendre compatible OpenGL 2 ES et Vulkan.
Quid du hardware autour�
Un autre point qui me tient Ă cĆur est aussi lâarchitecture autour du processeur sur laquelle je travaille, je trouve que cela est presque aussi important. Jâai toujours trouvĂ© cela dommage quâil nây ait pas de machine Ă la fois «âŻsimple et efficaceâŻÂ», en termes de hardware. Cela est rarement mis en avant vu que, en gĂ©nĂ©ral, la programmation de driver est seulement faite par une poignĂ©e de personnes, et au pire on laisse cela Ă lâOS.
Câest aussi le gros souci Ă mon sens du PC x86 : si vous voulez faire un OS maison, en gĂ©nĂ©ral tout est full CPU, pas possible dâutiliser un DMA, faire du son, utiliser le GPU⊠Personnellement, je trouve cela frustrant, moi qui code sur des vielles consoles oĂč jâai accĂšs Ă tout cela. Aller sur une plateforme oĂč rien de tout cela nâexiste est aberrant⊠(Enfin si, ça existe, mais de façon trop complexe et peu documentĂ©e). Dâailleurs câest un point rarement mis en avant, il manque une spĂ©cification de lâensemble dâun ordinateur «âŻnormalisĂ©âŻÂ» (et idĂ©alement ouvert). Pour moi ce serait le top, câest aussi pourquoi je crĂ©e ce processeur : pour avoir aussi une machine avec tout ce qui va «âŻautourâŻÂ» au top et bien fichu.
Selon moi, les ordinateurs auraient dĂ» suivre un peu les consoles : une nouvelle gĂ©nĂ©ration tous les 5-7 ans, en prenant compte des nouvelles avancĂ©es. Cela permettait que les devs puissent optimiser lâexistant.
Une chose que je me suis toujours demandée : vu que les specs sont rarement ouvertes, exploite-t-on correctement le matériel� Sur console, toutes les specs sont disponibles actuellement. Plus les gens échangent entre eux pour exploiter le matériel concerné, plus la machine révÚle son plein potentiel.
Et je pense quâavoir trop de matĂ©riels diffĂ©rents (comme sur PC) pousse beaucoup moins Ă lâoptimisation (et je parle aussi des drivers, ça me semble Ă©vident que certaines cartes doivent ĂȘtre moins poussĂ©es que dâautres).
Est-ce que lâAltairX demande aussi de revoir la conception des couches plus hautes (compilateur, langage, OS)âŻ?
Oui sur plusieurs niveaux :
Le compilateur forcĂ©ment, parce quâil a en charge une grosse partie de lâoptimisation. Par dĂ©faut, le CPU nâen fait pas, il fait entiĂšrement confiance au compilateur pour ça. De plus le compilateur devra aussi utiliser le SPM pour faire du Spilling (considĂ©rer de la mĂ©moire comme des registres).
Dâun point de vue programmation, si on veut optimiser le processeur il faudra utiliser le SPM : il existait une technique sur la PS2 et la PS3, qui Ă©tait de faire un double buffering des donnĂ©es, le but est de prĂ©charger les donnĂ©es avant de les utiliser, cette technique ne marche forcĂ©ment que sur des tableaux quâon lit linĂ©airement (ou dâun bloc dont on sait Ă lâavance quâon va le lire).
Et câest tout, jâai tentĂ© de coller au mieux mon ISA sur les contraintes des langages actuels.
Et puis les compilateurs actuels sont assez intelligents pour dĂ©tecter des instructions SIMD, donc le besoin de faire de lâassembleur est un peu plus rĂ©duit.
Pour lâOS, il devra faire un gros taf sur le rĂ©ordonnanceur, parce que je ne compte pas faire de cohĂ©rence de cacheâŻ! Donc les processus resteront sur leur core respectif. Si lâOS veut le changer il faudra vider le cache de ce core (câest un peu long, mais sâil ne le fait quâune fois par seconde, ça ira). LâOS a une partie du SPM Ă gĂ©rer, qui lui est dĂ©diĂ©e pour ses propres optimisations ou communications entre les diffĂ©rents cores.
Comment pensez-vous fabriquer lâAltairXâŻ? Est-ce vous travaillez avec des constructeursâŻ?
Alors tout dâabord il faut le faire fonctionnerâŻ! Il existe pour cela des cartes reprogrammables quâon appelle FPGA. Vous pouvez concevoir nâimporte quelle puce avec, câest excellent pour du prototypage, pour dĂ©boguer, etc. Et, bien sĂ»r pour le faire fonctionner en «âŻvraiâŻÂ».
Mais fonctionner Ă quelle vitesseâŻ? Est-ce que « lâimitation est parfaite », ou alors y a-t-il tout de mĂȘme des choses quâon ne voit pasâŻ?
Alors je nâai pas terminĂ© lâimplĂ©mentation, donc je ne pourrai pas dire Ă quelle vitesse exactement. On peut viser raisonnablement du 100-200âŻMHz, mais tout dĂ©pend de la carte, et de lâimplĂ©mentation quâon y fait.
Pour les choses quâon ne voit pas, malheureusement je ne pourrai pas dire, je nâai jamais conçu de processeur avant.
Il faut savoir que mĂȘme AMD utilise les FPGA pour prototyper. Mais ce qui est sĂ»r, câest que la gravure est bien plus complexe, surtout quâil faut un PDK (Process Design Kit) pour pouvoir concevoir sa puce, sachant que chaque fondeur et chaque techno aura des diffĂ©rences. Ce travail nâest pas Ă faire sur FPGA.
Jâutilise un Spartan 7, plus exactement le XC7S50. Je programme le FPGA avec VHDL. Il existe des outils open-source pour cela, comme GHDL (voir la dĂ©pĂȘche de sortie en 2021) et GTKWave, qui permettent de voir vos signaux.
Ensuite quand tout cela est fait, on peut Ă©ventuellement penser Ă le graver. Chez efabless, vous pouvez le faire pour 10âŻ000âŻ$ avec une techno en 130âŻnm (soit un PentiumâŻ4âŻ!). Câest plus avancĂ© que la PS2 ou la GameCube (180âŻnm).
Si on arrive aussi loin, je ferai sûrement une campagne de financement participatif avec kickstarter.
Pour la suite, câest une bonne question. La fabrication de processeur coĂ»te cher, est ce quâune sociĂ©tĂ© serait prĂȘte Ă mettre de lâargent dessusâŻ? Je ne crois pas. Si on essaye dâĂȘtre plus «âŻpragmatiqueâŻÂ», il faudrait quâune entreprise existante en Europe le dĂ©veloppe, donc STMicroelectronics, Infineon ou Imagination Technologies (voir NXP Semiconductors). Le mieux ça serait quâil soit en France donc STM, mais on est champion dans la prise de risque donc⊠Pourtant je pense que câest primordial quâil existe un processeur europĂ©en.
Mais se pose la question de lâusage, nonâŻ? Car le processeur sans carte mĂšre ne sert Ă rien. Nâest-ce pas tout un Ă©cosystĂšme Ă bĂątir, ou pourrait-on commencer avec des petites cartes simplesâŻ?
IdĂ©alement son usage serait un Raspberry Pi-like, mais je le verrais plus comme un mini-ordinateur, peu cher et accessible facilement. On est donc obligĂ© de passer par des petites cartes dans un premier temps, pour que les dĂ©veloppeurs se fassent la main dessus, et surtout parce que câest le moins risquĂ© financiĂšrement.
Mais oui, il y a tout un Ă©cosystĂšme Ă bĂątir avec, ce qui veut dire que les outils de dĂ©v' doivent ĂȘtre faciles et accessibles Ă la fois.
Est-ce quâil est prĂ©vu de mettre en place une association ou une fondation Ă terme pour piloter le projet, comme câest dĂ©jĂ le cas pour RISC-V ou OpenPowerâŻ?
Non, je nâavais rien prĂ©vu de tel. Pas que je sois fermĂ© Ă la question, mais une fondation suppose dâavoir des investissements privĂ©s, et je ne vois pas comment je pourrais les avoir.
Une association est plus que possible. Pour le moment câest un peu trop tĂŽt, mais ensuite pour pouvoir payer du matĂ©riel, ou pouvoir faire des petites cartes de dĂ©v', pourquoi pas, câest une alternative plus «âŻprobableâŻÂ».
Que souhaitez-vous dire aux lecteurs de LinuxFR en conclusion�
DĂ©jĂ merci dâavoir tout luâŻ! Je nâai pas forcĂ©ment tout expliquĂ© en dĂ©tail pour certaines choses, mais en tout cas je suis ravi de le faire dĂ©couvrir au plus grand nombre. Ce processeur mâa beaucoup apportĂ© en termes de connaissances, mais jâai aussi appris, Ă©trangement, quâun tel processeur pourrait se dĂ©marquer sur le paysage actuel.
Jâavais des connaissances de programmeur assembleur depuis dix ans ! Donc jâavais des connaissances assez avancĂ©es sur la micro-architecture. Mais lire des articles et concevoir un processeur, ce nâest plus trop la mĂȘme chose. Il y a des trucs auxquels on ne sâintĂ©resse pas forcĂ©ment, comme les dĂ©tails dâimplĂ©mentation des caches, du fonctionnement de la RAM en interne, etc., mais aussi la fabrication dâun ISA, comment on implĂ©mente toutes les Ă©tapes dâune instruction. Mais par exemple, jâavais une idĂ©e assez vague des processeurs Out of order. Et puis ça permet au final de sortir de la «âŻboiteâŻÂ», de penser diffĂ©remment quand on comprend «âŻtoutâŻÂ».
Au final ce processeur, câest la confirmation dâune intuition de dĂ©part. Je pensais quâil apporterait quelque chose. Mais, vu lâutilisation actuelle de lâinformatique, la plupart des personnes (moi y compris) souhaitent des machines de plus en plus petites, moins Ă©nergivores tout en gardant des performances acceptables. AltairX se prĂȘte bien Ă ce genre dâĂ©quilibre. Lâautre point est quâon est dans un petit rebond des architectures CPU, ARM et RISC-V qui viennent en force, alors que le x86 Ă©tait seul depuis trop longtempsâŻ!
Ce qui mâa convaincu de me lancer sur ce processeur et quâil ne reste pas une idĂ©e vague, câest que je voulais avoir les mĂȘmes optimisations sur PC que sur ma PS2 (principalement, celle pour Ă©viter les caches miss et le contrĂŽle total du nombre de cycles). Lâautre point, ce sont les failles meltdown et spectre qui mâont fait penser quâil faudrait vraiment un processeur avec une technologie diffĂ©rente qui Ă©viterait ce genre de faille (lâexĂ©cution spĂ©culative), tout en apportant un vrai plus technologique. Mon premier jet Ă©tait donc presque une copie conforme de lâEmotion Engine avec des briques du CELL dessus.
Pour finir je voudrais dire que câest un projet open source, donc si vous avez des compĂ©tences et pas forcĂ©ment calĂ© en hardware, il y a du travail Ă faire sur le compilateur, sur un portage Linux et dâautres choses trĂšs amusantesâŻ! đ
-
de maniĂšre statique il ne sâagit pas ici de poser un terme technique, mais dâindiquer un processeur in order, contrairement au processeur out of order considerĂ© comme dynamique. â©
Aller plus loin
- Le dépÎt de Kannagi (162 clics)
# Merci
PostĂ©Â par antistress (site web personnel) . ĂvaluĂ©Â Ă Â 8.
Merci, c'est passionnant.
Par contre autant tout est trÚs détaillé, autant quand on arrive à :
on passe de suite Ă autre chose.
Serait-ce possible d'en savoir plus à ce sujet ?
[^] # Re: Merci
PostĂ©Â par Arkem . ĂvaluĂ©Â Ă Â 3.
à défaut, j'en ai fait un lien vers la page Wikipédia
[^] # Re: Merci
PostĂ©Â par antistress (site web personnel) . ĂvaluĂ©Â Ă Â 3.
Ha oui !
[^] # Re: Merci
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 5.
C'est un peu compliquĂ©,je l'explique un peu ma vision, mais grosso modo, j'aimerais faire un bufferqui stocke les instructions qui ne peuvent pas ĂȘtre exĂ©cuter tout de suite, comme ça on peut aller plus loin et exĂ©cuter les instructions Ă l'avance.
C'est assez empirique , mais comme l'AltairX actuelle peut traiter relativement facilement 1-2 instructions/cycle.
Donc le but c'est dâexĂ©cuter immĂ©diatement les instruction Ă portĂ© ,et exĂ©cuter les instructions plus loin en parallĂšle pour augmenter ILP.
Le truc c'est que je travaille sur algorithme et l'implémentation pour faire cela, je taff donc pour le moment avec un papier et un stylo pour avoir une vision plus précise pour faire ça.
Pour cela que jâen dit pas forcĂ©ment plus , parce que je l'ai pas mis en place et que ce n'est pas finalisĂ©, mais j'ai des brouillons et des idĂ©es, mais je veux que tout soit bien fait, donc je prend mon temps.
[^] # Re: Merci
PostĂ©Â par antistress (site web personnel) . ĂvaluĂ©Â Ă Â 4.
OK, merci !
[^] # Re: Merci
PostĂ©Â par orfenor . ĂvaluĂ©Â Ă Â 10.
Faut préciser aussi que lors de la rédaction Kannagi a essayé «de ne pas faire un livre», tant il y avait de choses à dire et d'explications possibles à rajouter. C'est un domaine d'étude à part entiÚre. On a essayé de rester concis et précis pour qu'avec un peu de recherches et de réflexions vous puissiez comprendre. Devnewton a créé la page CPU dans le wiki à partir de morceaux de l'article qui devenait trop long. Il faut absolument lire cette page.
[^] # Re: Merci
PostĂ©Â par antistress (site web personnel) . ĂvaluĂ©Â Ă Â 5. DerniĂšre modification le 23 juin 2023 Ă 11:16.
Top la page CPU du Wiki, merci !
[^] # Re: Merci
PostĂ©Â par Nicolas Boulay (site web personnel) . ĂvaluĂ©Â Ă Â 9.
Cela s'appelle du scoreboarding : https://en.m.wikipedia.org/wiki/Scoreboarding
"La premiÚre sécurité est la liberté"
[^] # Re: Merci
PostĂ©Â par YBoy360 (site web personnel) . ĂvaluĂ©Â Ă Â 4. DerniĂšre modification le 23 juin 2023 Ă 06:17.
Dans une vie antérieure, j'avais un collÚgue faisant de l'optimisation CPU sur Itanium (un processeur VLIW d'HP, conjointement créé en collaboration avec Intel).
Le but de cette architecture était, selon ma compréhension, d'éviter les branchements non prévisibles pour avoir un pipeline + grand (et donc plus simple, et pouvant monter en fréquence plus facilement).
Le(s) problÚme(s) de cette architecture (outre l'incompétence d'Intel pour le design de CPU performant à cette époque) :
Le problĂšme, comme bien souvent, c'est que l'optimisme et les promesses d'un concept ne sont pas toujours observables dans le monde rĂ©el. Cela dit, si le code est concis, ce concept peut-ĂȘtre intĂ©ressant. Mais c'est une contrainte qui disqualifie totalement ce concept.. Les conditions aux limites, comme disent les physiciens.
[^] # Re: Merci
PostĂ©Â par orfenor . ĂvaluĂ©Â Ă Â 4.
L'Itanium est un sujet qui revient beaucoup, dans les commentaires et dans l'article (et dans le chat de rédaction pendant l'écriture !). Kannagi a déjà répondu un peu plus bas et dans l'article
Je cite un morceau de sa réponse
[^] # Re: Merci
PostĂ©Â par zerodeux (site web personnel) . ĂvaluĂ©Â Ă Â 4.
C'est pas de l'exécution spéculative qui pourrait typiquement mener un à un SPECTRE/MELTDOWN ? Sur ce sujet je retiens que jouer avec le temps (réordonner, anticiper) est un risque non négligeable.
Ce n'est a priori pas ton but, mais je vois aussi une opportunitĂ© de rester sur un processeur Ă l'architecture "simple" (au sens "un expert peut raisonner sur son modĂšle sans se fourvoyer", pas en opposition avec "sophistiquĂ©") et donc faisant passer la sĂ©curitĂ© en premier - et ça semblerait compatible avec le but d'efficience. Parce qu'aujourd'hui n'importe quel CPU/SoC ARM/RISC/CISC ne rassure personne en termes de sĂ©curitĂ© tellement ils sont complexes (on en est quand mĂȘme Ă mettre des CPUs dans les CPUsâŠ)
[^] # Re: Merci
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 2.
Oui je suis d'accord actuellement l'AltairX n'a pas de faille MeltDown/Spectre.
L'Ă©volution que je voulais mettre n'est pas de lâexĂ©cution spĂ©culative, mais surtout que de pouvoir prefetch plus facilement et que le processeur se bloque pas systĂ©matique sur un cache miss (qu'il doit du i-cache ou d-cache).
Et c'est là toute la difficulté c'est que je veux faire ça sans faire de l'OoO.
Et surtout je voulais faire un lĂ©ger rĂ©ordonnanceur pour les cas plus "compliquĂ©" a gĂ©rer, mais loin dâĂȘtre un truc complexe.
De toute façon de base s'il doit sortir, ça serait dans sa version simplifié dans un premier temps.
# Champ de taille des opérations dans les instructions?
PostĂ©Â par JoĂ«l . ĂvaluĂ©Â Ă Â 6.
Je serais curieux de mieux comprendre le raisonnement derriÚre ce champ de taille des opérations dans les instructions.
Je comprends lâintĂ©rĂȘt pour les opĂ©rations mĂ©moires (par exemple dans MIPS,
lw
--load word-- n'est pas pareil quelb
--load byte) mais pas trop pour les opérations arithmétiques ou logiques (par exemple dans MIPS,add
additionne deux registres peu importe la taille des données effectives).Si ce champ de taille était intégré à l'opcode (comme ça l'est pour la plupart des ISAs je crois), ça multiplierait le nombre d'instructions possible par quatre. Donc Kannagi se tirerait moins les cheveux :)
[^] # Re: Champ de taille des opérations dans les instructions?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 5. DerniĂšre modification le 22 juin 2023 Ă 09:33.
Le raisonnement est tout simplement la gestion des conversions,je m'explique.
Admettons qu'on fait des calcul en 8 bits (c'est relativement courant).
Si on fait 0xFF + 0x2 cela fait 0x101 , mais cela devrait faire 0x01 non ?
Ce que fait le MIPS (et RISC-V) c'est de faire un AND ensuite , si on renvoie cette valeur en int32 par exemple.
Du coup pour Ă©viter de mettre des AND a chaque conversion de type, j'ai mis cette solution.
Pareil pour les décalage binaires, si on fait 0xFF+ 0x2 ça fait 0x101 , si on décale à droite, on fait quoi ? 0x80 ? alors que ça devrait faire zero. (toujours en 8 bits)
Du coup a part encore faire un ANDâŠ
On espérant que j'ai répondu pourquoi à ce choix "étrange" :)
[^] # Re: Champ de taille des opérations dans les instructions?
PostĂ©Â par JoĂ«l . ĂvaluĂ©Â Ă Â 3.
Intéressant. J'avais jamais fait gaffe que le code contenait plein de
AND
pour tronquer les résultats.Cela dit, est-ce que absolument toutes les instructions ont besoin de ce champ de taille ?
Si c'est pas de le cas, ça vaudrait quand mĂȘme le coup de lâintĂ©grer Ă l'opcode pour libĂ©rer de la place, autrement tu te retrouve avec 2 bits gĂąchĂ©s au moins de temps en temps.
# Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par xryl669 . ĂvaluĂ©Â Ă Â 10. DerniĂšre modification le 22 juin 2023 Ă 09:11.
J'ai beaucoup de mal avec une nouvelle architecture "exotique", aussi bien soit elle. Car faire tourner une nouvelle ISA sur un FPGA, j'ai un peu l'impression que c'est facile (Leon, Microblaze, Pico8/32, RISC-V).
Le problĂšme, paradoxalement, c'est pas le hard du CPU, c'est le hard complet (avec les devices, type bus SPI pour la flash du boot, PCIe, USB, etcâŠ) et Ă©videmment le soft.
Le soft, c'est réussir à faire intégrer le générateur de code pour l'architecture dans GCC et/ou LLVM (chose qui est déjà trÚs compliquée à réaliser, ça ne s'écrit pas avec le dos d'une cuillÚre), mais s'assurer que ça fonctionne avec tous les paquets nécessaires pour un OS.
Un raspberry-pi like, c'est avoir un CPU avec tous les pĂ©riphĂ©riques nĂ©cessaires Ă booter linux (c'est Ă dire flash NOR ou SPI + gestionnaire d'interruption + MMU complexe + DMA + âŠ), mais Ă©galement tous les pĂ©riphĂ©riques nĂ©cessaires Ă l'OS (sortie vidĂ©o, rĂ©seau, IO pour l'IHM, powersaving, encodage et dĂ©codage video, GPU, etcâŠ) et pouvoir compiler, sans erreur, tous les paquets d'une distribution type debian (donc avec du C/C++, mais aussi du Java, du Rust, du Go, ⊠autant de compilateur Ă implĂ©menter).
DĂ©jĂ , avec le tsunami RISC-V, c'est pas gagnĂ©, alors avec une ISA toute neuve sans une masse d'implĂ©mentation, je pense que c'est mortâŠ
Ă la limite, une carte type "Arduino" avec un microcontrolleur sans OS, pourquoi pas. Mais mĂȘme dans ce cas, tous les pĂ©riphĂ©riques d'un microcontrolleur sont Ă implĂ©menter, et c'est pas un Freecore qui va fournir cette implĂ©mentation.
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 10.
Tu as totalement raison.
Et pour ĂȘtre honnĂȘte c'est peut ĂȘtre ça, qui a fait que l'idĂ©e de mon processeur est restĂ© dans ma tĂȘte durant des annĂ©es sans jamais en parler ni le publier !
Ce qui me chagrine sur ton post ,c'est que ce n'est pas un processeur fait totalement pour le fun.
l'AltairX tente de résoudre un problÚme :
Le premier proposer des solutions pour abaisser les caches miss.
Le second proposer un processeur haute performante sans aller sur du SuperScalaire Out of Order, ce point est trĂšs important parce que le OoO, c'est un peu le boss final, soit on se dit que c'est la seule solution, et donc on se retrouvera toujours avec les mĂȘmes leaders et aussi avec des processeurs qui chauffe beaucoup/consomme beaucoup/coĂ»te cher.
Soit on arrive à proposer une architecture suffisamment bien pensé pour que le compilateur fasse le gros taff et donc allÚge le hardware et réduit sa consommation.
Et pour avoir la réponse, pas le choix faut mettre les mains dedans, je suis conscient que y'a beaucoup de chance que cela n'ira pas plus loin qu'un FPGA et au mieux une petite carte avec 2/3 entré/sortie.
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par ÇpÉŚÆuâ nÇıɄÊÊÉW-ÇÉčÉčÇÄ±Ô (site web personnel) . ĂvaluĂ©Â Ă Â 4.
à propos du compilateur qui ferait le gros du taff, ce point n'aurait-il pas justement contribué à tuer l'Itanium ? Pensez-vous que les compilateurs ont fait désormais suffisamment de progrÚs (certains journaux sur de l'optimisation de code C++ ici laissent entendre le contraire) ? Comptez-vous sur des avancées prochaines dans le domaine ? Par exemple à base d'IA ? aprÚs tout optimiser du code, c'est un jeu relativement simple.
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » â Odes â Horace
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 3.
Je trouve que l'article est incomplet,il dit que les compilateurs sont pas assez performant parce qu'ils savent pas déplier une boucle.
Alors les compilateurs savent déplier une boucle mais je pense que cette optimisation à été fortement réduite, parce que cela augmente énormément la taille du binaire pour des gains relativement faible dans beaucoup de cas,un compilateur ne sait pas si ta boucle est faite 10,100,10 000 fois.
D'ailleurs son code C est tronqué ,quand il deplis il fait 8 fois, mais le compilateur comment il sait qu'il peut déplier 8 fois ?
Il sait pas du coup s'il doit dĂ©plier 8 fois, il va devoir gĂ©nĂ©rer beaucoup plus de code au cas oĂč ça serait 10, ou 3, c'est pas des multiples de 8 mais il doit gĂ©rer ces cas lĂ .
Bref juste pour dire que oui les compilateurs actuelles sont relativement bon, et donc je considÚre qu'ils ont fait fait désormais suffisamment de progrÚs pour qu'on puisse lui donner plus de taches.
Oui l'erreur de l'Itanium est la complexité de faire un compilo performant avec, mais je pense qu'il a brûler trop d'étape, il est parti direct avec 6 instructions/cycles ce qui est énorme, et surtout compliqué à optimiser.
Du coup les gains devait ĂȘtre minime, vu que forcĂ©ment le I-cache devait pas mal souffrir et que l'IPC devait tourner autour de 2.
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par xryl669 . ĂvaluĂ©Â Ă Â 2.
Beh si, il sait justement. Le loop unrolling, c'est pas fait sur le compteur de boucle
for i = O; i < N; i++)
, mais sur le nombre d'ALU disponible sur le CPU, on le nombre d'exécution qui peuvent se faire en parallÚle (SIMD). à la limite, il peut aussi déplier sur la taille du cache et du prefetcher (si la boucle touche une zone de 16 octets, il va déplier suffisamment pour les 4 itérations rentrent dans une ligne de caches de 64 octets).De toute façon, le compilateur va convertir ton code en une sorte d'arbre logique des opérations à effectuer sur les données, et le backend va essayer de mapper ces opérations le mieux possible sur l'architecture binaire cible. Et le gros problÚme, c'est justement de décrire cette architecture cible en étant le plus efficace (et juste!) possible.
L'itanium est arrivĂ© trop tĂŽt et le soft Ă©tait pas prĂȘt Ă utiliser cette architecture. Les algorithmes SIMD/vectorisĂ©s sont arrivĂ©s des annĂ©es plus tard.
De plus, c'est quasi impossible de faire un processeur efficace avec de multiples instructions/cycle sans avoir de out of order ou au moins une sorte de microcode. Les dépendances sont simplement insolvables sans résoudre l'ordre d'accÚs aux données (sequential memory access synchronization) sur un vecteur de plusieurs opérations, ce que le compilateur ne fourni pas (sauf en C++ pour les atomiques, mais c'est tout).
Donc, au niveau du processeur, si tu as la séquence de code:
A = B
B++
C = D
D = B
A += C
Bien que toutes ces opĂ©rations soient indĂ©pendantes les unes des autres (sauf la derniĂšre), le processeur ne peut pas faire A = B en mĂȘme temps que B++ car l'accĂšs et le stockage Ă B doit ĂȘtre synchronisĂ© sur ses ALU. Avec le OutOfOrder, il peut rĂ©ordonner (A=B, C=D) et (B++, D=B) s'il le veut et s'affranchir de la synchronisation des caches pour saturer ses unitĂ©s d'exĂ©cution.
Le compilateur ne peut pas changer l'ordre non plus (Ă la limite le C=D peut remonter) car le D=B a un effet observable donc B doit ĂȘtre calculĂ©. Je ne parle mĂȘme pas des atomiques/volatiles.
Ici avec 2 unités d'exécutions, tu ne peux pas faire moins que 4 cycles (A = B, puis B++, puis (C=D, D=B), puis A+=C) sans OoO, vue les dépendances.
Je parle ici de l'aspect implémentation et pas mathématique évidemment.
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 4. DerniĂšre modification le 22 juin 2023 Ă 15:05.
Oui, pour ça que je fais pas pas plus que 2 instructions/cycles
Sinon pour ton code, c'est un peu faux, on peut le faire sur 3 cycles (et ça demande pas une grosse implémentation):
A = B E = B
C = D E++
A += C D = E
Et je ne pense pas qu'un OoO fasse mieux ici, pour moi l'avantage d'un OoO est ailleurs.
Elle est sur son exécution spéculative (qui du coup permet un meilleur ILP), sur ces prefetch, sur pouvoir continuer a exécuter du code malgré un cache miss.
Sinon pour le reste un OoO n'apporte pas grand chose comparé à un in order (si le compilo fait son taff).
Alors je ne pense pas que tout faire statiquement soit la solution, pour cela que je voudrais amĂ©liorer mon proc pour gĂ©rer les 3 cas en haut (de façon diffĂ©rente , mais de le gĂ©rer quand mĂȘme).
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par antistress (site web personnel) . ĂvaluĂ©Â Ă Â 3.
Pour comprendre, le superscalaire c'est le fonctionnement des instructions MMX et SSE en x86Â ?
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 3.
Non rien n'a voir ,MMX et SSE sont des instructions SIMD.
Superscalaire ,c'est quand tu exécute plusieurs instructions, mais qui n'est pas spécifié par le compilateur.
VLIW c'est le contraire, tu exécute plusieurs instructions spécifié par le compilateur.
Le mélange des deux, c'est surtout pour gérer plusieurs cas, faudrait que j'écris des cas concret pour voir quel problématique je tente de résoudre.
[^] # Re: Ok, le hardware pourrait ĂȘtre fait, mais le software ?
PostĂ©Â par antistress (site web personnel) . ĂvaluĂ©Â Ă Â 4.
Merki
# Petit, peu de consommation, fortement multi-coeur?
PostĂ©Â par alpha_one_x86 (site web personnel) . ĂvaluĂ©Â Ă Â 5.
Avec les points suivant: Petit, peu de consommation
Ca me fait penser fortement la une base idéale pour faire un CPU fortement multi-coeur (>64 coeurs), mais c'est vrai que la cohérence de cache serai un plus pour cette usage.
Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/
# Débouchés?
PostĂ©Â par lym . ĂvaluĂ©Â Ă Â 9.
Sacré projet, mais à mon sens irréalisable seul et il serait sans doute intéressant d'avoir au niveau des débouchés l'approche originale de sa définition.
Car certains débouchés sont inaccessibles à bien des processeurs modernes, par manque de déterminisme ou car ils sont pétris d'états indéfinis:
De ce point de vue, le PowerPC (mĂȘme si, au milieu des derniers SoC Freescale/NXP, le coreNet gĂȘnait dĂ©jĂ un peu car son fonctionnement sans aucun contrĂŽle/rĂ©glage tenait du secret d'Ă©tat, contrairement a l'architecture de bus interne antĂ©rieure permettant de gĂ©rer trĂšs classiquement des prioritĂ©s entre pĂ©rifs et un parking-master) tombant en dĂ©suĂ©tude aprĂšs une vingtaine d'annĂ©es de dĂ©veloppement et dĂ©verminage de ses itĂ©rations successives par l'industrie TĂ©lĂ©coms laisse un vide pour les futures applications critiques (avionique en particulier).
Ce n'est pas encore trop visible, avec des dĂ©lais de dĂ©veloppement/certification dĂ©passant 10 ans, mais c'est un problĂšme qui inquiĂ©tait dĂ©jĂ il y a 4 ou 5 ans et mĂȘme si je n'ai plus d'infos rĂ©centes, pourrait commencer Ă faire vraiment suer dans certains bureaux d'Ă©tude: Assez pour les motiver Ă Ă©tudier des approches diffĂ©rentes combinant potentiellement simplicitĂ© et performance?
C'est clairement un domaine ou on préférera voir un maximum d'optimisations gérées de maniÚre visible par le compilo que de maniÚre obscure dans le silicium.
[^] # Re: Débouchés?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 4.
Merci pour ton commentaire.
Effectivement une solution serait de le proposer Ă des acteurs qui en ont besoin, que au grand public oĂč on serait directement mis en concurrence avec le x86/ARM/RISC-VÂ !
Le truc c'est à qui s'adresser ?
# maquettage ou prototype
PostĂ©Â par Selso (site web personnel) . ĂvaluĂ©Â Ă Â 4.
Hello,
Déjà avoir quelque chose sur FPGA qui fonctionne sera génial. Mais est-ce que ce prototype sur FPGA donnera une bonne vision du potentiel de ces choix d'architecture ?
Est-ce qu'on pourra lui donner une comparaison plausible si on le produisait avec une gravure équivalente aux puces du marché ?
Merci pour le partage dans tous les cas.
[^] # Re: maquettage ou prototype
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 2.
Si tu le met sur FPGA, tu peux donc le test et voir ces performance réels
Donc un prototype sur FPGA donne une idée oui de ce que ça donnerai,surtout si il entre sur un FPGA grand public.
# "Palette d'instruction": solution au nombre limité d'instructions?
PostĂ©Â par De_passage . ĂvaluĂ©Â Ă Â 3.
Salut. Ce message est mon premier sur ce site que je frĂ©quente depuis un moment, je me suis inscrit seulement maintenant pour commenter cette dĂ©pĂȘche.
Je ne suis pas un expert dans le domaine de l'architecture de processeur et de la micro-Ă©lectronique en gĂ©nĂ©ral, donc les termes que je vais utiliser risquent de ne pas ĂȘtre trĂšs prĂ©cis.
Si je rĂ©sume, ce processeur a d'un cĂŽtĂ© une limitation du nombre d'instructions qui peuvent ĂȘtre implĂ©mentĂ©es Ă cause du nombre limitĂ© de bits disponible pour leur identifiant, et de l'autre pour chaque coeur une mĂ©moire de 32Ko (la SPM) dans laquelle on peut manuellement stocker des donnĂ©es directement ou en passant par le DMA.
Du coup, pourquoi ne pas crĂ©er une sorte de "palette d'instructions", fonctionnant de la mĂȘme maniĂšre que les palettes de couleurs pour les anciennes consoles de jeu vidĂ©o, qui serait stockĂ©e dans cette mĂ©moire de 32Ko?
L'avantage principal des palettes de couleur est justement de pouvoir les représenter de maniÚre plus compacte dans une image, en échange d'une limitation des couleurs disponible pour l'image à celles présentes dans la palette (exemple: une palette de 256 couleurs codées en 32-bits, permettant de représenter la couleur de chaque pixel d'une image donnée avec une valeur codée sur 8 bits).
Ici, l'idĂ©e serait la mĂȘme, puisque les 7 bits de l'opcode actuel ne serviraient plus Ă reprĂ©senter directement une instruction rĂ©elle, mais serait un pointeur vers l'identifiant de cette mĂȘme instruction, stockĂ© dans la palette et codĂ© sur un plus grand nombre de bits.
Ainsi, si ces identifiants ont par exemple une taille de 16-bits, on pourrait représenter au total plus de 32'000 instructions, mais seules 128 d'entre-elles seraient utilisables directement par chaque coeur car stockées dans cette palette d'une taille de 256 octets.
Il faudrait donc, si c'est nécessaire, pouvoir changer les valeurs dans la palette en fonction des instructions nécessaires à l'exécution des différents programmes.
Cela pourrait se faire en modifiant directement les différentes entrées de la palette.
Il serait également possible de créer plusieurs palettes (par exemple, 4 palettes de 32 instructions chacune), avec les différentes instructions qui y seraient réparties en fonction de la fréquence de leur utilisation, et ainsi remplacer complÚtement la palette des instructions les moins fréquentes par une autre palette.
Dans tous les cas, ce serait au compilateur de gérer en amont la création et le chargement de ces palettes. Et il faudrait une instruction spéciale permettant au coeur processeur de savoir combien de palettes existent pour pouvoir y accéder en interprétant correctement l'ancien opcode de 7 bits (premiers bits pour la palette, derniers pour l'instruction dans la palette).
Que pensez vous de cette idée? Est-ce qu'elle serait facilement implémentable?
Est-ce que le cache SPM peut utilisé comme une "palette RAM" avec 256 octets réservé d'office, ou bien faut-il créer une mémoire cache supplémentaire dédiée?
[^] # Re: "Palette d'instruction": solution au nombre limité d'instructions?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 2.
Cela serait trop complexe pour le compilateur,et on aurait une latence supplémentaire sur le fetch.
Je connais d'ailleurs trĂšs bien les palettes de couleurs pour les anciennes consoles parce que je code sur SNES en assembleur et j'ai fait aussi un SDK pour la Neo Geo.
(Mais je code aussi sur PS2 qui elle utilise encore des palette de couleurs).
L'idée qu'on m'avait dite était enfaßte que je ferait un ISA 64 bits pour les instruction plus rare ! :)
Solution plus simple et moins contraignante ! :D
[^] # Re: "Palette d'instruction": solution au nombre limité d'instructions?
PostĂ©Â par Tb_ . ĂvaluĂ©Â Ă Â 2.
Je mâinterroge : pourquoi la gestion d'un set d'instruction par le compilateur serait trop complexe et la gestion d'un SPM serait acceptable ?
Certain processeur populaire ont des tailles d'instruction variableâŠ
De quel latence parle-t-on ici ?
C'est une histoire de compromis : selon ce que peut faire le hardware et si la toolset sait l'exploiter : il n'y a pas forcement dâopĂ©ration logiciel AND Ă faire :
Effectivement si la taille des operateurs fait 32bits, le rĂ©sulat en sortie de l'ALU de l'opĂ©ration 0x0000_00FF + 0x0000_0002 sera 0x0000_0101, mais un dĂ©codage sur l'Ă©tage write_back de "store_byte", seule le mot de poids faible pourrait ĂȘtre repris. Cela induit automatiquement un AND, mais sans que l'opĂ©ration n'apparaisse explicitement dans la liste des instructions.
Ne pas avoir cette capacité de load et store de mot de 8 bytes au contraire induit l'introduction d'instruction logiciel logique supplémentaire.
C'est toute la dĂ©marche compliquer de devinette qui consiste Ă comprendre et anticiper les caractĂ©ristiques des problĂšmes que la machine se destine Ă rĂ©soudre. Si la machine est destinĂ© Ă traiter des Ă©chantillons sonore sur 24 bits (On parlait de DSP, Ahma quand le silicium coĂ»tait cher )⊠sans doute que les occurrences dâexĂ©cuter des instructions store et load 8bytes sont anecdotique. Par-contre pour un processeur destiner Ă manipuler un framebuffer dont les couleurs sont reprĂ©sentĂ©s par 3 composantes de 8bits, j'aurais quelques doutes.
[^] # Re: "Palette d'instruction": solution au nombre limité d'instructions?
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 1. DerniĂšre modification le 04 juillet 2023 Ă 20:05.
je ne vais pas répondre à ta deuxieme partie, parce que je suis d'accord avec toi.
Je répond au premier parce que tu semble pas avoir compris la solution qu'on m'a proposé.
On gros on me demande de faire une palette d'instruction.
Donc déjà une palette demande deux fetch, un pour lire l'index et le suivant le SPM.
Et cela pour compresser les instructions, l'idée n'est pas "idiote", mais mon intuition me dit que c'est une mauvaise idée, je doute qu'on trouve des pattern trÚs semblable.
(et perso un compilateur est déjà compliqué à faire , j'ai pas forcément le temps de tester cette idée :p ).
[^] # Re: "Palette d'instruction": solution au nombre limité d'instructions?
PostĂ©Â par Tb_ . ĂvaluĂ©Â Ă Â 1.
Oui effectivement l'utilisation de SPM pour stocker une variation dâinstruction set parait sous optimal. Je n'avais pas bien lu⊠l'analogie avec une palette de couleur est allĂ© un peut trop loin :)
Parcontre les méthodes utilisant une ou plusieurs instructions pour choisir entre plusieurs variations d'instructions set façon thumb mode du ARMv7 sont tout à fait valable pour adapter l'instruction set à certain traitement.
# F-CPU
PostĂ©Â par Sytoka Modon (site web personnel) . ĂvaluĂ©Â Ă Â 8.
Cela me rappelle l'aventure du F-CPU qui me semblait plus communautaire https://linuxfr.org/news/le-retour-de-f-cpu-le-processeur-libre
Personnellement, on j'aimais bien l'aventure des processeurs FORTH de Charles H. Moore https://en.wikipedia.org/wiki/Charles_H._Moore. Il essayait une autre voie, je trouvais cela amusant.
# ISA belle a les yeux bleux, les yeux bleux ISA bella
PostĂ©Â par Tb_ . ĂvaluĂ©Â Ă Â 2.
Oui et non; Selon moi c'est plutĂŽt le contrat entre la personne qui propose une machine et l'utilisateur de premier niveau (qui va produire du code assembleur, peu importe le moyen).
Par exemple ce qui se passe avec "l'ouverture" des ISA :RISC-V, openSparc etc ⊠on va pouvoir assurer un minimum de fonctionnement et de connaissance commune assurant une compatibilitĂ© "basic" avec des toolset au bĂ©nefice d'un client qui pourra avoir une interopĂ©rabilitĂ© de vendeur pour une mĂȘme ISA dans la limite de la fonctionnalitĂ© "basic".
NĂ©anmoins chaque vendeur peut dĂ©cider dâimplĂ©menter son processeur Ă 500Mhz ou 800Mhz sur un pipeline plus ou moins important, avec des opĂ©rateurs hardware ou non, des instructions plus ou moins spĂ©cialisĂ© qui nĂ©cessiteront bien Ă©videment une spĂ©cialisation vendeur de la toolsuite qui permettrons d'exploiter ces spĂ©cialisations aux mieux. (Cela inclu les caches, MMU, FPU et autres accĂ©lĂ©rateurs exotique)
La oĂč pour un projet qui vise Ă permettre de gagner sa vie, on va sans doute chercher Ă combinĂ© rĂ©duction des risques et maximiser les bĂ©nĂ©fices: partir d'une ISA et d'un eco-system existant est un avantage important autant lĂ je suis un peu septique sur la dĂ©marche. Je ne la comprends pas bien :
- c'est un processeur "generaliste" ou "specialisĂ©", si oui sur quel traitement ? Les processeurs de console Ă©taient des processeurs spĂ©cialisĂ©s et perdent de plus en plus cette caractĂ©ristique dans la mesure ou il y a une convergence vers d'autres Ă©quipements (lecteur DVD, home cinĂ©ma, navigation internet âŠ) et que les PC incluent toujours plus d'accelerateur en tout genre (compression/dĂ©compression video, traitement d'image camera, accelerateur graphique). Il me semble que la Xbox et les deniĂšres gĂ©nĂ©ration de PS sont des PC maquillĂ©, non ?
- C'est un processeur à but didactique ou une brute de guerre qui vise à péter des scores coreMark, l'efficacité énergétique, une surface réduite, un coût ?
A la lecture de l'article, les compromis choisis ne sont pas toujours claire pour moi.
Mais aprÚs tout : Ils ne savaient pas que c'était impossible ⊠alors ils l'ont fait! :)
[^] # Re: ISA belle a les yeux bleux, les yeux bleux ISA bella
PostĂ©Â par Kannagichan . ĂvaluĂ©Â Ă Â 3.
Merci pour ton commentaire.
Pour te rĂ©pondre ,c'est un processeur gĂ©nĂ©ralise oĂč son but est de rĂ©duire la surface,donc le coĂ»t tout en ayant de bonne performance, en gros de garder une bonne radio perf/prix/simplicitĂ©.
[^] # Re: ISA belle a les yeux bleux, les yeux bleux ISA bella
PostĂ©Â par sylgre . ĂvaluĂ©Â Ă Â 2.
Bonjour,
tu dis vouloir faire un processeur généraliste et vouloir garder un bon ratio perf/prix/simplicité.
Les ennuis vont commencer quand il s'agira de quantifier ton architecture et de publierâŠ
Qu'est-ce qu'un processeur généraliste ? Desktop, serveur, embarqué ? Quel est ton appli cible ?
Comment quantifier la perf ? Quel est par exemple le bon compromis entre vitesse et conso ?
Comment mesurer/prévoir la conso ?
Le prix : de quoi parle-t-on ? ASIC ? Quelle techno ? Quel fondeur ? Quel volume ?
SimplicitĂ© : quelle est la mesure ? Un compilo pour EPIC ou VLIW n'est pas simple. L'expĂ©rience montre que ça complique l'utilisation et la diffusion de l'architecture car un mĂȘme binaire ne peut pas suivre l'Ă©volution de la plateforme.
Bref, c'est un travail de titan et la plupart des « gros » y travaillent depuis longtemps : ST, ARM, Intel/AMD, IBM, Xilinx/Altera(intel).
Ăvidemment, chacun a une rĂ©ponse propre, selon son appli, sa techno, ses volumes.
Quoi qu'il en soit, c'est un domaine d'étude trÚs intéressant. Créer son ISA, implémenter son processeur et coder un compilateur (a minima un assembleur) est une expérience on-ne-peut-plus enrichissante et satisfaisante.
[^] # Re: ISA belle a les yeux bleux, les yeux bleux ISA bella
PostĂ©Â par lepton.phlb . ĂvaluĂ©Â Ă Â 2.
Il y eu l'expérience Transmeta:
Transmeta-Crusoe
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.