Comment compiler le programme OpenMP en utilisant clang?

9

Mon gcc compile bien, mais clang échoue avec le message suivant:

clang -fopenmp=libomp -o main main.c
main.c:5:10: fatal error: 'omp.h' file not found

J'ai également installé le libomp5package et changé le drapeau en -fopenmp=libomp5, même si cela n'a pas aidé non plus:

clang -fopenmp=libomp5 -o main main.c
clang: error: unsupported argument 'libomp5' to option 'fopenmp='
clang: error: unsupported argument 'libomp5' to option 'fopenmp='

ces recommandations n'ont pas fonctionné.

Serait reconnaissant des conseils sur l'installation des packages spécifiques 16.04 nécessaires et la transmission des drapeaux correspondants.

Bulat M.
la source
Quelle version de Clang utilisez-vous? J'ai le même problème BTW avec clang-3.8 et clang-3.9 sur Ubuntu 16.10.
Z boson du
1
sudo apt install libomp-dev
Z boson
Enfin, je peux utiliser OpenMP avec Clang sur Ubuntu! Je le veux depuis longtemps!.
Z boson du

Réponses:

16

J'ai eu le même problème.

sudo apt install libomp-dev

Corrigé avec Ubuntu 16.10

//test.c
#include "omp.h"
#include <stdio.h>

int main(void) {
  #pragma omp parallel
  printf("thread %d\n", omp_get_thread_num());
}

alors

clang test.c -fopenmp
./a.out
thread 0
thread 5
thread 2
thread 1
thread 7
thread 3
thread 4
thread 6

Aussi

clant-3.9 test.c -fopenmp

travaux.


GCC et Clang utilisent différentes bibliothèques d'exécution OpenMP: libgomp et libomp respectivement.

Le runtime de Clang est le runtime LLVM OpenMP qui à son tour est basé sur le runtime Intel OpenMP (qui est open source). https://www.openmprtl.org/

Sur mon système GCC installé omp.hà

/usr/lib/gcc/x86_64-linux-gnu/6/include/omp.h

et libomp-devinsallé omp.hà

/usr/include/omp.h

Il s'agit de différents fichiers d'en-tête qui incluent différentes définitions de fonctions. Il peut être correct d'utiliser l'un ou l'autre fichier d'en-tête, par exemple, omp_get_wtime()mais en général, je pense qu'il est probablement préférable d'utiliser le fichier d'en-tête qui correspond à l'environnement d'exécution auquel il est lié.

Z boson
la source
1
Travaillé sur vanilla 16.04 avec stock clang en repos.
Bulat M.
1
Je viens d'installer Ubuntu 17.04 qui est par défaut Clang 4.0. Je devais encore utiliser sudo apt install libomp.dev.
Z boson
Si vous liez accidentellement libgomp de clang 6, votre code sera sérialisé en silence.
Andrew Wagner
2

Il semble que le fichier omp.h n'existe pas dans votre système PATH . essayez d'abord de localiser le fichier omp.h si vous ne savez pas où il se trouve:

find / -name 'omp.h' -type f

Et puis exécutez cette commande pour compiler votre code:

clang -o main main.c -I/path/to/omp/folder
Ghasem Pahlavan
la source
Cela ne règle pas le problème. Il ne peut toujours pas trouver omp.h.
Z boson du
Avez-vous trouvé des omp.h dans votre système? pouvez-vous ajouter la sortie de ces commandes à votre question?
Ghasem Pahlavan
*.hsont des fichiers d'en-tête, pourquoi voudrait-il les ajouter à son chemin? ils devraient être /usr/includepar exemple.
Ravexina
1
Merci Ghasem, l'installation de libomp-dev le 16.04 a été résolue.
Bulat M.