tutorial omp for español ejemplos c gcc openmp

omp - Especificar OpenMP a GCC



openmp tutorial español (1)

Para OpenMP, cuando mi código usa las funciones en su API (por ejemplo, omp_get_thread_num ()) sin usar sus directivas (como aquellas #pragma omp ...),

  1. por qué especificar directamente libgomp.a a gcc en lugar de usar -fopenmp no funciona, como

    gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello

    Actualización: acabo de encontrar que el enlace a libgomp.a no funciona, pero el enlace a libgomp.so funciona. ¿Significa que OpenMP no puede estar enlazado estáticamente?

  2. Por qué -fopenmp solo funciona sin especificar los archivos de la biblioteca

    gcc hello.c -fopenmp -o hello

    Actualización: En otras palabras, cuando se usa -fopenmp, ¿por qué no se requiere un enlace explícito a libgomp.so?

  3. ¿Por qué esto también compila:

    gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello

    ¿Ignorará esto las directivas OpenMP en el código si las hay?

¡Gracias y saludos!


En general, tenga en cuenta que las directivas y las funciones son cosas diferentes; los primeros se controlan mediante -fopenmp y los últimos se controlan mediante el enlace a la biblioteca OpenMP.

  1. ( Actualizado para incorporar comentarios ) Intente usar las opciones -fopenmp y -fopenmp para vincular estáticamente OpenMP. Debido a que esto implica -lgomp -lrt , el siguiente comando no se compilará correctamente a menos que también especifique la ubicación de librt.a .

    gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello

  2. ( Actualizado para incorporar comentarios ) Imagino que el siguiente comando se está compilando correctamente porque la biblioteca OpenMP ya está en la ruta de su biblioteca y el enlazador dinámico de su sistema se está vinculando automáticamente con libgomp.so .

    gcc hello.c -fopenmp -o hello

  3. El siguiente comando probablemente se está compilando correctamente porque está enlazando con el objeto compartido para OpenMP ( libgomp.so ). Tenga en cuenta que la opción -static no se utiliza.

    gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello

    Si no especifica la opción -fopenmp , las directivas de OpenMP deben ignorarse.