Como compilar o programa OpenMP usando o clang?

9

Meu gcc compila bem, mas o clang falha com a seguinte mensagem:

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

Também instalei o libomp5pacote e mudei o sinalizador para -fopenmp=libomp5, embora também não tenha ajudado:

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

essas recomendações não funcionaram.

Ficaria grato pelas dicas sobre a instalação de pacotes específicos 16.04 necessários e a passagem de sinalizadores correspondentes.

Bulat M.
fonte
Qual versão do Clang você está usando? Eu tenho o mesmo problema BTW com clang-3.8 e clang-3.9 no Ubuntu 16.10.
Z Higgs
1
sudo apt instalar libomp-dev
Z boson
Finalmente, eu posso usar o OpenMP com Clang no Ubuntu! Eu queria isso há muito tempo!
Z Higgs

Respostas:

16

Eu tive o mesmo problema.

sudo apt install libomp-dev

Corrigido com o 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());
}

Então

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

Além disso

clant-3.9 test.c -fopenmp

trabalho.


O GCC e o Clang usam diferentes bibliotecas de tempo de execução OpenMP: libgomp e libomp, respectivamente.

O tempo de execução de Clang é o tempo de execução do LLVM OpenMP, que, por sua vez, é baseado no tempo de execução do Intel OpenMP (que é de código aberto). https://www.openmprtl.org/

No meu sistema, o GCC instalado omp.hem

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

e libomp-devempolgado omp.hem

/usr/include/omp.h

Esses são arquivos de cabeçalho diferentes, que incluem definições de funções diferentes. Pode ser bom usar qualquer arquivo de cabeçalho, por exemplo, omp_get_wtime()mas, em geral, acho que provavelmente é melhor usar o arquivo de cabeçalho que corresponde ao tempo de execução ao qual está vinculado.

Z boson
fonte
1
Trabalhou em baunilha 16.04 com estoque clang em repos.
precisa
1
Acabei de instalar o Ubuntu 17.04, cujo padrão é Clang 4.0. Eu ainda tinha que usar sudo apt install libomp.dev.
Z Boson #
Se você acidentalmente vincular a libgomp do clang 6, seu código será serializado silenciosamente.
Andrew Wagner
2

Parece que o arquivo omp.h não existe no PATH do sistema . Em primeiro lugar, tente localizar o arquivo omp.h se você não souber onde:

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

E, em seguida, execute este comando para compilar seu código:

clang -o main main.c -I/path/to/omp/folder
Ghasem Pahlavan
fonte
Isso não resolve o problema. Ainda não consegue encontrar omp.h.
Z Higgs
Você encontrou algum omp.h no seu sistema? você pode anexar a saída desses comandos à sua pergunta?
Ghasem Pahlavan
*.hsão arquivos de cabeçalho, por que ele iria querer adicioná-los ao seu caminho? eles devem estar /usr/includepor exemplo.
Ravexina
1
Obrigado Ghasem, a instalação do libomp-dev no 16.04 foi resolvida.
precisa