Je pense que vous êtes la lecture de cette déclaration:
Par exemple, de nombreux moderne de 3-D les Jeux ont leur haute performance du moteur de base écrit en C++ et de l'Assemblée.
Jeux (et la plupart des programmes ces jours-ci), ne sont pas "écrit à l'assemblée" de la même manière qu'ils sont "écrit en C++". Ce blog n'est pas en disant qu'une fraction importante du jeu est conçu dans une assemblée, ou qu'une équipe de programmeurs de s'asseoir autour et se développer à l'assemblée en tant que première langue.
Ce que ce vraiment signifie que les développeurs de la première écriture, le jeu et le faire fonctionner en C++. Puis ils profil, comprendre ce que les goulets d'étranglement, et si c'est la peine à optimiser le diable hors de leur assemblage. Ou, s'ils sont déjà expérimentés, ils savent quelles parties vont être les goulots d'étranglement, et ils ont optimisé les morceaux assis autour d'autres jeux qu'ils ont construit.
Le point de la programmation en assembleur est le même comme il l'a toujours été: la vitesse. Il serait ridicule d'écrire beaucoup de code en assembleur, mais il y a quelques optimisations du compilateur n'est pas au courant, et pour une assez petite fenêtre de code, un homme va faire mieux.
Par exemple, pour la virgule flottante, les compilateurs ont tendance à être assez conservateur et peuvent ne pas être au courant de certaines des fonctionnalités les plus avancées de votre architecture. Si vous êtes prêt à accepter une certaine erreur, vous pouvez généralement faire mieux que le compilateur, et il vaut la peine de l'écrire un peu de code en assembleur si vous trouvez que beaucoup de temps est passé sur elle.
Voici quelques exemples pertinents:
Exemples de Jeux
L'Article d'Intel sur l'optimisation d'un moteur de jeu à l'aide de l'ESS intrinsèques. Le code final utilise intrinsèques (pas d'assembleur en ligne), de sorte que le montant de pur montage est très petite. Mais ils ont l'air à l'assembleur de sortie par le compilateur pour comprendre exactement ce qu'il faut optimiser.
Quake rapide inverse de la racine carrée. De nouveau, la routine n'a pas l'assembleur elle, mais vous avez besoin de savoir quelque chose au sujet de l'architecture pour faire ce genre d'optimisation. Les auteurs savent quelles opérations sont rapides (mulitply, maj) et qui sont lents (fracture, sqrt). Afin qu'ils viennent avec un très difficile la mise en œuvre de racine carrée, qui évite la lenteur des opérations entièrement.
Le Calcul De Haute Performance
-
En dehors du domaine des jeux, les gens dans le calcul scientifique fréquemment optimiser la merde hors de choses pour les faire courir plus vite sur le matériel le plus récent. Pensez à ce que les jeux où vous ne pouvez pas tricher sur la physique.
Un grand exemple récent de cela est de Treillis de la Chromodynamique Quantique (Lattice QCD). Ce document décrit comment le problème assez beaucoup se résume à un très petit noyau de calcul, qui a été fortement optimisé pour l'architecture PowerPC 440 sur un IBM Blue Gene/L. Chaque 440 dispose de deux Unités de police constituées, et qu'ils soutiennent certains ternaire des opérations qui sont difficiles pour les compilateurs d'exploiter. Sans ces optimisations, Lattice QCD serait beaucoup plus lent, ce qui est coûteux, lorsque votre problème nécessite des millions d'heures de calcul sur des machines coûteuses.
Si vous vous demandez pourquoi c'est important, découvrez l' article dans Science qui est sorti de ce travail. À l'aide de Lattice QCD, ces gars-là calculé la masse d'un proton à partir de principes premiers, et a montré l'an dernier que 90% de la masse provient de la force forte énergie de liaison, et le reste de quarks. C'est E=mc2 en action. Voici un résumé.
Pour l'ensemble de la ci-dessus, les candidatures sont pas conçus ou écrit 100% en assembleur -- n'est même pas proche. Mais quand les gens ont vraiment besoin de vitesse, ils se concentrent sur l'écriture, les éléments-clés de leur code à la volée sur un matériel spécifique.