J'engage mon passage à Visual Studio 2005 (VC 8.0). Ma principale motivation repose sur le support d'OpenMP par le compilateur, une API offrant de bonnes possibilités dans la gestion des processeurs multi-cores.
Ce passage a commencé par le constat d'amélioration du support de la norme ISO98 du C++, notamment au niveau des templates.
S'en est suivi des tests de performances sur mon raytracer qui m'a paru être un bon représentant des performances que je recherche, c'est à dire le rendu 3D.
Les tests ont étés réalisés avec des programmes compilés en mode release et consistent à générer une image en 320*240 de la scene décrite par le fichier "full.xml". Le même code source est utilisé et compilé pour Visual C++ 2003 (VC 7.1), Visual C++ 2005 (VC 8.0), GCC 3.2.3 et GCC 3.4.2 avec les options décritent dans le résultat et le tout sous Windows XP SP2. Le résultat donne le temps en secondes pour la génération de l'image.
Quelques remarques sur les paramètres utilisés. L'option /fp est une nouvelle option de VC 8.0, destinée au nombre flottant. Il existe plusieurs valeures dont "precise" et "fast". "fast" est une option qui dégrade la précision des nombres flottants pour améliorer les performances. Cette option est équivalente à l'option -ffast-math de GCC. La valeur "precise" utilise les nombres flottants normalisés IEEE. VC 7.1 ne support pas ces optimisations basérs sur des flottants dégradés donc si l'on veut justement comparer VC 7.1 et VC 8.0, je pense qu'il faut comparé avec la compilation VC 8.0 utilisant l'option /fp:precise.
Les résultats sont ci-dessous et se passe de commentaires mais je les ai tout de même les chiffrés au moyens d'un ratio indique la vitesse des programmes générés via les différents compilateurs. Ce ratio est visible sur le graph suivant.
ERRATUM : Les tests sur VC7.1 ont étés réalisés en mode "fast" et non "precise" comme je le pensais. En effet, VC 7.1 utilise par défaut des optimisation non standard sur les nombres flottants, pour passer en mode "precise" il faut utilise l'option "/op".