fortran 90 질문 병렬요~

dony127의 이미지

현재 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를 사용중인데 프로세서간 통신도 없고...

제가 잘못 작성한건지 ...

부탁드립니다.

긴글 읽어 주셔서 감사합니다.

익명 사용자의 이미지

이미 올렸던 질문 아닌가요?
아직 답변이 없는 것은 여기에 사실 잘못 올리신겁니다.
해외 메일링리스트 등에 포스팅해보시는 것이 한가지 방법일 듯.

Aeropark의 이미지

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.