¿Cómo compilar el programa OpenMP usando clang?

9

Mi gcc se compila bien, pero clang falla con el siguiente mensaje:

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

También instalé el libomp5paquete y cambié el marcador a -fopenmp=libomp5, aunque tampoco ayudó:

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

Estas recomendaciones no funcionaron.

Agradecería las sugerencias sobre la instalación de paquetes específicos 16.04 necesarios y la aprobación de las banderas correspondientes.

Bulat M.
fuente
¿Qué versión de Clang estás usando? Tengo el mismo problema BTW con clang-3.8 y clang-3.9 en Ubuntu 16.10.
Z boson
1
sudo apt install libomp-dev
Z boson
¡Finalmente, puedo usar OpenMP con Clang en Ubuntu! ¡He querido esto por mucho tiempo!
Z boson

Respuestas:

16

Yo tuve el mismo problema.

sudo apt install libomp-dev

Lo arregló 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());
}

Entonces

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

también

clant-3.9 test.c -fopenmp

trabajos.


GCC y Clang utilizan diferentes bibliotecas de tiempo de ejecución de OpenMP: libgomp y libomp respectivamente.

El tiempo de ejecución de Clang es el tiempo de ejecución LLVM OpenMP que a su vez se basa en el tiempo de ejecución Intel OpenMP (que es de código abierto). https://www.openmprtl.org/

En mi sistema GCC instalado omp.hen

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

e libomp-devinsalted omp.hen

/usr/include/omp.h

Estos son diferentes archivos de encabezado que incluyen diferentes definiciones de funciones. Puede estar bien usar cualquier archivo de encabezado, por ejemplo, omp_get_wtime()pero en general creo que probablemente sea mejor usar el archivo de encabezado que corresponde al tiempo de ejecución al que está vinculado.

Bosón Z
fuente
1
Trabajó en vainilla 16.04 con stock clang en repos.
Bulat M.
1
Acabo de instalar Ubuntu 17.04 que por defecto es Clang 4.0. Aún así tuve que usar sudo apt install libomp.dev.
Z boson
Si accidentalmente vincula libgomp desde clang 6, su código se serializará en silencio.
Andrew Wagner
2

Parece que el archivo omp.h no existe en su RUTA del sistema . En primer lugar, intente localizar el archivo omp.h si no sabe dónde está:

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

Y luego ejecute este comando para compilar su código:

clang -o main main.c -I/path/to/omp/folder
Ghasem Pahlavan
fuente
Eso no soluciona el problema. Todavía no puede encontrar omp.h.
Z boson
¿Encontraste alguna omp.h en tu sistema? ¿Puedes agregar la salida de estos comandos a tu pregunta?
Ghasem Pahlavan
*.hson archivos de encabezado, ¿por qué querría agregarlos en su camino? deberían estar /usr/includepor ejemplo.
Ravexina
1
Gracias Ghasem, libomp-dev instalación en 16.04 resuelto.
Bulat M.