world omp instalar hello example compile compilar c gcc openmp

omp - Instalación de OpenMP en Mac OS X 10.11



openmp hello world (6)

MacOS High Sierra versión 10.13.6 (17G65)

1. Instalar gcc

brew reinstall gcc --without-multilib

2. compilar

gcc-8 -Wall -fopenmp your-parallel-program.c

Observe que el gcc-8 ve la versión de brew instala, el suyo puede ser gcc-7 o gcc-9

==> Pouring gcc-8.2.0.high_sierra.bottle.1.tar.gz 🍺 /usr/local/Cellar/gcc/8.2.0: 1,495 files, 344.8MB

¡Eso es!

¿Cómo puedo hacer que OpenMP se ejecute en Mac OSX 10.11, de modo que pueda ejecutar scripts a través de terminal ?

He instalado OpenMP: brew install clang-omp .

Cuando ejecuto, por ejemplo: gcc -fopenmp -o Parallel.b Parallel.c devuelve la siguiente expresión: fatal error: ''omp.h'' file not found

También he intentado: brew install gcc --without-multilib pero desafortunadamente esto finalmente devolvió lo siguiente (después de instalar algunas dependencias):

The requested URL returned error: 404 Not Found Error: Failed to download resource "mpfr--patch"

¿Algún trabajo recomendado?


  1. Instalar gcc utilizando brew.

    brew install gcc

  2. Compruebe que gcc está instalado.

    $which g++-7 /usr/local/bin/g++-7

  3. Cambiar el compilador cmake cxx.

    cmake -DCMAKE_CXX_COMPILER=g++-7 make

Tal vez esto te ayude.


Después de instalar gcc:

brew install gcc --without-multilib

y exportación PATH:

export PATH=/usr/local/bin:$PATH

Es posible que necesite exportar CC, que funciona para mí:

export CC=/usr/local/bin/gcc

Esto tal vez gcc-7, o lo que sea.


En una mac, el comando gcc es un enlace simbólico a Clang. Entonces, al llamar a gcc -fopenmp -o your_program your_program.c , de hecho está usando Clang, que hasta ahora no tiene soporte incorporado para OpenMP.

Las versiones más recientes de Clang tienen soporte para OpenMP según this publicación (donde también puede encontrar instrucciones sobre cómo configurarlo).

Por otro lado, si todavía quieres usar gcc, puedo guiarte a través de los pasos que funcionaron para mí.

  1. Instalar gcc con cerveza. El comando que utilizó debería funcionar: brew install gcc --without-multilib

    Alternativamente, si brew dice que ya tienes gcc instalado, puedes intentar brew reinstall gcc --without-multilib

    Como habrás notado, si no especificas --without-multilib brew te advierte que OpenMP puede no funcionar.

  2. Encuentra la ubicación del gcc recién instalado. Brew agrega el número de versión a gcc para que no entre en conflicto con el instalado por Command Line Tools. Encontrará el enlace simbólico en usr/local/bin . En mi caso es usr/local/bin/gcc-5 . Si hace clic con el botón derecho y selecciona "Mostrar original", debería mostrar el ejecutable gcc-5 en /usr/local/Cellar/gcc/5.3.0/bin/gcc-5 (los números de versión pueden diferir).

  3. Ahora tienes que decirle a tu sistema al respecto. Al llamar a un compilador, bash buscará en /usr/bin por defecto y no en /usr/local/bin . Necesita agregar este directorio a su $ PATH . Esto se puede hacer fácilmente con el comando:

    PATH=/usr/local/bin:$PATH

  4. Ahora deberías poder compilar con OpenMP habilitado usando:

    gcc-5 -fopenmp -o your_program your_program.c

    Observación: gcc-5 es la versión que he instalado, la tuya puede ser diferente.


brew install cmake brew install gcc --without-multilib cmake -DCMAKE_CXX_COMPILER=g++-6 .. make -j


  • instalar clang-omp

    brew install clang-omp

  • Asegúrese de que la herramienta de línea de comandos Xcode

    xcode-select --install

  • De hecho, tuve un error al ejecutar un código openmp de muestra

    /usr/local/opt/libiomp/include/libiomp/omp.h:139:21: error: expected '';'' after top level declarator extern void __ KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);

  • Simplemente quite un espacio que esté presente entre __ y KAI del archivo

  • Ahora usa el comando

    clang-omp -fopenmp helloopenmp.c

    y ejecuta el siguiente código

    #include <omp.h> #include <stdio.h> int main() { #pragma omp parallel printf("Hello from thread %d, nthreads %d/n", omp_get_thread_num(), omp_get_num_threads()); }

  • Deberías obtener una salida similar a esta

    Hello from thread 3, nthreads 4 Hello from thread 2, nthreads 4 Hello from thread 0, nthreads 4 Hello from thread 1, nthreads 4

  • Trabajó en OS X 10.11.3 y con una actualización de fecha 18 de febrero de 2016