¿Alguien sabe si es posible compilar MPI con gcc
? Necesito usar gcc
, no mpicc
.¿Cómo compilar MPI con gcc?
Respuesta
mpicc
ya está utilizando gcc
como backend
Extraño, mi 'mpicc' está usando' icc' como back-end ... –
Sí, ciertamente puede compilar un programa MPI sin la comodidad de la mpicc
envoltura. En la mayoría de las implementaciones, mpicc
es un script de shell (o similar) que establece variables de entorno, busca y vincula varias bibliotecas, todo el tipo de cosas que de otro modo podría poner en un Makefile.
Sugiero que encuentre una instancia de la secuencia de comandos mpicc
y la deconstruya.
mpicc
es simplemente un envoltorio de cierto conjunto de compiladores. La mayoría de las implementaciones tienen sus envolturas mpicc
que entienden una opción especial como -showme
(MPI abierto) o -show
(MPI abierto, MPICH y derivados) que proporciona la lista completa de opciones que el envoltorio transfiere al compilador back-end.
Por ejemplo, en Open MPI, los envoltorios son programas C++ que leen archivos de configuración de texto sin formato y compilan opciones de línea de comandos que luego pasan al compilador. mpicc -showme
muestra la lista completa de tales opciones:
$ mpicc -showme
icc
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
(en realidad es una sola línea que he dividido aquí para mejorar la legibilidad)
Es ese caso particular, el compilador Intel C icc
se utiliza como backend compilador pero también tenemos variantes que usan GCC. También puede obtener la lista de opciones necesarias para la fase comple (generalmente conocido como CFLAGS
) con mpicc -showme:compile
:
$ mpicc -showme:compile
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
, así como la lista de opciones que usted necesita para pasar al enlazador (conocido como LDFLAGS
) con mpicc -showme:link
:
$ mpicc -showme:link
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
Estos podrían usarse, por ejemplo, en un Makefile
, así:
...
CFLAGS += $(shell mpicc -showme:compile)
LDFLAGS += $(shell mpicc -showme:link)
...
Por lo que yo sé -showme:compile
y -showme:link
son específicos para abrir MPI y otras implementaciones sólo dan la lista completa de opciones cuando se le llama con -show
.
sigo pensando que es mejor utilizar mpicc
directamente porque si sucede que se cambia algo en la configuración MPI, se refleja inmediatamente en la envoltura, mientras que tendría que cambiar su escritura de la estructura/Makefile
manualmente (a menos que utilice -showme:compile
y -showme:link
para obtener las opciones automáticamente).
mpicc -compile_info
para MPICH.
Sí, puede usar gcc en realidad.Pero en mi caso (en Ubuntu) mpicc es sólo un envoltorio de gcc, aquí está la salida del comando mpicc -showme
:
gcc -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread -Wl,-rpath -Wl,/usr/lib/openmpi/lib -Wl,--enable-new-dtags -L/usr/lib/openmpi/lib -lmpi
Mientras que en Open MPI docs:
equipoThe Open MPI recomienda encarecidamente que simplemente utilice los compiladores "envoltura" de Open MPI para compilar sus aplicaciones MPI. Es decir, en lugar de usar (por ejemplo) gcc para compilar su programa, use mpicc.
Repetimos la afirmación anterior: el equipo Open MPI recomienda enfáticamente el uso de los compiladores de envoltorio para compilar y vincular aplicaciones MPI. Si te encuentras diciendo "¡Pero no quiero usar compiladores de envoltorios!", Por favor, cuéntanos y pruébalos. Vea si funcionan para usted. Asegúrese de informarnos si no funcionan para usted. ¡Mucha gente basa sus "compiladores de envoltura en chupar"! mentalidad sobre el mal comportamiento de los compiladores de envoltura implementados a mediados de los años noventa. Las cosas están mucho mejor en estos días; Los compiladores de envoltorio pueden manejar casi cualquier situación, y son mucho más confiables de lo que intenta codificar el compilador Open MPI y los indicadores del enlazador de forma manual. Dicho esto, hay algunas, muy, muy pocas situaciones en las que el uso de compiladores de envoltura puede ser problemático, como anidar compiladores de envoltura múltiple de varios proyectos. Por lo tanto, Open MPI proporciona una solución para descubrir qué indicadores de línea de comando necesita para compilar aplicaciones MPI.
Aquí la respuesta es útil para usted.
- 1. gcc: cómo no compilar con las advertencias
- 2. ¿Cómo compilar GCC sin _alloca?
- 3. No se puede compilar C++ con gcc
- 4. Compilar para entorno independiente con GCC
- 5. ¿Cómo compilar para Windows en Linux con gcc/g ++?
- 6. ¿Cómo CMake elige gcc yg ++ para compilar?
- 7. Netbeans MPI C++ ¿cómo comenzar?
- 8. Compilar en Eclipse con -lpthread de gcc y -lrt establecer
- 9. Compilar el conjunto de intel con gcc/mingw
- 10. Usando Homebrew con GCC alternativo
- 11. ¿Receta para compilar binutils y gcc juntos?
- 12. puede gcc cross compilar para diferentes CPU?
- 13. Compilar C++ con Cygwin
- 14. MPI Obtener procesador con valor mínimo
- 15. ¿Cómo depuro un programa MPI?
- 16. Cómo (cruzado) compilar impulso SIN python?
- 17. Cargando biblioteca compartida en open-mpi/mpi-run
- 18. ¿Puedo compilar el código universal usando el GCC de Macports?
- 19. Cómo compilar binarios estáticos?
- 20. ¿Necesito tener un MPI :: Irecv correspondiente para un MPI :: Isend?
- 21. g ++ con python.h, cómo compilar
- 22. Dos variables con el mismo nombre y tipo, en dos archivos .c diferentes, compilar con gcc
- 23. Obligar a gcc a compilar el archivo .cpp como C
- 24. tipos conflictivos error al compilar el programa c usando gcc
- 25. Sección crítica en MPI?
- 26. MPI: ¿núcleos o procesadores?
- 27. ¿MPI o zócalos?
- 28. Error al compilar gcc 4.6.2 bajo ubuntu 11.10
- 29. gcc suele compilar y ejecutar las bibliotecas MySQL C
- 30. MPI y C construye
Es posible, pero ¿por qué quieres? Normalmente, el compilador envuelto (mpicc aquí) es mucho más conveniente y habrá sido optimizado de alguna manera. – Hbcdev