blogging

Serial 작업을 위한 MPI 래퍼 프로그램

hongiiv 2009. 1. 28. 14:39
반응형
KISTI 슈퍼컴퓨팅센터의 tachyon의 경우 사용자당 10개의 job만 제출할 수 있다. 따라서 실행할 작업이 시리얼한 작업일 경우 한번에 10개 이상의 노드를 사용하기 위해서는 아래와 같이 MPI 코드로 래퍼를 만들어서 실행하면 원하는 갯수 만큼의 시리얼 작업을 한번에 수행할 수 있다.

script_0.sh ~ script_N.sh의 스크립트를 미리 만들어 놓은 후 실행 스크립트에서  #$ -pe mpi_fu N으로 지정하면 N개의 스크립트를 하나의 qsub로 해결~!!

=====mpi_wrapper.c=====
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[])
{
    int done = 0, n, myid, numprocs, i;
    int  namelen;
    char processor_name[MPI_MAX_PROCESSOR_NAME];

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);
    MPI_Get_processor_name(processor_name,&namelen);

    char script[100];
    char *scr="script_";

    fprintf(stderr,"debug msg>> Process %d on %s\n",
            myid, processor_name);

    for(i=0;i<numprocs;i++){
       if(myid==i){
          sprintf(script,"/home/hongiiv/mpi_example/%s%d.sh",scr,i);
        system(script);
       }
    }
    MPI_Finalize();
    return 0;
}

=====mpi_run.sh=====
#!/bin/bash
#$ -V
#$ -cwd
#$ -N impute_mpi
#$ -pe mpi_fu 20
#$ -q normal
#$ -R yes
#$ -wd /work01/사용자아이디
#$ -l normal
#$ -M 사용자이메일
#$ -m e
mpirun -machinefile $TMPDIR/machines -np $NSLTOS ./mpi_wrapper

=====작업 제출=====
qsub mpi_run.sh

결과는 아직 큐에 대기중이라 실행되고 있지않음,,, : )
반응형