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.


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.


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

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.