Boost programmation multi core

Boost programmation multi core - C++ - Programmation

Marsh Posté le 05-08-2008 à 13:28:47    

Bonjour,
 
J'utilise la librairie boost thread en c++ pour réaliser un programme multi-plateformes (Win, Unix et Mac) et j'aurais voulu savoir si on peut obtenir dans son code le nombre de cores de l'ordinateur sur lequel le programme tourne. Y a-t- il une fonction qui me permetterai d'obtenir cette information ?
 
Merci

Reply

Marsh Posté le 05-08-2008 à 13:28:47   

Reply

Marsh Posté le 05-08-2008 à 15:32:32    

non :/

Reply

Marsh Posté le 05-08-2008 à 16:35:10    

J'ai été confronté au même problème : le plus simple si tu utilises le compilateur gcc ou intel est d'utiliser OpenMP pour ca : il suffit d'ajouter le header 'omp.h', de linker avec GOMP (dans le cas de gcc), et d'utiliser la fonction omp_get_num_procs()
Si tu utilises le compilo microsoft sous windows, je ne sais pas s'il supporte OpenMP.

Reply

Marsh Posté le 05-08-2008 à 17:59:59    

Hmm, sur Windows tu as la variable d'environnement NUMBER_OF_PROCESSORS. De ce que j'ai pu voir sur tous les Windows de Win2000 à XP (certainement Vista aussi), elle contient une valeur correcte.

Reply

Marsh Posté le 05-08-2008 à 18:14:39    

l'avantage de la solution OpenPM c'est que ca reste multi-plateforme en évitant les #define ; après ca fait une bibliotheque en plus pour pas grand chose...

Reply

Marsh Posté le 05-08-2008 à 18:30:51    

openMP reste assez mal aisée d'emploi dans certains cas.
@tpierron : je note ton astuce ;)

Reply

Marsh Posté le 05-08-2008 à 23:15:10    

Ha ouais, tiens tu pourrais aussi rajouter Win2003 dans ma liste, parce qu'il n'y a pas grand chose entre Windows 2000 et XP [:tinostar]

Reply

Marsh Posté le 06-08-2008 à 10:55:25    

Y a aussi le nombre de thread concurrent possible :
 
std::thread::hardware_concurrency();  
 
boost::thread::hardware_concurrency();

Reply

Marsh Posté le 07-08-2008 à 11:22:05    

Bien vu Fraer...et merci ! Un truc moche en moins dans mon code ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed