2012-12-05 19 views
6

Stiamo usando Xcode 4.5 su un progetto C++ 11 dove si usa OpenMP per accelerare il nostro calcolo:Xcode 4.5 e OpenMP con Clang (Apple LLVM) utilizza un solo core

#pragma omp parallel for 
for (uint x=1; x<grid.width()-1; ++x) { 
    for (uint y=1; y<grid.height()-1; ++y) { 
     // code 
    } 
} 

Anche se l'Activity Monitor spettacoli più thread utilizzati dal programma abbiamo osservato che solo un core viene utilizzato:

Screenshot of the Activity Monitor running my code

abbiamo anche eseguito lo stesso codice su Ubuntu usando GCC 4.7 e abbiamo osservato contesa su tutti i core. Potrebbe essere che il supporto OpenMP sia stato rimosso in Apple LLVM? C'è un'alternativa a OpenMP? Non possiamo passare a GCC poiché utilizziamo le funzionalità di C++ 11.

+2

gcc supporta * un sacco * di funzionalità C++ 11, in particolare la versione 4.7. –

+0

sfortunatamente non sono l'unico sviluppatore su OSX e non voglio supportare GCC 4.7 su ogni sviluppatore. – Pascal

+0

ma il compilatore apple g ++ 4.2.1 supporta openmp, è necessario modificare il compilatore predefinito nelle opzioni di compilazione in GCC 4.2. vedere https://developer.apple.com/library/mac/#documentation/DeveloperTools/gcc-4.2.1/gcc/C-Dialect-Options.html –

risposta

11

Clang non ha ma supporta OpenMP (non è stato rimosso, non è mai esistito in primo luogo). È possibile utilizzare il sistema di tasking di Apple Grand Central Dispatch (GCD) oppure è possibile utilizzare Intel Threading Building Blocks (TBB).