2012-12-05 2 views
6

Wir verwenden Xcode 4.5 auf einer C++ 11-Projekt, wo wir OpenMP verwenden unsere Berechnung zu beschleunigen:Xcode 4.5 und OpenMP mit Clang (Apple-LLVM) verwendet nur einen Kern

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

Obwohl der Activity Monitor zeigt mehrere Threads von dem Programm verwendet werden, die wir beobachteten, daß nur ein Kern verwendet wird:

Screenshot of the Activity Monitor running my code

wir haben auch den gleichen Code auf Ubuntu mit gcc 4.7 ausgeführt werden, und wir beobachteten Anstoß auf allen Kernen. Könnte es sein, dass die OpenMP-Unterstützung im Apple LLVM entfernt wurde? Gibt es eine Alternative zu OpenMP? Wir können nicht zu GCC wechseln, da wir C++ 11-Funktionen verwenden.

+2

gcc unterstützt * viele * C++ 11-Funktionen, insbesondere die 4.7-Version. –

+0

Leider bin ich nicht der einzige Entwickler unter OSX und möchte GCC 4.7 nicht auf jedem Entwicklungscomputer unterstützen. – Pascal

+0

aber der apple g ++ 4.2.1 Compiler unterstützt openmp, Sie müssen den Standard Compiler in Ihren Build Optionen auf GCC 4.2 ändern. siehe https://developer.apple.com/library/mac/#documentation/DeveloperTools/gcc-4.2.1/gcc/C-Dialect-Options.html –

Antwort

11

Clang nicht unterstützt noch OpenMP (es wurde nicht entfernt - es existierte nie an erster Stelle). Sie könnten Apples Grand Central Dispatch (GCD) -Tasking-System verwenden oder stattdessen Intels Threading Building Blocks (TBB) verwenden.

Verwandte Themen