• [^] # Re: Probablement une mauvaise idée...

    Posté par . En réponse au message Utiliser un FPGA pour accélérer les compilations ?. Évalué à 2.

    Effectivement, je suis de formation informatique (et pas électronique/hardware). Je pense que c'est l'inverse pour toi, ce qui doit expliquer une partie de l'incompréhension. Après je suis une vraie catastrophe en maths (ahem...).

    La différence que tu fais sur la machine de Turing/machine d'état est artificiel.

    Ça non, je suis sur de mon coup. On est sur (= c'est démontré) qu'un automate d'états fini n'est pas Turing complet. Par conséquent, on ne peut pas exprimer tous les programmes informatiques comme un automate d'états fini. Par contre, c'est pas forcément hyper lié au sujet de base (mais c'est toi qui disait ça, hein).

    La structure d'un cpu est assez simple : registre, mémoire, operateurs, et instruction.

    Oui pour la vision globale. Mais ça c'est un CPU des années 80. Aujourd'hui c'est quand même plus complexe. Les instructions sont micro-codées, elles ne sont pas exécutées dans l'ordre, y'a un pipeline qui fait qu'en fait on les exécute par bouts, on a des architectures super-scalaires, de la prédiction de branchement etc. C'est pour ça que c'est une mauvaise idée de faire un CPU soi-même et de le mettre dans un FPGA. Sans compter les histoires de fréquence etc. (Je sais que tu sais sûrement déjà ça, mais je voulais pas qu'on donne la vision fausse qu'un CPU performant, c'est simple).

    Je crois qu'on s'entend pas sur les définition de CPU. Et de "core" d'ailleurs. Je vois pas quelle définition tu leur donne.

    Il me semble qu'un CPU, c'est un circuit générique, qui n'est pas optimisé pour exécuter un type de logiciel particulier. Un circuit dédié est optimisé pour exécuter un type de logiciel particulier. Surtout un CPU a un jeu d'instructions Turing complet. Un circuit dédié peut avoir un jeu d'instructions qui n'est pas Turing complet. Par exemple on peut imaginer un circuit dédié qui n'a pas d'instruction de branchement (jump).

    Tu prends peut-être une définition très large de CPU au sens de "circuit qui accéde de la mémoire et exécute des instructions depuis cette mémoire". Note que même comme ça un encodeur MPEG4 impémenté dans un FPGA, c'est pas un CPU.

    Ou veux-tu en venir ?

    Soit on implémente toutes les opérations de GCC en logiciel (cas i) avec des instructions assembleur dans la mémoire qui sont exécutées par le CPU flashé dans le FPGA. Soit on implémente tout en matériel dans la configuration du FPGA (cas ii). Entre le deux on peut implémenter des "macro-opérations" en matériel (décomposition SSA par exemple, une partie du parcours de l'AST etc. ou la tokenisation) et d'autres en logiciel. Et on peut implémenter plus ou moins d'opérations en matériel.