mpi 프로그램 질문
글쓴이: qiiiiiiiip / 작성시간: 금, 2012/07/20 - 8:24오전
클러스터를 이용한 병렬처리관련 질문입니다..
현재 openmpi를 이용한 클러스터가 구축되어있는데요,
파일 리스트를 입력으로 받아서 각각의 파일별로 계산을 해서
각각의 출력 파일을 저장하는 프로그램입니다..
각각의 파일이 독립적으로 처리되고 서로 영향을 주지 않습니다.
아주 단순한 병렬처리인데요..
현재는 파일리스트를 미리 균일하게 나누고,
mpirun으로 여러 프로세스가 각각의 파일리스트를 처리하도록 하는데요,
이경우 프로세스간에 속도차가 있어 어떤건 미리 끝나고, 어떤건 늦게끝나는
낭비가 있습니다..
보통 이러한 태스크의 경우 어떤 식으로 처리하는지요?
전체 파일목록을 가지는 queue가 있고,
그 밑에 여러 프로세스가 이 queue에서 처리할 파일을 하나씩 가져오게 하고 싶은데,
이러한 경우에 대한 예제코드가 있을까요?
Forums:
병렬 처리라기보다는 클러스터에 작업을 나눠서
병렬 처리라기보다는 클러스터에 작업을 나눠서 처리하시려는 것 같은데요. 보통 이런 경우는 MPI가 아니라 SLURM과 같은 작업관리자를 씁니다.
답글 감사합니다.. SLURM을 찾아봤는데, 제가
답글 감사합니다..
SLURM을 찾아봤는데, 제가 하려는것에 비해 너무 복잡해보이네요..
MPI는 잊어버리고.. 하고 싶은일은 아래와 같습니다.
1. a.out이라는 프로그램이 있고 이게 하는일은 아래와 같습니다.
filelist.txt를 입력으로 받아서 라인별로 읽어서,
하나의 입력파일을 처리해서 하나의 출력파일을 생성
2. filelist.txt 파일의 라인수가 꽤 깁니다 (처리해야하는 파일의 숫자가 많습니다)
3. filelist.txt를 효율적으로 나눠서 여러개의 a.out에서 나눠서 처리하도록 하고 싶습니다.
( 기존은 균등하게 나눠서 mpi로 뿌림 )
4. cluster로 구성된 여러 머신을 쓸수도 있고, 하나의 머신의 여러 CPU/core를 쓸수도 있습니다.
5. 기존 코드의 변경은 최소한으로 하고 싶습니다..
--
나름 고민해본 방법은, 별도의 main.c를 만들어서,
여기서 filelist.txt를 읽고,
기존 프로그램을 popen으로 여러개를 열어서,
pipe로 file이름을 각 프로세스에 뿌려주면 어떨까 싶은데요..
공통된 pipe에(stdin?) 파일명을 넣어주면 여러 프로세스 중 idle한 프로세스가
자동으로 그걸 하나씩 가져가는게 가능할까요?
댓글 달기