c - MPI 程序只在 slurm 脚本中执行一次

标签 c mpi hostname slurm

我尝试了 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

最佳答案

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

srun ./$1

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

关于c - MPI 程序只在 slurm 脚本中执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35780984/

相关文章:

c - 日志线程的奇怪行为

c - 如何使用libbmp读取光栅?

arrays - MPI - 发送数组段

c++ - 使用MPI取数据临时使用然后返回结果

algorithm - 分析和理解这个算法

c# - 如何从 MAC 或 IP 地址获取设备类型?

c++ - 编译我的代码以通过 xcode 在 OSX 中使用 mongodb c 驱动程序

c - 递归函数崩溃

java - 如果无法通过 Java 中的 DNS 解析,如何获取本地主机名?

java - 使用主机名的 HttpURLConnection 和 INetAddress 失败,而 IPv6 工作正常