Salut Rémi! Quoi de neuf? C++ est un langage de programmation orienté objet -> différent de la programmation séquencielle. L'orienté objet tend à découper un programme en tâches et responsabilités distinctes. Sur ce point, l'exécution de certaines tâches pourraient s'exécuter simultanément sur plusieurs CPU vu la structure du langage. MAIS dans tes classes C++, tu vas retrouver des morceaux de code séquentiel. Il est clair que ce code là n'a aucune raison de s'exécuter sur deux CPU différents. Si tu as une boucle gourmande et qui dure longtemps, à toi de voir comment distribuer le calcul entre plusieurs process pour profiter de tes CPU. J'entends par distribuer le calcul un truc du genre si tu as for (i = 0; i < 100; i++) mon_calcul_bien_lourd(); Essaye de te ramener à for (i = 0; i < 50; i++) mon_calcul_bien_lourd(); dans le process A et for (i = 50; i < 100; i++) mon_calcul_bien_lourd(); dans le process B. Alors oui tu gagneras en performances et tes CPU montreront toute leur puissance. Encore faut-il que ce genre de distribution soit possible et n'amène pas trop d'opérations pour garder la cohérence du calcul et de son résultat. Tu ne gagneras pas un facteur x où x est le nombre de CPU. A cause du coût qu'une exécution répartie va amener. Maintenant au niveau de gcc, il faut savoir comment fonctionne un CPU En gros (très gros), un CPU possède une file d'attente pour les instructions. Dans cette file, toutes les instructions ne peuvent pas se suivre. L'exemple a = b + e; c = a + c; est typique. Il y a des règles assez complexes pour règler ce genre de cas. Cette façon de faire s'appelle le pipelining. Ce que gcc commence à savoir faire, c'est compiler le code source en bloc d'instructions indépendant pour pouvoir utilisé les pipelines. Evidement, les règles sont fonctions du nombre de niveau du pipeline (le nombre de places dans la file) et le nombre de niveau est fonction du CPU. Pour ce qui est de l'opération de compilation, si tu utilises make, ajouter le flag -j 2 permet de compiler en utilisant au maximum tes deux CPUs. J'espère que cela t'aide un peu tout de même, n'hésite pas à me contacter si tu as vraiment besoin. A bientôt Benoit On Wed, Apr 24, 2002 at 12:30:02PM, Jean-Marie Lambert wrote: > Bonjour ! > > > gcc ne peut pas le faire pour toi, comment va-t-il savoir > > quel code il peut séparer en deux applis indépendantes ? > > Mon programme est consitué en grandes parties de boucles, > et il me semblait qu'il existait des compilateurs suffisament > intelligents pour voir (dans mon cas précis) quelles boucles > pouvaient être réalisées indépendamment des autres. > > Dites-moi si je me trompe... > > Merci, > > Rémi LAMBERT > _______________________________________________ > Linux Mailing List > LCP - 11 Mai - http://www.unixtech.be/lcp.php > Archives: http://www.unixtech.be/mailman/listinfo/linux ---end quoted text--- -- Benoit JOSEPH Manex SPRL: benoit.joseph@manex.be Perso: joker@baby-linux.net benoit.joseph@teledisnet.be
Attachment:
pgp01098.pgp
Description: PGP signature