2

異なる構成 (異なる数のノードなど) のクラスターで openmp プログラムを実行する必要があります。しかし、私が直面している問題は、たとえば2つのノードでプログラムを実行しようとすると、同じプログラムが並行して実行されるのではなく2回実行されることです。

私のプログラム -

gettimeofday(&t0, NULL);
for (k=0; k<size; k++) {
    #pragma omp parallel for shared(A)
    for (i=k+1; i<size; i++) {
        //parallel code
    }
    #pragma omp barrier
    for (i=k+1; i<size; i++) {
        #pragma omp parallel for
        //parallel code
    }
}

gettimeofday(&t1, NULL);
printf("Did %u calls in %.2g seconds\n", i, t1.tv_sec - t0.tv_sec + 1E-6 * (t1.tv_usec - t0.tv_usec));

LU分解プログラムです。2 ノードで実行すると、次のような出力が 得 られ
ます 。



ご覧のとおり、プログラムは並列に実行されるのではなく、各値 (1000、2000、3000...) に対して 2 回実行されます。これは私の宿題プログラムですが、この時点で立ち往生しています。

SLURM スクリプトを使用して、大学のコンピューティング クラスターでこのプログラムを実行しています。これは、教授が提供する標準的なスクリプトです。

#!/bin/sh
##SBATCH --partition=general-compute
#SBATCH --time=60:00:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=2
##SBATCH --mem=24000
# Memory per node specification is in MB. It is optional. 
# The default limit is 3GB per core.
#SBATCH --job-name="lu_openmpnew2nodes"
#SBATCH --output=luopenmpnew1node2task.out
#SBATCH --mail-user=***@***.edu
#SBATCH --mail-type=ALL
##SBATCH --requeue
#Specifies that the job will be requeued after a node failure.
#The default is that the job will not be requeued.


echo "SLURM_JOBID="$SLURM_JOBID
echo "SLURM_JOB_NODELIST"=$SLURM_JOB_NODELIST
echo "SLURM_NNODES"=$SLURM_NNODES
echo "SLURMTMPDIR="$SLURMTMPDIR

cd $SLURM_SUBMIT_DIR
echo "working directory = "$SLURM_SUBMIT_DIR

module list
ulimit -s unlimited
#

echo "Launch luopenmp with srun"
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so
for i in {1000..20000..1000}
do
srun ./openmpNew "$i"
done

#
echo "All Done!"
4

1 に答える 1