WCCS

run1perNode (WCCS Job Scheduler)

alwaysu012 2009. 6. 21. 23:57
Job Scheduler에서는 요청된 CPU 개수와 각 노드당 CPU개수에 따라서 노드를 할당하게 됩니다.
예를 들어,,
각 노드당 4개씩의 CPU(core)를 가지고 있는데,,
6개의 CPU를 요청하면,,
두개의 노드가 할당되고,
한개의 노드에서는 4개의 CPU, 다른 노드에서는 2개의 CPU가 계산에 사용되어집니다.

그런데,, 특별한 경우(OpenMP + MPI 프로그램)
각 노드당 한개씩의 Process만 할당하고 싶은 경우가 있습니다.
OpenMP + MPI 프로그램을 작성하였는데,,
MPI를 통해 6개의 노드를 할당 받고,
각 노드에서는 OpenMP를 통해 병렬화를 구현한 경우가 이러한 경우입니다.
(각 노드가 4개의 CPU를 가지고 있다면 총 24개 CPU가 계산에 참여하게 됩니다)

위 방법을 구현하기 위해서는 Job Scheduler에
노드수 x 노드당CPU개수 만큼의 CPU를 요청하고,
mpiexec command에서 각 노드당 1개씩의 process만 생성하도록 요청해야 합니다.
mpiexec 에서 -hosts 옵션을 사용하면 위 방법을 구현할 수 있습니다.

mpiexec -hosts 2 node001 1 node002 1 MyApp.exe

MyApp.exe 프로그램은 node001과 node002에 각각 1개씩 총 2개의 Process를 생성하게 됩니다.

문제는 Job Scheduler를 통해 노드를 무작위로 할당 받기 때문에
위 command를 사용하는 데는 어려움이 있습니다.

문제를 해결하기 위해서 run1perNode.vbs 스크립트를 사용하시면 됩니다.
스크립트는 아래 링크에서 다운받으실 수 있습니다.

http://windowshpc.net/files/17/scripting/entry615.aspx



사용방법
1. run1perNode.vbs 스크립트를 workdir에 복사합니다.
2. mpiexec.exe MyApp.exe
   와 같은 명령 대신에,, 아래 명령을 사용합니다.
   cscript //Nologo run1perNode.vbs MyApp.exe

기존방법 - 2개 노드에서 6개 CPU 할당받음 (각 노드당 4개의 CPU가 있을 경우)

job submit  ^
/numprocessors:6 ^
/workdir:\\headnode\workdir ^
/stdout:MyApp.out ^
/stderr:MyApp.err ^
mpiexec.exe MyApp.exe

스크립트 사용방법 - 6개 노드에서 24개 CPU 할당받아서 노드당 1개의 Process 사용 (각 노드당 4개의 CPU가 있을 경우)

job submit ^
/numprocessors:24 ^
/workdir:\\headnode\workdir ^
/stdout:MyApp.out ^
/stderr:MyApp.err ^
cscript //Nologo run1perNode.vbs /verbose MyApp.exe