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.


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é.


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

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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.