GCC 4.5/Ubuntu 11.04是自动线程代码?

coa*_*tal 5 c compiler-construction gcc mpi

我提前道歉,我没有足够的术语来描述我的问题,而且我可能没有提供足够的信息.

我已经在gcc 4.4和OpenMPI/MPICH2下运行我的MPI代码数月了,在各种平台上都没有问题.最近我将一组服务器和我的桌面升级到Ubuntu 11.04(现在运行gcc 4.5),并在一个有8个处理器的节点上运行8个任务.通常我看到几乎100%的用户CPU利用率,现在我只看到60%的用户CPU和超过30%的系统CPU.当以这种方式运行时,这会导致我的代码显着减慢.

进一步调查,我只是运行了一个串行作业,并注意到该过程报告使用了150 +%的cpu时间.所以,我的程序是在多个处理器上进行多线程处理.我使用'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)
Run Code Online (Sandbox Code Playgroud)

祝一切顺利.

Eva*_*ran 1

您是否可能遇到此功能?http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html

_GLIBCXX_PARALLEL基本上,某些标准库例程具有并行实现。但是,它仅在定义宏时才打开。