clang을 사용하여 OpenMP 프로그램을 컴파일하는 방법은 무엇입니까?


9

내 gcc는 잘 컴파일되지만 다음 메시지와 함께 clang이 실패합니다.

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

또한 libomp5패키지 를 설치 하고 플래그를로 변경 -fopenmp=libomp5했지만 도움이되지 않았습니다.

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

이러한 권장 사항이 작동하지 않았습니다.

필요한 16.04 특정 패키지를 설치하고 해당 플래그를 전달하는 것에 대한 힌트를 주셔서 감사합니다.


어떤 Clang 버전을 사용하고 있습니까? 우분투 16.10에서 clang-3.8 및 clang-3.9와 동일한 문제 BTW가 있습니다.
Z boson

1
sudo apt install libomp-dev
Z boson

마지막으로 우분투에서 Clang과 함께 OpenMP를 사용할 수 있습니다! 나는 이것을 오랫동안 원했다!.
Z boson

답변:


16

나는 같은 문제가 있었다.

sudo apt install libomp-dev

우분투 16.10으로 수정

//test.c
#include "omp.h"
#include <stdio.h>

int main(void) {
  #pragma omp parallel
  printf("thread %d\n", omp_get_thread_num());
}

그때

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

또한

clant-3.9 test.c -fopenmp

공장.


GCC와 Clang은 서로 다른 OpenMP 런타임 라이브러리를 사용합니다 : libgomp와 libomp.

Clang의 런타임은 LLVM OpenMP 런타임이며 이는 Intel OpenMP 런타임 (오픈 소스)을 기반으로합니다. https://www.openmprtl.org/

내 시스템에 GCC 설치 omp.h

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

libomp-devinsalled omp.h에서

/usr/include/omp.h

이들은 다른 함수 정의를 포함하는 다른 헤더 파일입니다. 예를 들어 헤더 파일 omp_get_wtime()을 사용하는 것이 좋을 수도 있지만 일반적으로 연결된 런타임에 해당하는 헤더 파일을 사용하는 것이 좋습니다.


1
바닐라 16.04에서 repos의 스톡 클랜으로 작업했습니다.
Bulat M.

1
방금 우분투 17.04를 설치했는데 기본값은 Clang 4.0입니다. 나는 아직도 사용해야했다 sudo apt install libomp.dev.
Z boson

실수로 clang 6의 libgomp를 연결하면 코드가 자동으로 직렬화됩니다.
앤드류 와그너

2

omp.h 파일이 시스템 PATH에 존재하지 않는 것 같습니다 . omp.h 파일의 위치를 모르는 경우 먼저 omp.h 파일 을 찾으 십시오 .

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

그런 다음이 명령을 실행하여 코드를 컴파일하십시오.

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

문제가 해결되지 않습니다. 여전히 찾을 수 없습니다 omp.h.
Z boson

시스템에서 omp.h 를 찾으셨습니까 ? 이러한 명령의 출력을 질문에 추가 할 수 있습니까?
Ghasem Pahlavan

*.h헤더 파일인데 왜 경로에 추가하고 싶습니까? 그들은 /usr/include예를 들어 있어야합니다 .
Ravexina April

1
감사합니다 Ghasem, 16.04의 libomp-dev 설치가 해결되었습니다.
Bulat M.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.