首页 > 解决方案 > 如何在 SLURM 集群中为一个 OpenMp Fortran90 代码使用两个节点?

问题描述

我对在 CLUSTER 中使用 SLURM 很陌生。我现在正在努力使用 OpenMP fortran 90。

我尝试通过 SLURM 使用两个节点(node1 和 node2)计算积分。

我想要的是通过使用 Fortran OpenMP 结合节点 1 和节点 2 的计算来返回一个值。

但是,当我使用“srun”时,似乎两个节点独立计算同一个可执行文件。

例如,如果我按以下方式运行代码,每个节点将返回两个相同的值。此外,如果我在没有“srun”的情况下执行,那么它看起来不错,但实际上并非如此。当我检查“squeue”命令时,似乎通过两个节点使用了 100 个 CPU。(看起来不错!)但实际上,如果我查看“ssh node# (#=1,2)”并检查两个节点中的每一个,则只有 node1 使用 100 个 CPU,而 node2 无法正常工作。

有没有人对我有所启发?

- - 源代码 - -

program integral
use omp_lib
implicit none
integer :: i,n
real :: x,y1,y2,xs,xe,dx,sum,dsum
n=100000000
xs=0.
xe=3.
sum=0.
dx=(xe-xs)/real(n)
!$omp parallel do default(shared) private(i,dsum,x) reduction(+:sum)
do i=1,n
    x=xs+real(i-1)*dx
    y1=x**2
    y2=(x+dx)**2
    dsum=(y1+y2)*dx/2
    sum=sum+dsum
enddo
!$omp end parallel do
print*, sum
end program

----作业脚本----

#!/bin/sh
#SBATCH -J test
#SBATCH -p oldbatch
#SBATCH -o test%j.out
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=50

export OMP_NUM_THREADS=50
srun ./a.out

标签: fortranopenmpcluster-computingslurm

解决方案


推荐阅读