Lors de l'écriture dans un langage tel que C, le compilateur prend théoriquement votre code lisible par un humain et le traduit en code machine - instructions atomiques relativement dépendantes du matériel. Chaque architecture de CPU semble avoir un jeu d'instructions qui est implémenté pour le CPU d'une manière câblée, mais il semble que des processeurs différents peuvent implémenter le même ISA de différentes manières, par exemple x86. Est-ce que cela signifie qu'un ISA agit essentiellement comme une couche d'abstraction pour le matériel? x86 dit: Ce sont les instructions standard que je propose - vous n'avez pas besoin de savoir comment le matériel le fait, sachez juste que c'est le cas et vous pouvez les utiliser en m'envoyant le code machine suivant? Donc, si je construisais une nouvelle CPU et que j'installais mon CPU de façon à ce qu'elle suive le standard x86, je n'aurais pas besoin d'écrire un compilateur spécifique à mon matériel, mais tout compilateur compilé à partir de C à l'ISA x86 serait suffisant pour mon nouveau CPU?Modifications du compilateur pour le nouveau matériel
Répondre
Oui, l'architecture x86 est bien documentée et forme une couche d'abstraction. Toutefois, un compilateur d'optimisation peut faire mieux s'il comprend les retards d'utilisation de la charge, le nombre d'unités de stockage de charge, le nombre et les types d'unités de calcul, les tailles de cache et les lignes de cache; le nombre de registres internes, certains processeurs font plus de réordonnancement du flux d'instructions, etc .; ces choses étant spécifiques à la mise en œuvre. Par exemple, un processeur plus ancien peut avoir une seule unité de multiplication entière, une plus récente peut en avoir deux (une plus ancienne peut n'en avoir aucune, j'ai travaillé sur une telle, mais pas sur x86). Leurs types peuvent également différer. Ces différences modifient l'équilibre entre les compromis vitesse-espace dans l'optimisation/la génération de code, donc une stratégie qui sait qui peut utiliser différentes séquences d'instructions. Par exemple, une multiplication par une grande constante est probablement la plus courte en utilisant l'instruction de multiplication, mais pourrait être plus lente ou plus rapide que plusieurs opérations de décalage et d'addition, en fonction de l'implémentation sous-jacente. Ainsi, le compilateur a quelques choix à faire, et comme il peut garder une trace de beaucoup d'état à propos du code qu'il écrit, il peut utiliser des stratégies de décision plutôt complexes.
Une autre stratégie d'optimisation courante consiste à entrelacer deux ou plusieurs calculs différents; ceci afin de garder le processeur plus occupé. Pour ce faire, augmente souvent le nombre de registres nécessaires, et peut même nécessiter plus d'instructions, et pourrait être plus rapide mais plus long ou ne pas dépendre à nouveau de l'implémentation sous-jacente.
le compilateur prend théoriquement votre code lisible et traduit en code machine
Je dirais que c'est ce que le compilateur fait. Ce n'est pas théorique.
Si vous répondez aux spécifications du jeu d'instructions, vous êtes libre de choisir votre implémentation matérielle.
Le jeu d'instructions peut avoir quelques instructions simples comme ADD, SUBTRACT, tant que la CPU exécute l'instruction bit-précise, vous ne devriez pas vous soucier de l'implémentation. En fait, c'est là que l'on peut améliorer les performances en augmentant la complexité de l'implémentation de l'additionneur pour permettre des vitesses d'horloge plus rapides.
Votre dernière phrase contredit votre deuxième dernière phrase. Les compilateurs s'en soucient certainement. – EJP
Quelle est la contradiction? Vous recevez une instruction fixe (modèle binaire), par exemple un ADD. Le matériel décode l'ADD et effectue un ADD il ne dit rien sur l'architecture additionnelle implémentée par le matériel. – Morgan
- 1. Migration du contrôleur de domaine vers un nouveau matériel
- 2. Créer du matériel pour l'iPhone
- 3. Android applications privées du marché pour le matériel exclusif?
- 4. Options du compilateur pour le projet C#
- 5. Définir le chemin du compilateur pour OpenCV
- 6. Implémentation du matériel Eddystone
- 7. Dimensionnement du matériel
- 8. Cassandra - Optimisation du matériel dans le cluster
- 9. Statut de nouveau compilateur de type typographique
- 10. Serveur d'interrogation backbone pour les modifications - puis rendu de nouveau?
- 11. Matériel pour commencer le développement du framework compact .NET
- 12. Nom du matériel Android
- 13. Cache du compilateur pour Scala?
- 14. Aperçu du matériel avec trois.js
- 15. Comment utiliser le décodage matériel pour l'audio?
- 16. Informations sur le matériel
- 17. Configuration du matériel et du système d'exploitation pour une application
- 18. Vous cherchez du matériel d'apprentissage
- 19. Visual Studio 2012: configuration du compilateur (possible d'utiliser le compilateur du SDK, par exemple compilateur VC++ 2008-compilateur VC++ 2010)
- 20. Matériel de référence pour apprendre le Javascript
- 21. glTexCoord [] st ne marche pas le travail sur le nouveau matériel
- 22. Screencast matériel pour C#
- 23. Utilisation du bouton latéral du matériel Android
- 24. Dimensionnement du matériel - Règles du pouce
- 25. Volume Entrée du bouton matériel
- 26. Erreurs du compilateur simple: Trop nouveau à Perl pour savoir comment les résoudre
- 27. Construire le matériel d'état
- 28. Comment détecter quand un nouveau matériel est connecté sous Windows?
- 29. Clojure erreur du compilateur
- 30. Modifications du mappage dynamique
Les réponses sont oui et oui. –