回 帖 发 新 帖 刷新版面

主题:并行计算遇到的问题

最近遇到一个问题无法解决,来论坛求助。

  我在用多个CPU运行一个CFD程序, 其中需要用一个CPU单独调用一个子程序, 于是我就写了大体如下的代码:

  .......................
  if (rank == 0) then

     call subroutineA(...)

  end if

  call MPI_BARRIER(MPI_COMM_WORLD, ierr)
  ........................ 

  但是编译完成后运行结果很奇怪,有时程序会卡在subroutineA那里,而这个子程序是可靠,没有错误的。我试着在subroutineA里面加一些print语句,然后发现卡住的地方根据我加入语句的不同而改变。更费解的是同一个编译好的可执行文件,在改变一些input的时候有时卡有时不卡,当然这里排除了算法和逻辑错误。这个到底是什么原因,是内存,MPI,还是其他??

回复列表 (共7个回复)

沙发

为何不用OpenMP?
MPI更适合于集群,如果是单机则用OpenMP更佳。

板凳

OpenMP,好像是在传递某些精度的值时有问题,我们组里都不用OpenMP.这里所谓的单机和集群是什么意思,这个程序是在高速电脑上运行的。

3 楼

"传递某些精度的值时有问题"? 是代码弄错了吧, 要么是遇到bug了. 并行调试都比较麻烦, 没代码没真相mpi, openmp都这样.

单机 是一台计算机上多个cpu或者多个核心. 集群就是2个或者以上的计算机组建起来的整体.

4 楼

如果你没有用real*16,那么OMP及MPI精度都OK。

5 楼

这个是个复杂的流体力学求解器,适于几十遇到几千个CPU的同时计算,貌似也不可能去改用OPENMP。我碰到的问题是不是内存不够之类的,因为子程序要读写一一些几十兆的文件。代码太过复杂,估计一般人没这个耐心来读吧。。。

6 楼

几千个CPU? 那不是一般的机群哦. 学校里面买的比较多的是100个cpu左右的.

不过几千个CPU要BARRIER一下. 等上一会似乎也是正常的.

7 楼

喔,几千个CPU啊,那最好用ParaMon看看是咋回事儿,是网络的问题?节点的问题?又或是其他?
这靠猜是猜不出来的了,并且确实不适合用OMP:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册