Je cherche des choses comme la réorganisation du code qui pourrait même casser le code dans le cas d'un processeur multiple.Quelles sont les astuces qu'un processeur utilise pour optimiser le code?
Répondre
Wikipedia a une liste assez complète des techniques d'optimisation here.
+0: Cela répond à la façon dont les compilateurs optmisent le code, pas comment les processeurs le font. –
Oui, mais quelle est exactement votre question?
Cependant, puisqu'il s'agit d'un sujet intéressant: les astuces que les compilateurs et les processeurs utilisent pour optimiser le code ne doivent pas casser le code, même avec plusieurs processeurs, en l'absence de conditions de concurrence dans ce code. C'est ce qu'on appelle la garantie de cohérence séquentielle: si votre programme n'a pas de conditions de course, et que toutes les données sont correctement verrouillées avant d'y accéder, le code se comportera comme s'il était exécuté séquentiellement.
Il y a une vidéo vraiment bien de Herb Sutter parle de cette ici:
http://video.google.com/videoplay?docid=-4714369049736584770
Tout le monde devrait regarder ce :)
Le plus important serait le réordonnancement de l'accès à la mémoire. En l'absence de clôtures de mémoire ou d'instructions de sérialisation, le processeur est libre de réorganiser les accès mémoire. Certaines architectures de processeur ont des restrictions sur combien ils peuvent réorganiser; L'alpha est connu pour être le plus faible (c'est-à-dire celui qui peut le plus réordonner).
Un très bon traitement du sujet peut être trouvé dans la documentation source du noyau Linux, au Documentation/memory-barriers.txt.
La plupart du temps, il est préférable d'utiliser des primitives de verrouillage de votre compilateur ou de votre bibliothèque standard; ceux-ci sont bien testés, devraient avoir toutes les barrières de mémoire nécessaires en place, et sont probablement assez optimisés (l'optimisation des primitives de verrouillage est délicate, même les experts peuvent parfois se tromper).
Question connexe: http://stackoverflow.com/questions/286629/what-is-mean-by-memory-fences – CesarB
La réponse de DavidK est correcte, mais il est également très important d'être conscient du modèle de mémoire pour votre langue/exécution. Même sans conditions de concurrence et avec la consistance séquentielle et l'utilisation du mutex, votre code peut encore casser lorsque les données sont mises en cache par différents threads s'exécutant dans les différents cœurs du CPU. Certaines langues, Java par exemple, assurent l'état des données entre les threads lorsqu'un verrou mutex est utilisé, mais il suffit rarement de s'assurer que deux threads ne peuvent pas accéder aux données en même temps. Vous devez utiliser le mutex de manière correcte pour vous assurer que l'exécution de la langue synchronise l'état des données entre les deux threads. En Java, cela se fait en synchronisant les deux threads sur le même objet.
Voici une bonne page expliquant le problème et comment il est traité dans le modèle de mémoire javas.
- 1. Quelles sont les meilleures pratiques pour optimiser plusieurs requêtes SQL LIKE à colonnes?
- 2. Quelles sont les spécifications HW recommandées pour les virtualisations?
- 3. Quelles sont les astuces courantes dans Eclipse lorsque vous travaillez avec des fichiers jsp?
- 4. C# - Quelles sont certaines des meilleures pratiques/astuces de haute performance pour ADO.NET
- 5. Quelles sont les alternatives pour CSharpOptParse?
- 6. Quelles sont les options disponibles pour VisualSVNServerHooks.exe?
- 7. Quelles sont les bonnes stratégies de déploiement de code?
- 8. Quelles sont les bonnes ressources pour apprendre le SSIS avancé?
- 9. Quelles sont les dimensions de l'écran iPhones pour le codage?
- 10. Quelles sont les implications de l'utilisation de code dangereux
- 11. Quelles sont les approches pour écrire une application d'horloge simple?
- 12. Comment optimiser ce code?
- 13. Quelles sont les règles pour nommer les classes AS3?
- 14. Quelles sont les meilleures pratiques pour les URL publiques «privées»?
- 15. Quelles sont les modifications empilables?
- 16. Des astuces pour le problème java.lang.String.replace?
- 17. Quelles sont les bonnes ressources pour comprendre les MIB SNMP?
- 18. Quelles sont les meilleures pratiques pour gérer les informations sensibles?
- 19. Quelles sont les ressources pour apprendre à écrire les spécifications?
- 20. Quelles sont les bonnes ressources pour apprendre sur les génériques?
- 21. Quelles sont les utilisations intéressantes pour les agents Java?
- 22. quelles sont les options de moteur de template pour PHP?
- 23. Quelles sont les étapes pour créer un 'ensemble exécutable'
- 24. Quelles sont les étapes pour connecter jdbc avec mysql
- 25. Quelles sont les alternatives pour PHPLint qui s'exécutent sous Windows?
- 26. Quelles sont les étapes à suivre pour ajouter du code java à mon blog blogger/blogspot?
- 27. Comment faire pour que l'agent de test de charge Visual Studio utilise les serveurs deuxième processeur
- 28. Quelles sont les valeurs SPAlert EventTypeBitmask valides?
- 29. Astuces de code de Flex Builder 3
- 30. Quelles sont les alternatives "Pastie"? (installable)
Pourriez-vous s'il vous plaît mettre à jour cette phrase sous la forme d'une question? –
Voulez-vous dire le compilateur? Parce que vous aurez des réponses très différentes ... –
Quel complier? Quelle plateforme? –