Comment puis-je exécuter OpenMP sur Mac OSX 10.11 afin d’exécuter des scripts via terminal ?
J'ai installé OpenMP: brew install clang-omp
.
Lorsque j'exécute, par exemple: gcc -fopenmp -o Parallel.b Parallel.c
, l'expression suivante retourne: fatal error: 'omp.h' file not found
J'ai aussi essayé: brew install gcc --without-multilib
mais malheureusement, ceci a finalement retourné le texte suivant (après avoir installé quelques dépendances):
The requested URL returned error: 404 Not Found
Error: Failed to download resource "mpfr--patch"
Des solutions recommandées?
Sur un mac, la commande gcc est un lien symbolique vers Clang. Donc, en appelant gcc -fopenmp -o your_program your_program.c
, vous utilisez en fait Clang, qui n’a pas jusqu’à présent pris en charge OpenMP.
Les versions plus récentes de Clang prennent en charge OpenMP selon this post (où vous pouvez également trouver des instructions sur la manière de le configurer).
Par contre, si vous voulez toujours utiliser gcc, je peux vous guider à travers les étapes qui ont fonctionné pour moi.
Installez gcc avec infusion. La commande que vous avez utilisée devrait fonctionner: brew install gcc --without-multilib
Sinon, si brew dit que gcc est déjà installé, vous pouvez essayer brew reinstall gcc --without-multilib
Comme vous l'avez peut-être noté, si vous ne spécifiez pas --without-multilib
brew, vous êtes averti qu'OpenMP risque de ne pas fonctionner.
Trouvez l'emplacement du gcc nouvellement installé. Brew ajoute le numéro de version à gcc afin qu'il ne soit pas en conflit avec celui installé par les outils de ligne de commande. Vous trouverez le lien symbolique dans usr/local/bin
. Dans mon cas, c'est usr/local/bin/gcc-5
. Si vous cliquez avec le bouton droit de la souris et choisissez "Afficher l'original", l'exécutable gcc-5 doit s'afficher dans /usr/local/Cellar/gcc/5.3.0/bin/gcc-5
(les numéros de version peuvent être différents).
Vous devez maintenant en informer votre système. Lorsque vous appelez un compilateur, votre bash examinera /usr/bin
par défaut et non /usr/local/bin
. Vous devez ajouter ce répertoire à votre $ PATH. Cela peut être facilement fait avec la commande:
PATH=/usr/local/bin:$PATH
Maintenant, vous devriez pouvoir compiler avec OpenMP activé en utilisant:
gcc-5 -fopenmp -o your_program your_program.c
Remarque: gcc-5 est la version que j'ai installée, la vôtre peut différer.
installer clang-omp
brew install clang-omp
assurez-vous que vous utilisez l'outil de ligne de commande xcode
xcode-select --install
J'ai eu une erreur lors de l'exécution d'un exemple de code openmp
/usr/local/opt/libiomp/include/libiomp/omp.h:139:21: error: expected ';' after top level declarator extern void __ KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);
Supprimez simplement un espace présent entre __ et KAI du fichier
Maintenant, utilisez la commande
clang-omp -fopenmp helloopenmp.c
et lancez le code suivant
#include <omp.h>
#include <stdio.h>
int main() {
#pragma omp parallel
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
Vous devriez obtenir une sortie semblable à celle-ci
Hello from thread 3, nthreads 4
Hello from thread 2, nthreads 4
Hello from thread 0, nthreads 4
Hello from thread 1, nthreads 4
A travaillé sur OS X 10.11.3 et avec la mise à jour de la préparation du 18 février 2016
brew reinstall gcc --without-multilib
gcc-8 -Wall -fopenmp your-parallel-program.c
Notez que le fichier gcc-8 regarde l'installation de la version version, le vôtre peut être gcc-7 ou gcc-9
==> Pouring gcc-8.2.0.high_sierra.bottle.1.tar.gz
???? /usr/local/Cellar/gcc/8.2.0: 1,495 files, 344.8MB
C'est tout!
Installez gcc en utilisant brew.
brew install gcc
Vérifiez que gcc est installé.
$which g++-7
/usr/local/bin/g++-7
Changer le compilateur cmake cxx.
cmake -DCMAKE_CXX_COMPILER=g++-7
make
Peut-être que cela vous aidera.
brew install cmake
brew install gcc --without-multilib
cmake -DCMAKE_CXX_COMPILER=g++-6 ..
make -j
Après avoir installé gcc:
brew install gcc --without-multilib
et exportation PATH:
export PATH=/usr/local/bin:$PATH
Vous devrez peut-être exporter CC, ce qui fonctionne pour moi:
export CC=/usr/local/bin/gcc
Ceci peut-être gcc-7, ou autre chose.