2

I am freshly new to using SLURM in CLUSTER. I am now struggling with OpenMP fortran 90.

I try to calculate integrals using two nodes (node1 and node2) through SLURM.

What I want is to return one value by combining the calculations of node 1 and node 2 using Fortran OpenMP.

However, when I using "srun" it appears that two nodes compute the same executable file independently.

For example, if I run the code as below each node will return two identical values. Besides, if I execute without "srun" then it looks fine, but actually, it is not. When I check the "squeue" command, it seems using 100 CPUs through two nodes. (it looks fine!) But in reality, if I look at the "ssh node# (#=1,2)" and check each of the two nodes, only node1 use 100 CPUs, and node2 was not working.

Is there someone shed light on me?

----source code----

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

----job script----

#!/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
Ian Bush
  • 6,996
  • 1
  • 21
  • 27
Goring
  • 21
  • 2
  • 9
    Welcome, please take the [tour]. OpenMP is used for SHARED MEMORY. You cannot use it for communication between two nodes in a cluster. You need other approaches, like MPI or coarrays for that. OpenMP on its own can only be used on a single node. – Vladimir F Героям слава Jun 02 '21 at 14:12

0 Answers0