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 gccCompruebe que gcc está instalado.
$which g++-7 /usr/local/bin/g++-7Cambiar 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-multilibAlternativamente, si brew dice que ya tienes gcc instalado, puedes intentar
brew reinstall gcc --without-multilibComo habrás notado, si no especificas
--without-multilibbrew 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/binpor 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:$PATHAhora deberías poder compilar con OpenMP habilitado usando:
gcc-5 -fopenmp -o your_program your_program.cObservació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-ompAsegúrese de que la herramienta de línea de comandos Xcode
xcode-select --installDe 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.cy 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 4Trabajó en OS X 10.11.3 y con una actualización de fecha 18 de febrero de 2016