Я заранее прошу прощения за то, что у меня нет подходящего жаргона для описания моей проблемы, и что я, вероятно, не предоставил достаточно информации.
Я уже несколько месяцев запускаю свой код MPI под gcc 4.4 и OpenMPI / MPICH2, и на разных платформах проблем нет. Недавно я обновил набор серверов и настольного компьютера до Ubuntu 11.04 (сейчас работает gcc 4.5) и выполнил 8 задач на узле с 8 процессорами. Обычно я вижу, что пользовательский процессор загружен почти на 100%, а теперь я вижу только 60% пользовательского процессора и более 30% системного процессора. Это приводит к значительному замедлению моего кода при запуске таким способом.
Продолжая расследование, я просто запустил последовательное задание и заметил, что процесс сообщил, что используется 150 +% времени процессора. Итак, моя программа была многопоточна на многих процессорах. Я проверил это явно, используя 'ps -eLF' и посмотрев на нагрузки на процессор.
Это невероятно плохая и неэффективная вещь для моего кода MPI, и я понятия не имею, откуда он взялся. Ничего не изменилось, кроме перехода на Ubuntu 11.04 и gcc 4.5. Я проверил это по различным версиям OpenMPI.
Я также перемещал двоичные файлы между двумя двоичными машинами, совместимыми с ними. Если я скомпилирую на другой машине (Ubuntu 10.10 / GCC 4.4) и запустить там, все в порядке. Перемещая двоичный файл на компьютер с Ubuntu 11.04, тот же самый двоичный файл начинает сам себя.
Стоит отметить, что я явно отключил все оптимизации (-O0), полагая, что моя настройка по умолчанию (-O3) может включать что-то, чего я не понимал в 4.5. Я получаю идентичное поведение независимо от уровня оптимизации.
Пожалуйста, дайте мне знать, какую дополнительную информацию я могу предоставить, чтобы определить источник этой проблемы.
* ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ *
Результаты ldd в ответ на запрос. Проще говоря, это OpenMPI, libconfig и scalapack, вместе со стандартным gcc материалом:
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)
Всего наилучшего.