【问题标题】:MPI program only executed once in slurm scriptMPI 程序仅在 slurm 脚本中执行一次
【发布时间】:2016-03-04 05:28:14
【问题描述】:

我已经尝试过MPI_Get_processor_name()gethostname() 来打印我使用过的所有节点。但它只返回第一个节点的名称!谁能告诉我问题是什么以及如何获取所有节点的名称?

//testMPI.c
#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {

    MPI_Init(NULL, NULL);
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);

    printf("Hello world from processor %s, rank %d"
           " out of %d processors\n", processor_name, world_rank, world_size);}


    MPI_Finalize();
}

我使用了一个作业脚本来运行它:

#!/bin/bash
#SBATCH --job-name=MPI-host
#SBATCH --account=123
#SBATCH --time=00:02:00
#SBATCH --mem-per-cpu=3900M
#SBATCH --ntasks-per-node=16
#SBATCH --nodes=4
#SBATCH --output=./output-mpi-host-test2.out

module load intel/2015.3
module load openmpi.intel/1.8.6

cp $(pwd)/$1 $SCRATCH
cd $SCRATCH

./$1

【问题讨论】:

  • 能否请您使用上述功能附上您的代码?
  • 我已经编辑并放置了代码。
  • ... 还请包括实际输出以及它与预期输出的精确度。虽然我想我知道它的样子。
  • 我冒昧地使标题更通用,以便更容易找到。

标签: c mpi hostname slurm


【解决方案1】:

在 SLURM srun 的情况下,MPI 程序需要使用 mpiexec 或批处理系统特定命令启动。将脚本中的最后一行替换为

srun ./$1

注意:它会自动从作业脚本中获取参数。对于普通的mpiexec,您应该提供进程数和其他参数。

【讨论】:

  • 非常感谢祖蓝。它有帮助:)
  • 嗨@Sarah,如果这解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2011-12-18
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多