Me disculpo por adelantado que no tengo la jerga adecuada para describir mi problema, y que probablemente no he dado suficiente información.¿GCC 4.5/Ubuntu 11.04 es un código de autoenlace?
He estado ejecutando mi código MPI en gcc 4.4 y OpenMPI/MPICH2 durante meses sin problemas en una variedad de plataformas. Recientemente actualicé un conjunto de servidores y mi escritorio a Ubuntu 11.04 (ejecutando gcc 4.5 ahora) y ejecuté un trabajo de 8 tareas en un nodo con 8 procesadores. Normalmente veo casi el 100% de utilización de la CPU del usuario, y ahora veo solo el 60% de CPU del usuario y más del 30% de la CPU del sistema. Esto conduce a una desaceleración notable de mi código cuando se ejecuta de esta manera.
Investigando aún más, simplemente ejecuté un trabajo en serie, y noté que el proceso informaba que se estaba utilizando un 150% de tiempo de CPU. Entonces, mi programa era multiproceso en muchos procesadores. Verifiqué esto explícitamente usando 'ps -eLF' y mirando las cargas por procesador.
Esto es algo increíblemente malo e ineficiente para mi código MPI, y no tengo ni idea de dónde viene. Nada ha cambiado más que el cambio a Ubuntu 11.04 y gcc 4.5. Lo he verificado contra varias versiones de OpenMPI.
También moví binarios entre dos máquinas compatibles con binary. Si compilo en otra máquina (ubuntu 10.10/gcc 4.4) y corro allí, todo está bien. Al mover el binario a la máquina Ubuntu 11.04, el mismo binario comienza a enhebrarse.
Vale la pena señalar que he deshabilitado explícitamente todas las optimizaciones (-O0), pensando que mi valor predeterminado (-O3) podría incluir algo que no entendí en 4.5. Obtengo un comportamiento idéntico independientemente del nivel de optimización.
Háganme saber qué información adicional puedo proporcionar para determinar el origen de este problema.
* INFORMACIÓN ADICIONAL *
Resultados de LDD en respuesta a la solicitud. Simplemente, es OpenMPI, libconfig y ScaLAPACK, junto con la materia gcc estándar:
linux-vdso.so.1 => (0x00007ffffd95d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2bd206a000)
libconfig.so.8 => /usr/lib/libconfig.so.8 (0x00007f2bd1e60000)
libscalapack-openmpi.so.1 => /usr/lib/libscalapack-openmpi.so.1 (0x00007f2bd151c000)
libmpi.so.0 => /usr/lib/libmpi.so.0 (0x00007f2bd126b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2bd0ed7000)
libblacsCinit-openmpi.so.1 => /usr/lib/libblacsCinit-openmpi.so.1 (0x00007f2bd0cd4000)
libblacs-openmpi.so.1 => /usr/lib/libblacs-openmpi.so.1 (0x00007f2bd0aa4000)
libblas.so.3gf => /usr/lib/libblas.so.3gf (0x00007f2bd022f000)
liblapack.so.3gf => /usr/lib/liblapack.so.3gf (0x00007f2bcf639000)
libmpi_f77.so.0 => /usr/lib/libmpi_f77.so.0 (0x00007f2bcf406000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007f2bcf122000)
libopen-rte.so.0 => /usr/lib/libopen-rte.so.0 (0x00007f2bceed3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2bcecb5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2bd22fc000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2bcea9f000)
libopen-pal.so.0 => /usr/lib/libopen-pal.so.0 (0x00007f2bce847000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2bce643000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f2bce43f000)
Todo lo mejor.
¿Qué bibliotecas utiliza su código? ¿Puedes mostrar los resultados de 'ldd your_programme' para la versión en serie? – osgx
seguro. es MPI, libconfig y scalapack. He agregado los resultados de ldd a la publicación principal. cada una de estas bibliotecas las he usado desde los repositorios de apt y las he compilado de forma personalizada en ambas plataformas (las buenas 4.4 y las malas 4.5). nada parece cambiar nada sobre el comportamiento. – coastal
me di cuenta de que los resultados eran para la versión paralela. Nunca construyo una versión en serie, MPI está procesada. Notarás muchas otras cosas allí, la que más me preocupa es libpthread aunque mi archivo MAKE nunca vincule explícitamente esa biblioteca, así que debería ver de dónde vienen esas cosas. . sin embargo, si tomo este binario, compilado en gcc 4.5 con estas bibliotecas y lo ejecuto en una instalación ubuntu 10.10 compatible con binarios, todo funciona como se espera. todo con las mismas bibliotecas. es realmente extraño. – coastal