编译器未使用所有CPU,我需要您的建议

问题描述 投票:0回答:1

我的电脑有两个cpu xeon e5-2678v3,每个cpu 12核/ 24线程(总共24核/ 48线程)我提交了要求我的代码使用多核的Slurm批处理作业(Linux中具有intel fortran编译器的CFD fortran代码)该代码运行良好,但似乎所有48个线程仅在1 cpu上运行,而不在双cpu上运行。我使用上面相同的Slurm批处理作业文件检查了serial和openMP运行。相同的结果和相同的计算速度。请告诉我如何使用所有2个CPU来运行代码?

第一个作业文件,系统使用所有48个线程运行:*

#!/bin/sh
#PBS -N Ogive
#PBS -o output
#PBS -j oe
#PBS -l ncpus=2
cd <directory>
time ./2D-TFlow2Wall-MCM-HKO

*

第二个作业文件,系统以20个线程运行

*#!/bin/bash 
#SBATCH --job-name=testOMP
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=20
#SBATCH --exclusive
#SBATCH --time=0-20:00:00
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
time ./2D-test*
linux multithreading slurm intel-fortran
1个回答
0
投票

[我怀疑您的--ntasks-per-node为1的指令正在与您的--cpus-per-task指令竞争,这听起来好像它们可能彼此竞争(也就是说,我认为SLURM希望您提供这些选项之一,而不是都)。尝试也将其设置为20,或仅使用一个或另一个。从docs

-ntasks-per-node =请求在每个节点上调用ntask。如果与--ntasks选项一起使用,则--ntasks选项将优先,并且--ntasks-per-node将被视为每个节点的最大任务数。意味着与--nodes选项一起使用。 这与--cpus-per-task = ncpus有关,但不需要了解每个节点上的cpus实际数量。在某些情况下,能够请求在每个节点上调用的任务数量不超过特定数量会更加方便。例如,提交一个混合MPI / OpenMP应用程序,其中只有一个MPI“任务/等级”应该在将OpenMP部分利用节点中存在的所有并行性的同时分配给每个节点,或者将它作为一个较大的作业脚本中的一个步骤向预先分配的每个节点提交一个设置/清除/监视作业。

(重点是我的。]

© www.soinside.com 2019 - 2024. All rights reserved.