모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    포트란90님의
    개인페이지입니다
    가입 : 14-06-21
    방문 : 103회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_5812
    작성자 : 포트란90
    추천 : 9
    조회수 : 14429
    IP : 61.194.***.10
    댓글 : 7개
    등록시간 : 2014/10/07 01:25:40
    http://todayhumor.com/?programmer_5812 모바일
    계산과학계의 영원한 떡밥, 속도논란! 포트란 vs C/C++
    안녕하세요, 
    며칠 전에 포트란 유저분께서 포트란 유저를 찾으시는 글을 올리셨기에 존재감을 드러내고자 
    재미있는 (이라고 쓰고 콜로세우미라고 읽는) 수치실험 (벤치마크?일까요?)을 해보았습니다. 

    이번에 테스트한 시뮬레이션은 분자동역학법 시뮬레이션이라 불리는 입자운동해석방법의 한가지 입니다. 
    쉽게 생각해서 분자들끼리의 상호작용 (힘의 합력, 고딩 물리시간에 알짜힘이라 하죠) 을 구한 후, 
    분자들에 대해서 뉴튼의 운동방정식, F=ma 라는 연립미분방정식을 수치적으로 풀어주는 물리시뮬레이션입니다. 
    가장 부하가 큰 부분이 위에서 언급한 상호작용 계산방법입니다만 이론상으로는 O(N^2) 이지만
    여러가지 근사및 기술을 이용하면 어느 정도 부하를 줄일 수 있습니다. 
    그 다음 수치적으로 미분방정식을 풀어주게 되는데 이 때는 차분식을 이용하여 수치적분을 해줍니다. 
    (개구리가 폴짝폴짝 뛰는 leap-frog 라는 알고리즘을 사용했습니다.)

    분자동역학에 대해서 더 알고 싶으신 분들은 구글선생님께 물어보세요. 
    (다음 링크를 누르시면 검색할 수 있습니다 http://lmgtfy.com/?q=%EB%B6%84%EC%9E%90%EB%8F%99%EC%97%AD%ED%95%99)

    분자동역학에 대한 설명은 이 정도로 하구요,  이번 시뮬레이션의 실행에 있어서 몇 가지 중요한 사항을 언급하겠습니다.

    1. 실험의 독립변수는 프로그래밍언어만 되도록 최대한 노력하였습니다. 
    * 사용한 계산기성능 : Intel Xeon E7-8870, 2.4GHz 10 cores (OS: CentOS), 계산에는 각각 1코어씩 사용했습니다.
    * 컴파일러 : intel compiler (ifort / icc)
    * 컴파일 옵션 : -O3 (최적화옵션)

    2. 포트란으로 되어 있던 샘플코드를 그대로 C로 번역하여 실행시켰습니다. 
    그렇게 큰 프로그램이 아닌 관계로 (약 480줄)
    포트란과 C 둘다 메인함수에 모조리 기능을 다 집어 넣었습니다. (인라인전개) 
    C언어의 경우에는 주석을 달지 않았기 때문에 실제로는 많이 적게 나왔습니다만, 
    주석까지 포함할 경우에는 거의 동일한 길이의 코드가 되지 않을까 생각합니다. 

    * 포트란으로 되어 있던 코드를 C로 번역하였다는 내용이 사실 가장 논란의 여지가 있는 부분이라고는 생각합니다. 
    하지만 그렇게 복잡한 알고리즘 (2중루프) 도 아니고 단지 반복문을 do에서 for로 바꾼 정도이기 때문에 
    개인적으로는 크게 문제 없다고는 생각하고 있습니다. 
    한가지 걱정되는 것은 C의 경우 구조체 선언을 하였는데 그게 성능에 영향을 줄지 안 줄지 잘 모르기 때문에 그 부분이 유일하게 마음에 걸립니다. 
    문제가 된다면 전체코드를 공개하겠습니다. 

    3. 캐시미스가 나지 않도록 최대한 노력하였습니다. (성능에 직결되는 부분이므로)
    즉, 행 우선이냐 열 우선이냐를 최대한 지켰습니다. 

    * 2차원 배열에서의 캐시미스를 방지하는 방법
    C: Row-major order (열 우선)
        for(i=0;i<N1;i++) 
            for(j=0;j<N2;j++)
                arr[i][j]=(...)

    Fortran: Column-major order (행 우선)
        do j=1,n2,1
            do i=1,n1,1
                arr(i,j)=(...)
            end do
        end do

    4. 그 외 시뮬레이션의 물리조건 (흔히 말하는 미분방정식의 초기조건과 경계조건) 은 거의 동일합니다. 
    거의를 사용한 이유는 실제로 난수를 이용하여 초기속도조건을 정했는데
    굳이 일치하지 않더라도 계산을 진행하는데 있어서는 크게 무리가 없기 때문입니다. 
    초기속도조건 이외의 모든 조건은 일치합니다. 

    * 물리조건
    분자: 아르곤 8000개
    온도: 85 K (영하 188도)
    경계조건: 주기경계조건

    밑에 그림이 초기배치이구요. (초록색이 C, 빨간색이 포트란 입니다)

    0001.png

    20만스텝 (스샷에 나와있는 1000 ps = 1 ns = 10^-9 초) 계산 후의 결과 입니다. 

    1001.png

    그리고 그 중간 과정 (동영상) 입니다. 


    (모바일 배려: http://youtu.be/tPBlC801ER8)

    일단 동영상을 보니 크게 문제는 없는 것 같습니다. 
    자 그럼 이 모든 결과를 얻는데 걸린 시간을 한번 보겠습니다. 

    포트란: 3.81 시간
    C: 7.02 시간

    약 1.84 배 가까운 차이가 났습니다. 
    사실 생각보다 차이가 많이 나서 조금 놀랬습니다. 포트란이 빠를거라고는 예상을 하고 있었지만 이만큼 차이가 날 줄은 몰랐네요. 
    일단 이만큼 차이가 나게 된 원인을 곰곰히 생각해 봤는데요, 
    1. 컴파일러의 성능차이? 
    그래서 별도로 gcc 컴파일러로도 계산을 해봤습니다만 결과는 비슷했습니다. 
    다만 인텔컴파일러보다는 시간이 좀 더 걸렸지만요. 
    (다른 워크스테이션을 이용했기 때문에 절대적인 비교는 불가능하지만 CPU 성능 자체는 더 좋았기 때문에 계산이 느리다고는 말할 수 있습니다.)

    2. 구조체 사용과 미사용?
    위에서도 언급하였지만 구조체의 사용 유무가 성능에 영향을 주었을지도 모르겠습니다만, 
    이 정도까지 느려지는지는 잘 모르겠습니다. 

    3. C언어에 최적화 되지 않은 알고리즘?
    일단 기본적으로 완전이 똑같은 알고리즘대로 계산을 하기 때문에 둘다 조건자체는 똑같습니다. 
    그렇기 때문에 이 알고리즘으로 문제를 해결하는데에는 적어도 C보다 포트란이 우수하다라고 말씀드릴 수 있습니다. 
    참고로 외부함수를 불러들이는 것이 C의 경우 많은 시간을 잡아먹기 때문에 
    일부러 인라인 전개를 통해서 main함수에 모든 계산을 집어넣었고, 그로 인한 손실은 거의 없다고 할 수 있습니다. 
    (도중에 sqrt()함수를 몇번 사용했는데, 그게 설마 성능에 영향을 끼쳤을까요?)

    결국은 저도 뚜렷한 이유를 찾지는 못했습니다. (사실 그렇기 때문에 저보다 C를 잘 아시는 분들이 많은 여기에 글을 쓰게 되었지요.)

    일단 제가 결론을 내리자면 분자동역학법 등과 같이 특정한 알고리즘에 있어서 
    포트란이 C보다 월등히 빠른 계산능력을 보여준다는 것을 확인할 수 있었습니다. 

    물론 포트란도 여러 단점들이 있습니다. 
    가독성이 떨어진다든지, (국내 한정으로) 사용자가 얼마 없어서 배우기 힘들다든지, 범용성이 떨어진다든지 등등 있지만
    적어도 수치해석, 특히 어느정도 규모가 있는 수치해석의 경우에는 C보다 포트란을 사용하는 것이 더 좋을지도 모르겠습니다. 

    특히 슈퍼컴퓨터나 클러스터 등에서 이용하는 MPI (Message Passing Interface)의 경우에는 C아니면 포트란이니까요. 
    수치해석을 앞으로 전문적으로 하고 싶다 하시는 분들에게는 포트란을 한번쯤 배워보시는 것을 권유해봅니다. 

    질문 있으시면 댓글 남겨주시구요, 
    읽어주셔서 고맙습니다. 

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2014/10/07 01:47:55  220.81.***.173  퍼렁곰탱이  561445
    [2] 2014/10/07 02:28:39  121.185.***.223  평정컴퓨터  100041
    [3] 2014/10/07 03:11:59  121.143.***.81  황금비  483546
    [4] 2014/10/07 10:39:09  118.218.***.204  슝슝3  284767
    [5] 2014/10/07 11:44:10  130.95.***.179  flooding  557349
    [6] 2014/10/07 19:34:10  211.219.***.122  밤새는코코딩  521736
    [7] 2014/10/07 22:59:49  115.143.***.9  노력의천재  214821
    [8] 2014/11/01 20:48:35  220.92.***.109  단재신채호  424648
    [9] 2014/11/07 06:46:56  128.173.***.172  살얼음  178151
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    3
    초고속 카메라로 찍은 빛 [9] 포트란90 15/01/31 22:55 77 5
    계산과학계의 영원한 떡밥, 속도논란! 포트란 vs C/C++ [9] 포트란90 14/10/07 01:25 68 9
    1
    인텔 제온 파이 코프로세서를 이용한 병렬컴퓨팅에 대해서 [9] 포트란90 14/06/25 11:22 47 0
    [1]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈