Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2709 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Multithread et core 2 duo

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Multithread et core 2 duo

n°1758796
Theorie du​ Kaos
Agent of Chaos
Posté le 12-07-2008 à 16:42:21  profilanswer
 

:hello:  
 
Je souhaite accélerer le code C++ que j'ai concu dans ma thèse, en utilisant au mieux le core 2 duo de mon mac.  
 
Le coeur du moteur de calcul est clairement parallélisable, j'ai deja la version parallèle sur papier. Mais je voudrais savoir quelles sont les meilleures bibliothèques C++ a rajouter sous Xcode pour pouvoir lancer un thread de calcul sur chacun des deux cores. J'ai entendu parler de Boost, est ce simple a utiliser ?
 


---------------
MK DS 459634-483247
mood
Publicité
Posté le 12-07-2008 à 16:42:21  profilanswer
 

n°1758818
Theorie du​ Kaos
Agent of Chaos
Posté le 12-07-2008 à 19:13:44  profilanswer
 

C'est le spécialiste du multithread ? :d
 
ce que je voudrais faire c'est decouper un domaine de calcul (éléments finis) en 2 et d'attribuer les calculs sur chaque moitié a un core, j'ai quelques notions de threads mais c'est tout  [:fat dog]


Message édité par Theorie du Kaos le 12-07-2008 à 19:15:11

---------------
MK DS 459634-483247
n°1758856
Joel F
Real men use unique_ptr
Posté le 12-07-2008 à 21:04:36  profilanswer
 

en gros boost::thread te permets tres simplement à partir d'un objet effectuant ton calcul de lancer un groupe de X thread.

 

Par contre avant de se lacher sur les threads, t'as optimisé en SIMD, vérifier la localité de tes caches et vérifier la complexité des algos ?
si trop long/trop complexe à expliquer => MP


Message édité par Joel F le 12-07-2008 à 21:05:41
n°1758885
Theorie du​ Kaos
Agent of Chaos
Posté le 12-07-2008 à 22:42:19  profilanswer
 

ou la non j'ai pas fait tout ca :ouch:  
 
je serais pas contre quelques liens a ce sujet si tu as ca sous la main :o
 
Grosso modo mon code travaille sur des images de grandes dimensions, et ce que j'aimerais faire c'est découper les images en plusieurs morceaux et confier chaque morceau a chaque core. a la fin de chaque calcul, je veux imposer des conditions de continuité entre les solutions calculée sur les bords des morceaux ... voila, donc je verrai des threads s'occuper de calculer les solutions de mes equations sur des morceaux d'images et une fois les threads terminés, je recollerais le tout ...
 
apres j'ai une grosse fonction qui prends un certain nombre de parametres, qui s 'occupe de faire mon calcul. J'imagine qu'il faudrait appeller les threads avec cette fonction , les seuls parametres changeant etant les morceaux d'images sur lesquels je veux que chaque core se concentre


Message édité par Theorie du Kaos le 12-07-2008 à 22:44:22

---------------
MK DS 459634-483247
n°1758893
Joel F
Real men use unique_ptr
Posté le 12-07-2008 à 22:57:48  profilanswer
 

pas de lien mais des cours. Chercher les cours de prog SIMD de lionel lacassagne pr tout ce qui est SIMD ou check ma signature.
Le reste j'ai aps de lien, tout dans la tete. Je te ferais un topo lundi au calme.

 

Sinon question, comment gere tu la memoire de tes images (en terme de SDD) ?


Message édité par Joel F le 12-07-2008 à 23:00:47
n°1759084
Theorie du​ Kaos
Agent of Chaos
Posté le 13-07-2008 à 20:54:50  profilanswer
 

je cherche merci :)
 
les images je les gere avec OpenCV pour le moment mais j'envisage de passer sur une autre lib. J'ai pas trop regardé les details d'implémentation des images mais je crois que ce sont de betes pointeurs sur des matrices


Message édité par Theorie du Kaos le 13-07-2008 à 20:57:31

---------------
MK DS 459634-483247
n°1759093
Joel F
Real men use unique_ptr
Posté le 13-07-2008 à 21:30:57  profilanswer
 

openCV v_v mouais :/ pointeur 1D donc avec calcul d'offset :/

n°1759116
Theorie du​ Kaos
Agent of Chaos
Posté le 13-07-2008 à 23:12:34  profilanswer
 

je voudrais passersur CImg ;)


---------------
MK DS 459634-483247
n°1759117
PacoDL
Posté le 13-07-2008 à 23:16:00  profilanswer
 

Je botte peut-être à côté mais MPI peut aussi convenir et c'est assez facile d'accès si mes souvenirs sont bons.
 
Source :
http://www.sunwizard.net/forum/viewtopic.php?t=2334&sid=2b6a7a5aadae4f75355d2a4811dc9635

n°1759143
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 09:23:38  profilanswer
 

non, non, non. Avant de sortir l'artillerie, y  assez de choses à optimiser.
et MPI fait office d'ours polaire vis à vis de boost::thread.

 
Theorie du Kaos a écrit :

je voudrais passersur CImg ;)


La bonne blague :o ;)

 

Bon tiens moi au courant de ce qui te manque comme infos


Message édité par Joel F le 14-07-2008 à 09:24:06
mood
Publicité
Posté le 14-07-2008 à 09:23:38  profilanswer
 

n°1759148
jromang
Posté le 14-07-2008 à 09:47:05  profilanswer
 

Il y a ca aussi, dans un esprit plus C++ que les threads : http://www.intel.com/cd/software/p [...] 294797.htm

n°1759154
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 10:07:03  profilanswer
 

guère plus que Boost::thread qui reste très orienté objet ;)

n°1759256
Theorie du​ Kaos
Agent of Chaos
Posté le 14-07-2008 à 18:57:03  profilanswer
 

Je regarde boost::bind pour pouvoir mettre des fonctions a arguments dans un thread, je dois avoir une vingtaine d'arguments a passer a ma fonction, mais le compilo me dit que boost::bind ne peut pas prendre tous ces arguments ... comment je fais pour passer une liste d'arguments quelconques ?


---------------
MK DS 459634-483247
n°1759259
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 19:01:10  profilanswer
 

bah tu fait un foncteur qui n'aura aps besoin de passer par bind ;)

n°1759260
Theorie du​ Kaos
Agent of Chaos
Posté le 14-07-2008 à 19:01:33  profilanswer
 

c'est a dire :??:
 
edit : voila ce que j'ai essayé :
 
thread right_thread(boost::bind(OpticalFlow, _1, _2, _3, _4, _5,
            _6, _7, _8, _9, _10, _11, _12,
            _13, _14, _15, _16, _17, _18,
            _19, _20, _21)(logfile,
               PyramidEta,
               PyramidLevels,
               Il0_r_pyramid,  
               Ilt_r_pyramid,
               PyramidLevelOF,
               U_right_start,  
               V_right_start,
               PyramidLevelSF,
               U_right_end,
               V_right_end,
               h,
               EpsilonOuter,
               EpsilonInner,
               EpsilonSOR,
               MaxIterOuter,
               MaxIterInner,
               MaxIterSOR,
               OmegaSOROF,
               AlphaOF,
               Gamma
               ));
 
Mais apparemment on ne peut pas aller au dela de l'argument _9 :??: (_10 n'est pas reconnu)


Message édité par Theorie du Kaos le 14-07-2008 à 19:11:07

---------------
MK DS 459634-483247
n°1759267
Joel F
Real men use unique_ptr
Posté le 14-07-2008 à 19:22:09  profilanswer
 

solution 1 : une structure :E

 

solution 2 :

 
Code :
  1. class optical_flow
  2. {
  3.   public :
  4.   opticalFlow( /* ta grosse lise d'argument */ )
  5.   {
  6.     // copies (/!\ donc des param dans tes membres
  7.   }
  8.   void operator()()
  9.   {
  10.      // appel de ta fonction avec les membres en arguments
  11.   } 
  12. private:
  13. // les membres contenant tes arguments
  14. };
 

tu instancie cette classe pr chaque thread et tu passe chaque instance à un thread différent. Attention au fait que boost thread fait des deep copie, donc verifie bien que tu passe des réf. ou que tes parametres peuvent etre copiés sans pb de perfs.

 

et opticalFlow, si c'ets ce que je pense, tu peut le vectoriser aussi.


Message édité par Joel F le 14-07-2008 à 19:30:26
n°1759268
Theorie du​ Kaos
Agent of Chaos
Posté le 14-07-2008 à 19:24:49  profilanswer
 

Je crois que j'ai compris , je vais essayer et je te dis :d  
 
merci infiniment :jap:


---------------
MK DS 459634-483247
n°1761747
Theorie du​ Kaos
Agent of Chaos
Posté le 18-07-2008 à 19:16:40  profilanswer
 

Bon ben ca marche super bien, merci beaucoup :jap:


---------------
MK DS 459634-483247
n°1761752
Joel F
Real men use unique_ptr
Posté le 18-07-2008 à 19:36:06  profilanswer
 

:) ca donne quoi en teme de gain ? JE suppose que tu n'as que threader ?

n°1761856
Theorie du​ Kaos
Agent of Chaos
Posté le 19-07-2008 à 10:06:29  profilanswer
 

J'ai pas encore fait de mesures precises mais je dois gagner minimum 30% en temps de calcul a vue de nez, ca peut etre plus faut que je mette un timer pour comparer les versions mono- et bithread
 
Et oui j'ai encore de l'optimisation a faire sur le code donc je peux espere encore mieux :jap:  


---------------
MK DS 459634-483247
n°1761875
Joel F
Real men use unique_ptr
Posté le 19-07-2008 à 11:19:27  profilanswer
 

si ton code est vraiment indépendant tu devrais dépasser les 1.3 de gain je pense.

n°1765509
Theorie du​ Kaos
Agent of Chaos
Posté le 27-07-2008 à 17:59:28  profilanswer
 

je vais voir ca, je faisais une pause redaction de these et je laissais mon code reposer :d


---------------
MK DS 459634-483247
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Multithread et core 2 duo

 

Sujets relatifs
livre multithread ?multithread python
Questions C++ : prog Linux/Windows, multitache/multithread[C# .NET] Probleme client server multithread
question sur les multi core et c++[Eclipse RCP] org.eclipse.core.resources introuvable! Comment faire ?
dual core, quad core, et programmationProblème Internet sur Fedora Core
Faire un programme en C++ pour les processeurs Dual Coregestion des variables dans une dll multithread ?
Plus de sujets relatifs à : Multithread et core 2 duo


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR