it-swarm.com.de

Wie OpenMP-Programm mit clang compilieren?

Mein GCC lässt sich gut kompilieren, aber Clang schlägt mit der folgenden Meldung fehl:

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

Ich habe auch das libomp5 -Paket installiert und das Flag in -fopenmp=libomp5 geändert, obwohl es auch nicht geholfen hat:

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

diese Empfehlungen haben nicht funktioniert.

Wäre dankbar für Hinweise zur Installation notwendiger 16.04-spezifischer Pakete und zur Übergabe entsprechender Flags.

8
Bulat M.

Ich hatte das gleiche problem.

Sudo apt install libomp-dev

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

Dann

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

Ebenfalls

clant-3.9 test.c -fopenmp

funktioniert.


GCC und Clang verwenden unterschiedliche OpenMP-Laufzeitbibliotheken: libgomp und libomp.

Clangs Laufzeit ist die LLVM OpenMP Laufzeit, die wiederum auf der Intel OpenMP-Laufzeit basiert (die Open Source ist). https://www.openmprtl.org/

Auf meinem System hat GCC omp.h unter installiert

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

und libomp-dev installiert omp.h um

/usr/include/omp.h

Hierbei handelt es sich um unterschiedliche Header-Dateien, die unterschiedliche Funktionsdefinitionen enthalten. Es kann in Ordnung sein, eine der Header-Dateien für z. omp_get_wtime() aber im Allgemeinen denke ich, dass es wahrscheinlich besser ist, die Header-Datei zu verwenden, die der Laufzeit entspricht, mit der verknüpft ist.

14
Z boson

Es scheint, dass omp.h Datei nicht in Ihrem System existiert PATH. Versuchen Sie zunächst, die omp.h -Datei zu finden, wenn Sie nicht wissen, wo sie sich befindet:

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

Führen Sie dann diesen Befehl aus, um Ihren Code zu kompilieren:

clang -o main main.c -I/path/to/omp/folder
2
Ghasem Pahlavan