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?
Instalar gcc utilizando brew.
brew install gcc
Compruebe que gcc está instalado.
$which g++-7 /usr/local/bin/g++-7
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í.
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.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 esusr/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).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
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