Question

Linus Torvalds travaillait pour une entreprise de processeur appelé Transmeta. Le processeur qu'ils ont fait était un objet sur la base RISC dans le noyau. Si je me souviens bien, l'idée était que le noyau a mené une « couche d'émulation de processeur » arbitraire et upgradable (pourrait être x86, powerpc, etc.), ce qui traduit les opcodes de haut niveau dans le jeu d'instructions de base RISC.

Qu'est-il arrivé à cette idée, et ce à votre avis sont les avantages, les inconvénients et les situations où une telle approche aurait eu un avantage (en termes de programmation)?

Était-ce utile?

La solution

La société n'a pas fait aussi bien qu'ils devraient, et ont finalement été acquises par Novafora pour sa technologie d'économie d'énergie. ( http://www.novafora.com/pr01-28-09.html)

De tous les comptes que je suis au courant, la technologie n'a tout simplement pas en concurrence avec les systèmes existants. Ils étaient loin de leur nombre de performance. En outre, alors qu'il aurait été possible de mettre un autre traducteur au-dessus de leur conception VLIW, je ne suis pas au courant des produits qu'ils ont produits qui ont fait. Je ne me souviens pas de la puce Crusoe être en mesure d'accepter une alternative « traduction » télécharger microcode.

Personnellement, je possédais un appareil qui utilise un processeur Crusoe, et alors qu'il certainement livré sur la vie de la batterie, la performance de l'appareil était lamentable. Une partie du blâme pourrait probablement être nivelé sur la version spéciale de Windows, il utilisé, mais il était encore lent.

Au mieux, il était bon pour le bureau à distance portable.

à mon humble avis, la technologie a les mêmes avantages que le logiciel VM comme .Net et la machine virtuelle Java:

  • Le côté positif est que vous pouvez probablement accélérer le code plus rapide avec un solution matérielle (comme IBM fait avec il est processeurs d'accélérateur Java) que le logiciel pur JIT.
  • L'inconvénient est que vous ne recevez jamais l'état brut performances processeurs exécutant get code natif.

De quelques perspectives vous pouvez penser des puces x86 modernes comme morphing de code, bien que ceux comme très spécialisés. Ils se traduisent par l'architecture x86 dans un ensemble plus efficace de type RISC Sous-instruction, puis exécuter celles-ci.

Un autre exemple de ce type de technologie pourrait être FPGA qui peuvent être programmés pour imiter sur un niveau de circuit différents types de processeurs ou de circuits bruts. Je crois que certains systèmes Cray peuvent venir avec des « nœuds d'accélérateur » de ce genre.

Autres conseils

Pour une chose que la plupart des processeurs CISC interne leurs opcodes traduire à UOP micro-ops qui sont semblables aux opérations RISC. Pipelining et plusieurs noyaux ont réduit l'écart sur les processeurs RISC au point où il est une très faible différence entre eux, le cas échéant. Si vous avez besoin de compatibilité croisée de la source C ou d'une autre extrémité avant assemblage, vous pouvez utiliser LLVM. http://llvm.org/

avantages évidents:

  • Possibilité d'exécuter un système d'exploitation (juste allumer l'émulation du processeur à ce qui est nécessaire)
  • Possibilité (avec prise en charge du noyau bien sûr) d'exécuter des binaires pour différentes architectures sur le même processeur / OS sans support logiciel.

Obvious con:

  • couche d'émulation supplémentaire == == plus frais généraux de traitement plus rapide nécessaire pour obtenir des performances équivalentes pour tout.

Je dirais que les réductions de coûts viennent avec la quantité, donc quelque chose comme la puce Transmeta a vendre beaucoup de volume avant de pouvoir concurrencer sur le prix avec un volume élevé existant puces x86.

Si je me souviens, le point de la puce Transmeta était qu'il était faible puissance. Avoir moins de portes silicium pour retourner en arrière et en avant chaque cycle d'horloge permet d'économiser l'énergie. Le morphing de code était si vous pouviez exécuter un jeu d'instructions complexe (CISC) sur une faible puissance à puce RISC.

premier processeur de Transmeta, le Crusoe, ne l'a pas très bien en raison de problèmes même exécutant le logiciel de référence. Leur second processeur, l'Efficeon, a réussi à utiliser moins d'énergie que le processeur Intel Atom (dans la même catégorie de performance) et de meilleurs résultats que le Centrino dans la même enveloppe de puissance.

Maintenant, regardant du point de vue du logiciel et la flexibilité que vous êtes, Code Morphing est juste une forme de compilation Just-In-Time, avec tous les avantages et les inconvénients de cette technologie. Votre code x86 est essentiellement en cours d'exécution sur une machine virtuelle et qui est émulée par un autre processeur. Le plus grand avantage de la virtualisation est maintenant droit la possibilité de partager un seul processeur entre plusieurs machines virtuelles de sorte que vous avez des cycles de CPU moins ralenti, ce qui est plus efficace (coût du matériel et le coût de l'énergie).

Il me semble que le morphing de code, comme toute forme de virtualisation, est d'être plus efficace des ressources.

Pour une autre approche de la virtualisation x86 ISA assistée par matériel, vous pouvez lire sur le Loongson 3 CPU.

La plupart des processeurs modernes mettent effectivement en œuvre leurs jeux d'instructions en utilisant microcode . Il y a plusieurs raisons à cela, y compris les problèmes de compatibilité, mais il y a aussi d'autres raisons.

La distinction entre ce qui est « matériel » et ce qui est « logiciel » est en fait difficile à faire. machines virtuelles modernes telles que la machine virtuelle Java ou CIL (.NET) pourraient ainsi être mises en œuvre dans le matériel, mais ce serait probablement juste être fait en utilisant microcode de toute façon.

L'une des raisons pour avoir plusieurs couches d'abstraction dans un système est que le programmeurs / ingénieurs ne doivent pas penser à des détails non pertinents quand ils travaillent à un niveau plus élevé.

Les bibliothèques système d'exploitation et système fournissent également des couches d'abstraction supplémentaires. Mais ces couches ayant fait que le système « plus lent » si l'on n'a pas besoin des fonctionnalités qu'ils fournissent (à savoir l'ordonnancement des threads effectué par le système d'exploitation). Il est pas une tâche facile d'obtenir votre propre planificateur spécifique au programme de battre celui du noyau Linux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top