【问题标题】:MPI+OpenMP job submission script on LSFLSF 上的 MPI+OpenMP 作业提交脚本
【发布时间】:2015-08-24 02:10:47
【问题描述】:

我对 LSF 很陌生。我有 4 个节点,每个节点有 2 个套接字。每个节点有 8 个核心。我开发了混合 MPI+OpenMP 代码。我正在提交如下作业,要求每个核心执行一项 MPI 任务。所以我失去了 OpenMP 的力量。

##BSUB -n 64

我希望提交作业,以便每个套接字运行一个 MPI 任务而不是每个内核,以便套接字内的内核可用于 OpenMP。如何构建作业提交脚本以优化代码中的混合功能。

【问题讨论】:

    标签: sockets mpi openmp hybrid lsf


    【解决方案1】:

    首先,BSUB 标记前面必须有一个 # 符号,否则它们将作为常规 cmets 被跳过。

    使用旧 LSF 版本启动混合作业的正确方法是通过 span 资源请求并以独占方式请求节点。要启动具有 8 个 MPI 进程和 8 个 OpenMP 线程的作业,您应该使用以下命令:

    #BSUB -n 8
    #BSUB -x
    #BSUB -R "span[ptile=2]"
    

    参数如下:

    • -n 8 - 为 MPI 进程请求 8 个插槽
    • -x - 只请求节点
    • -R "span[ptile=2]" - 指示 LSF 将作业跨越每个节点的两个插槽

    您应该以独占方式请求节点,否则 LSF 会将其他作业调度到相同的节点,因为每个节点只会使用两个插槽。

    然后您必须将OMP_NUM_THREADS 环境变量设置为4(每个套接字的核心数),告诉 MPI 库将该变量传递给 MPI 进程,并使库将每个 MPI 进程限制为其自己的CPU插槽。不幸的是,这是非常特定于实现的,例如:

    打开 MPI 1.6.x 或更早版本:

    export OMP_NUM_THREADS=4
    mpiexec -x OMP_NUM_THREADS --bind-to-socket --bysocket ./program.exe
    

    打开 MPI 1.7.x 或更新版本:

    export OMP_NUM_THREADS=4
    mpiexec -x OMP_NUM_THREADS --bind-to socket --map-by socket ./program.exe
    

    英特尔 MPI(不确定这个,因为我不经常使用 IMPI):

    mpiexec -genv OMP_NUM_THREADS 4 -genv I_MPI_PIN 1 \
            -genv I_MPI_PIN_DOMAIN socket -genv I_MPI_PIN_ORDER scatter \
            ./program.exe
    

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2016-06-20
      相关资源
      最近更新 更多