J'ai un petit programme C++ utilisant OpenMP. Il fonctionne très bien sur Windows7, Core i7 avec VisualStudio 2010. Sur un iMac avec Core i7 et g ++ v4.2.1, le code s'exécute beaucoup plus lentement en utilisant 4 threads qu'avec un seul. Le même comportement "plus lent" est exihibé sur 2 autres machines Red Hat utilisant g ++. Voici le code:OpenMP 'plus lent' sur iMac? (C++)
int iHundredMillion = 100000000;
int iNumWorkers = 4;
std::vector<Worker*> workers;
for(int i=0; i<iNumWorkers; ++i)
{
Worker * pWorker = new Worker();
workers.push_back(pWorker);
}
int iThr;
#pragma omp parallel for private (iThr) // Parallel run
for(int k=0; k<iNumWorkers; ++k)
{
iThr = omp_get_thread_num();
workers[k]->Run((3)*iHundredMillion, iThr);
}
Je compile avec g ++ comme ceci:
g++ -fopenmp -O2 -o a.out *.cpp
Quelqu'un peut-il me dire quelle erreur stupide que je fais sur la plate-forme * nix?
De combien parlons-nous plus lentement? Et avez-vous testé si la même chose se produit en utilisant des threads "réguliers" au lieu de OMP? Comment est défini 'Worker'? (et que fait 'Run', en particulier?) – jalf
Il faut environ 2-3 fois plus de temps pour fonctionner avec * Nix avec OpenMP. Oui, je l'ai testé avec un thread 'régulier' (pas OpenMP). –
@MrTurtle: et le résultat était ...? ;) – jalf