web-dev-qa-db-fra.com

Comment compiler le programme OpenMP en utilisant clang?

Mon gcc se 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 aussi installé le paquet libomp5 et changé l'indicateur en -fopenmp=libomp5, bien que cela n'ait 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 les recommandations n'ont pas fonctionné.

Je vous serais reconnaissant de nous donner des conseils sur l’installation des packages spécifiques nécessaires à la 16.04 et sur la transmission des indicateurs correspondants.

8
Bulat M.

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());
}

Ensuite

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

Également

clant-3.9 test.c -fopenmp

travaux.


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

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

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

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

et libomp-dev insalled omp.h à

/usr/include/omp.h

Ce sont des fichiers d'en-tête différents qui incluent différentes définitions de fonction. Vous pouvez 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 au moteur d'exécution lié.

14
Z boson

Il semble que le fichier omp.h n'existe pas dans votre système CHEMIN. 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
2
Ghasem Pahlavan