fortran 90 질문 병렬요~
현재 win sever 2003에서
MPICH2 설치하고 FORTRAN 90으로 병렬 코드 연습중입니다.
클러스터 구축전에 단일 컴퓨터(쿼드코어)에서 테스트중입니다.
흔히 예제로 올라와있는 원주율 PI를 구하는 것은 성능이
싱글 코어 대비 쿼드 코어에서 약 4배 빠르게 나옵니다. (여기 까진 예제니깐요..)
하지만 제가 짠 코드를 보면 아래와 같습니다.
PROGRAM MAIN
IMPLICIT NONE
INCLUDE 'mpif.h'
INTEGER(4) :: I,J,K,T
INTEGER(4),PARAMETER :: IM=300,JM=60
INTEGER(4),DIMENSION(IM,JM) :: A,B,C
INTEGER(4) :: IERR,NPROCS,MYRANK
REAL(8) :: STIME,ETIME
CALL MPI_INIT(IERR)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NPROCS,IERR)
CALL MPI_COMM_RANK(MPI_COMM_WORLD,MYRANK,IERR)
A(:,:)=0
B(:,:)=1
C(:,:)=2
CALL CPU_TIME(STIME)
DO t=1,1000
DO J=1,JM
DO I=1,IM
A(I,J)=B(I,J)+C(I,J)
ENDDO
ENDDO
ENDDO
CALL CPU_TIME(ETIME)
WRITE(*,'(F6.3)')ETIME-STIME
CALL MPI_FINALIZE(IERR)
ENDPROGRAM
보시는 바와 같이 단순합니다.
지정할 프로세스간에 데이터 통신은 없습니다,
mpiexec - n 4 실행파일명
으로 실행할 경우와
mpiexec - n 1 실행파일명
으로 실행할 경우 속도차이가 약 4배 정도 납니다
예를 들면
mpiexec - n 1 실행파일명 으로 실행한경우
0.5
mpiexec - n 2 실행파일명 으로 실행한경우
1.0
1.0
mpiexec - n 4 실행파일명 으로 실행한경우
2.0
2.0
2.0
2.0
이유를 모르겠습니다
작성한 코드만 생각하면
mpiexec - n 4 실행파일명 으로 실행한경우
0.50
0.50
0.50
0.50
이렇게 나와야 되는 거아닌가요?
quadcore를 사용중인데 프로세서간 통신도 없고...
제가 잘못 작성한건지 ...
부탁드립니다.
긴글 읽어 주셔서 감사합니다.
이미 올렸던 질문 아닌가요? 아직 답변이 없는 것은
이미 올렸던 질문 아닌가요?
아직 답변이 없는 것은 여기에 사실 잘못 올리신겁니다.
해외 메일링리스트 등에 포스팅해보시는 것이 한가지 방법일 듯.
Loop 시간이 너무 짧아서 그런게 아닐가요 ?
Loop 수만 x100 정도만 하시면, 어느정도 예상하신 결과가 나오는 것 같습니다. Dual-core 놋북이라 2개 까지만 테스트 해봤네요. 아마 quad-core도 비슷할 듯 합니다.
아무래도 Main loop이 너무 짧아서 화면 출력, CPU_TIME 호출 등에서 시간 소요등이 영향을 준게 아닐까 조심스럽게 생각합니다.
아울러 fortran에서 CPU_TIME 호출이 아주 정확하지는 않은 것 같아요. 컴파일러나 mpi 라이브러리 등에 따라 mpi 코드를 돌리다 보면 실제 소요 시간이랑 약간 차이가 나기도 합니다. 제 경우 MS-MPI (Windows 2008 HPC) 사용시 좀 차이가 체감할 정도 였고, OpenMPI (Linux)에서도 조금 발생하지 않았나 싶습니다. 이 부분 은 그냥 제 경험이라 단정짓기는 어려울 것 같습니다. (제가 코드를 잘 못 짜거나, 클러스터 환경 구성시 빠진 부분이 있을수도 있습니다.)
통신을 본격적으로 사용하시면 노드간 이더넷의 느린 성능 덕에 효율성이 많이 떨어지고 이론과는 많이 달라지는 것 같습니다. 인피티밴드를 사용하는 경우는 좀 낳아도 역시 노드간 통신 횟수와 양이 증가하면 성능 하락은 불가피한 것 같습니다. 제 전공 분야상 주로 대용량 계산을 많이 하는데, MPI는 필수지만 그렇다고 이론적인 성능 향상을 기대하면 많이 실망하는 것 같습니다. 계산 환경 및 문제 특성에 따라 다르겠지만, 제가 지금 하는 계산의 경우 그냥 64 계산 코어에서 계산 시간이 1이라면 128코어로 늘리면 0.7-0.8 정도로 줄어주면 많이 만족합니다.
Life is like a turbulent flow
댓글 달기