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

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

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

Posted by hongiiv

2009/01/28 14:39 2009/01/28 14:39
, ,
Response
No Trackback , 2 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/527

Trackback URL : http://socmaster.homelinux.org/~hongiiv/trackback/527

Comments List

  1. cheru 2009/01/28 15:43 # M/D Reply Permalink

    래퍼에서 MPI 초기화/종료를 하면 각 모델 내 MPI 초기화/종료부는 제외(수정)해야 하는 것인가요?

    1. hongiiv 2009/01/28 17:26 # M/D Permalink

      mpi 코드와 동일한데 초기화/종료부분 내의 실행부분에서 각 노드별로 하나의 script_1.sh 형식의 스크립트를 실행하도록 한 것뿐입니다. ^^;;

Leave a comment
[로그인][오픈아이디란?]
« Previous : 1 : ... 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : 81 : ... 543 : Next »


야후 블로그 벳지


Site Stats

Total hits:
291919
Today:
89
Yesterday:
234