2016-03-03 41 views
1

我已經嘗試使用MPI_Get_processor_name()gethostname()來打印我已使用的所有節點。但它只返回第一個節點的名字!任何人都可以讓我知道什麼是問題,以及如何獲得所有節點的名稱?MPI程序僅在slurm腳本中執行一次

//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 
+0

您能否使用上述函數附上您的代碼? –

+0

我編輯並放置了代碼。 – Matrix

+0

...還請包括實際的輸出以及它如何與預期的完全一致。雖然我猜我知道它是怎麼樣的。 – Zulan

回答

2

MPI程序需要使用mpiexec或批處理系統特定的命令來啓動,在SLURM srun的情況。將腳本中的最後一行替換爲

srun ./$1 

注意:它從作業腳本中自動獲取參數。對於普通的mpiexec,您應該提供進程數量和其他參數。

+0

非常感謝Zulan。它幫助:) – Matrix

+0

嗨@Sarah如果這已經解決了你的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – Zulan