Bonjour.
Dans le cadre de ma thèse je vais bientôt débuter l'implémentation d'un gros programme de calcul (c'est pour de la physique fondamentale et c'est destiné à fonctionner sur supercalculateur et/ou sur BOINC).
Le tout sera bien entendu massivement multithreadé, et comme cela va être pratiquement "from ground", je vais essayé d'optimiser à mort toutes les fonctions de base qui vont être appelées des millions (milliards ?!?) de fois pendant l'exécution du programme...
Tout ça pour en arriver à une question très simple : soit par exemple une fonction mathématique "mathfunc(double x)" qui sera appelée des millions de fois par des centaines de threads : faut-il mieux une implémentation de ce type :
ou de ce type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 namespace Math { double mathfunc(double x); }
1) Quelles sont les différences ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class Math { public : static double mathfunc(double x); };
2) Y-a-t-il une implémentation préférable à l'autre ?
3) L'implémentation par namespace est-elle plus rapide à l'exécution que l'implémentation par classe (il faut avoir conscience que la fonction sera appelée des millions de fois)?
4) Un truc dont j'aimerai être certain : une fonction "static" dans une classe est commune à tout le programme ... mais cela ne pose-t-il pas problème lorsqu'elle est appelée simultanément par 2 threads ?
5) Y-a-t-il une autre solution à laquelle je n'aurai pas pensé et qui serait préférable ?
Merci beaucoup![]()
Partager