J'ai travaillé sur du code TRÈS intensif en calculs en (gasp!) C #.
Je construis une implémentation GPGPU de FDTD pour la modélisation optique. Sur un petit cluster (128 processeurs), la plupart de nos simulations prennent des semaines à s'exécuter. Les implémentations GPU, cependant, ont tendance à fonctionner environ 50 fois plus vite - et c'est sur une carte NVidia de qualité grand public. Nous avons maintenant un serveur avec deux cartes à double processeur GTX295 (plusieurs centaines de cœurs), et nous recevrons bientôt des Teslas.
Comment cela se rapporte-t-il à votre langue? De la même manière que le code FDTD C ++ que nous utilisions auparavant était lié au processeur, ceux-ci sont liés au GPU, de sorte que la différence ( très faible) de puissance entre le code géré et le code natif n'entre jamais en jeu. L'application C # agit comme un conducteur - chargeant les noyaux OpenCL, transmettant des données vers et depuis les GPU, fournissant l'interface utilisateur, les rapports, etc. - toutes les tâches qui sont pénibles en C ++.
Au cours des années passées, la différence de performances entre le code managé et le code non managé était suffisamment importante pour qu'il soit parfois utile de supporter le terrible modèle d'objet de C ++ pour obtenir les quelques pour cent de vitesse supplémentaires. De nos jours, le coût de développement de C ++ vs C # dépasse de loin les avantages pour la plupart des applications.
De plus, la plupart de vos différences de performances ne proviendront pas de votre choix de langue, mais des compétences de votre développeur. Il y a quelques semaines, j'ai déplacé une opération de division unique de l'intérieur d'une boucle à triple emboîtement (traversée de matrice 3D), ce qui a réduit le temps d'exécution pour un domaine de calcul donné de 15%. C'est le résultat de l'architecture du processeur: la division est lente, ce qui est l'un de ces visages dont vous avez juste besoin de trouver quelque part.