Come compilare il programma OpenMP usando clang?


9

Il mio gcc si compila bene, ma clang fallisce con il seguente messaggio:

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

Ho anche installato il libomp5pacchetto e cambiato flag in -fopenmp=libomp5, anche se non ha aiutato neanche:

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

questi consigli non hanno funzionato.

Sarebbe grato per suggerimenti sull'installazione di pacchetti specifici 16.04 necessari e il passaggio di flag corrispondenti.


Quale versione di Clang stai usando? Ho lo stesso problema BTW con clang-3.8 e clang-3.9 su Ubuntu 16.10.
Bosone Z,

1
sudo apt install libomp-dev
Z boson

Finalmente, posso usare OpenMP con Clang su Ubuntu! Lo desidero da molto tempo !.
Bosone Z

Risposte:


16

Ho avuto lo stesso problema.

sudo apt install libomp-dev

Risolto il problema con 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());
}

Poi

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

Anche

clant-3.9 test.c -fopenmp

lavori.


GCC e Clang usano diverse librerie di runtime OpenMP: libgomp e libomp rispettosamente.

Il runtime di Clang è il runtime LMPV OpenMP che a sua volta si basa sul runtime Intel OpenMP (che è open source). https://www.openmprtl.org/

Sul mio sistema GCC installato omp.hsu

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

e libomp-devinsallito omp.ha

/usr/include/omp.h

Questi sono diversi file di intestazione che includono definizioni di funzioni diverse. Potrebbe essere giusto usare uno dei file di intestazione, ad esempio, omp_get_wtime()ma in generale penso che probabilmente sia meglio usare il file di intestazione che corrisponde al runtime a cui è collegato.


1
Ha lavorato alla vaniglia 16.04 con clang di stock in repository.
Bulat M.

1
Ho appena installato Ubuntu 17.04 che per impostazione predefinita è Clang 4.0. Ho dovuto ancora usare sudo apt install libomp.dev.
Bosone Z,

Se si collega accidentalmente libgomp da clang 6, il codice verrà serializzato silenziosamente.
Andrew Wagner,

2

Sembra che il file omp.h non esista nel PERCORSO del sistema . prova innanzitutto a individuare il file omp.h se non sai dove si trova:

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

E quindi eseguire questo comando per compilare il codice:

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

Ciò non risolve il problema. Non riesce ancora a trovare omp.h.
Bosone Z,

Hai trovato omp.h nel tuo sistema? puoi aggiungere l'output di questi comandi alla tua domanda?
Ghasem Pahlavan,

*.hsono file di intestazione, perché dovrebbe volerli aggiungere al suo percorso? dovrebbero essere /usr/includead esempio.
Ravexina,

1
Grazie Ghasem, installazione di libomp-dev su 16.04 risolta.
Bulat M.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.