OS X 10.8, llvm, OpenMP avec CMake
J'ai juste mis à jour pour OS X 10.8 "Mountain Lion" et je commence à regretter de l'avoir fait.
Je ne suis plus capable de construire mon (simple) du code parallèle qui utilise OpenMP.
En regardant ici et là, j'ai compris qu'Apple n'est pas plus à l'aide de 'gcc' mais 'llvm' - très probablement due à des problèmes d'homologation. Malheureusement 'llvm" n'a pas (encore?) soutien OpenMP.
Je ne peux pas croire de nombreux programmes basés sur OpenMP ne sera pas exécuté plus sur OS X, donc ma question est: comment puis-je activer OpenMP dans la Montagne du Lion?
Après la lecture de l'excellente réponse de Hristo Iliev, je pense que je manque de plus que je pensais au départ.
Je ne suis pas à l'aide de XCode. Le bâtiment est basée sur CMake et faire/gcc. Hier, j'ai installé gcc 4.2 via macports, mais - comme aujourd'hui - mon code est encore en forme source, parce que - pour des raisons étranges - je ne suis pas en mesure de changer la compilation de gcc (même les erreurs liées à OpenMP).
Le problème maintenant est que CMake continue d'utiliser le compilateur llvm.
Dans la racine CMakeLists.txt j'ai ajouté les deux lignes suivantes:
set(CMAKE_C_COMPILER "/opt/local/bin/gcc-apple-4.2")
set(CMAKE_CXX_COMPILER "/opt/local/bin/gcc-apple-4.2")
et j'ai aussi ajouté deux environnements variables:
export CXX=/opt/local/bin/gcc-apple-4.2
export CC=/opt/local/bin/gcc-apple-4.2
Quand CMake essaie de trouver OpenMP ( FIND_PACKAGE(OpenMP) ) j'obtiens le résultat suivant:
-- The compiler is /opt/local/bin/gcc-apple-4.2
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
[...]
CMake Error at /opt/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS)
Call Stack (most recent call first):
/opt/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
/opt/local/share/cmake-2.8/Modules/FindOpenMP.cmake:159 (find_package_handle_standard_args)
demo/CMakeLists.txt:8 (FIND_PACKAGE)
J'ai essayé d'exécuter /opt/local/bin/gcc-apple-4.2
manuellement et il échoue en raison d'un manque de libgomp.
Ce qui concerne
J'ai trouvé cette question, mais il était lié à l'installation des outils de ligne de commande. Maintenant j'ai vu la réponse liée à l'installation de la vraie gcc. Je vous remercie.
Vous n'avez pas à ajouter de la GCC 4.2 de macports, car il est livré avec XCode outils de ligne de Commande. Vous n'avez qu'à installer en plus de l'interface graphique. Encore, que vous n'avez pas utiliser XCode, je recommande fortement que vous construisez votre propre GCC 4.7.2 - la dernière et la plus grande avec le soutien de OpenMP 3.1 caractéristiques 🙂
J'ai installé XCode et ses outils de ligne de commande avant de commencer à compiler mon code. Je suppose qu'il y a une façon de passer le compilateur par défaut (je vais vérifier).
J'ai téléchargé le code source de gcc 4.7.2. Le compilateur doit-je utiliser?
OriginalL'auteur Antonio Sesto | 2013-02-28
Vous devez vous connecter pour publier un commentaire.
LLVM est un compilateur cadre que Apple utilise intensivement dans OS X (notamment lors de la mise en œuvre OpenGL), pas un compilateur lui-même. Il y a deux LLVM interfaces disponibles dans Xcode - le vieux GCC basée sur un
llvm-gcc
(qui prend en charge OpenMP 2.5) et de la nouvelleclang
(qui ne prend pas en charge OpenMP).clang
possède une vaste analyse de code statique capacités et aussi beaucoup plus agréable de rapport d'erreurs, surtout avec du code C++. Pour la plupart c'est la raison pour Apple investit en elle et en s'éloignant du GCC (le projet FreeBSD, de l'autre côté, cherche à remplacer GCC avec clang pour des raisons purement lié à la licence raisons). Il y a un projet en coursclomp
(à ne pas confondre avec Intel Cluster OpenMP) qui vise à créer un OpenMP-version prenant en charge desclang
, mais il est loin d'être mature.Si vous n'avez pas besoin de nouvelles OpenMP constructions explicites de tâches et peut vivre avec une certaine bugs, vous pouvez toujours utiliser l'ancien CCAG frontend. Il suffit de passer le compilateur de la suite dans les paramètres de projet LLVM GCC 4.2:
Celui-ci est basé sur la très ancienne GCC 4.2.1 et ne semble plus être développé. Si vous avez besoin d'une version plus récente de GCC, il suffit de construire un. Malheureusement je ne peux pas vous fournir de l'information sur la façon de l'intégrer dans Xcode. Il fonctionne pour moi sur la ligne de commande avec GCC 4.7.1 et OS X 10.8.2 (et je ne suis pas d'utiliser Xcode beaucoup).
OriginalL'auteur Hristo Iliev
Juste ajouter quelques mots à l'excellent Hristo réponse: vous pouvez installer gcc via MacPorts. C'est beaucoup plus simple que la compilation de tout ce par les mains (et de la compilation de gcc à partir de zéro peut être vraiment tâche non triviale en raison des dépendances, etc).
Installer MacPorts, faire "sudo port install gcc47", attendez quelques heures et vous vous retrouverez avec gcc-mp-4.7 qui est capable de compiler votre code OpenMP.
pour OpenMP en charge l'utilisation
$ brew install gcc --without-multilib
OriginalL'auteur Anton Korobeynikov