Jak skompilować program OpenMP za pomocą clang?

9

Mój gcc kompiluje się dobrze, ale clang kończy się niepowodzeniem z następującym komunikatem:

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

Zainstalowałem również libomp5pakiet i zmieniłem flagę na -fopenmp=libomp5, choć to też nie pomogło:

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

te rekomendacje nie działały.

Byłbym wdzięczny za wskazówki dotyczące instalowania niezbędnych pakietów 16.04 i przekazywania odpowiednich flag.

Bulat M.
źródło
Jakiej wersji Clang używasz? Mam ten sam problem BTW z clang-3.8 i clang-3.9 na Ubuntu 16.10.
Z bozonem
1
sudo apt install libomp-dev
Z boson
Wreszcie mogę używać OpenMP z Clang na Ubuntu! Chciałem tego od dłuższego czasu!
Z bozonem

Odpowiedzi:

16

Miałem ten sam problem.

sudo apt install libomp-dev

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

Następnie

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

Również

clant-3.9 test.c -fopenmp

Pracuje.


GCC i Clang używają różnych bibliotek wykonawczych OpenMP: odpowiednio libgomp i libomp.

Środowisko wykonawcze Clanga to środowisko wykonawcze LLVM OpenMP, które z kolei opiera się na środowisku wykonawczym Intel OpenMP (który jest oprogramowaniem typu open source). https://www.openmprtl.org/

W moim systemie GCC jest zainstalowany omp.hna

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

i libomp-devnienasycony omp.hw

/usr/include/omp.h

Są to różne pliki nagłówkowe, które zawierają różne definicje funkcji. Może być w porządku użycie dowolnego pliku nagłówka, na przykład, omp_get_wtime()ale ogólnie myślę, że lepiej jest użyć pliku nagłówka, który odpowiada środowisku wykonawczemu, do którego jest podłączony.

Bozon Z.
źródło
1
Pracowałem nad wanilią 16.04 z zapasem akcji repo.
Bulat M.
1
Właśnie zainstalowałem Ubuntu 17.04, domyślnie Clang 4.0. Musiałem użyć sudo apt install libomp.dev.
Z bozonem
Jeśli przypadkowo podłączysz libgomp z klangu 6, twój kod zostanie po cichu serializowany.
Andrew Wagner
2

Wygląda na to, że plik omp.h nie istnieje w systemie PATH . najpierw spróbuj zlokalizować plik omp.h , jeśli nie wiesz, gdzie on jest:

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

Następnie uruchom to polecenie, aby skompilować kod:

clang -o main main.c -I/path/to/omp/folder
Ghasem Pahlavan
źródło
To nie rozwiązuje problemu. Nadal nie można znaleźć omp.h.
Z bozonem
Czy znalazłeś jakieś omp.h w swoim systemie? czy możesz dołączyć wynik tych poleceń do swojego pytania?
Ghasem Pahlavan
*.hto pliki nagłówkowe, dlaczego miałby chcieć dodać je do swojej ścieżki? powinny być /usr/includena przykład.
Ravexina
1
Dzięki Ghasem, instalacja libomp-dev 16.04 rozwiązana.
Bulat M.