개요

강병우·2023년 9월 4일
0

병렬프로그래밍

목록 보기
1/24
post-custom-banner

병렬프로그래밍은 어디에 사용되나.

  • 코어를 늘려도, 성능상 체감이 되지 않는다. 왜냐하면 병렬처리하지 않았기 때문.
  • 컴퓨팅 파워가 커짐에 따라, 처리할 수 있는 일들이 많아짐. 그리고 처리하기 힘든 일들도 많아짐(인공지능 학습 등)
  • 기상청 예보, 단백질 분석 모델링, 빅데이터 분석 등 단시간에 많은 데이터를 처리하는 슈퍼컴퓨터에 병렬프로그래밍이 필요함.

병렬프로그래밍이 필요한 이유

  • 작은 트랜지스터를 사용하면 프로세서가 빨라진다. 이에 전력 소모가 커지고 이는 발열로 이어지며, 프로세서가 고장나기 쉬워진다.
  • 그래서 멀티코어 시스템을 이용하여, 병렬프로그래밍을 처리한다.

어떻게 해결하나

  • 자동으로 프로그램을 병렬프로그램으로 바꿔주는 프로그램을 작성한다. 이건 어렵다.
  • 최고의 방법은 새로운 알고리즘을 적용하여 병렬 처리한다.

간단한 방법

  • 1부터 n까지의 합을 구하는 알고리즘이 있다고 치자.
  • 1부터 n까지 하나의 스레드가 처리하는 것보다, 할당량을 조정하여 1~k, k+1 ~ n ... 의 합을 구하고 다시 하나로 합치는 것이 더 빠를 것이다. < 병렬 처리! (이 외 해결방법은 강의자료 참고!)
  • 위 경우엔 '마스터 코어'가 각 코어의 합산값을 다시 합쳐줘야 한다. 하지만 마스터 코어가 모든 일을 처리하는 것은 비효율적이다. 다른 코어들이 놀기 때문이다. 따라서, 야래처럼 전역 병렬처리를 해줘야 한다.

좋은 병렬 처리를 어떻게 하는가.

  • 만약 교수님 1명이 조교 3명에게 300장의 시험지를 채점을 지시했다고 치자. 이 상황에서 병렬처리를 어떻게 해야될까?
    1. 데이터 병렬 : 조교 한명 당, 시험지 100장씩 처리한다. 단, 채점능력이 다르다면 완료 시점이 각각 다를 것이고, 채점의 기준이 달라 조교마다 채점받은 점수가 다를 수도 있다.

    1. 작업 병렬 : 각 조교마다 채점할 문제 리스트를 부여한다. 3명 모두 300장을 처리하지만, 조교A는 1번~5번 문제, 조교B는 6~10번 문제, 조교C는 11~15번 문제의 채점을 담당한다. 하지만, 채점 난이도가 다르면 이 역시도 불균형이 일어날 수도 있다.
  • 위 방식들은 정답이 아니지만, 상황에 맞춰서 적절한 방식을 채택하면 된다!

    코어는 작업을 조화롭게 하기 위해 필요하다.

  • 의사소통 : 각 코어들은 자신의 최근 합계값을 다른 코어에게 전송한다

  • 로드밸런싱 : 작업이 밸런싱하게 나눠줘야 함.

  • 동기화 : 다른 코어들이 일하는 동안 작업 범위 밖으로 나가지 않도록 제어해준다.

병렬 시스템 형태

  • 공유 메모리
    코어a의 메모리를 변경하면, 코어b도 인지함. 여러 개의 코어가 메모리를 공유하고 있음.
  • 분산 메모리
    각 코어는 서로 다른 메모리 공간을 할당받음.

용어 정리

  • Concurrent Computing : 여러 개의 인스턴스가 번갈아가면서 여러 개의 작업을 처리한다. -> 동시에 처리하는 것처럼 보이지만, 번갈아가면서 처리하기 때문에 이는 병렬 처리가 아니다.
  • Parallel Computing : 하나의 문제를 해결하기 위해 여러 개의 Task로 나누어 이를 처리한다.
  • Distributed Computing : 하나의 프로그램에서 각각 역할을 부여하여 작업을 처리한다.
post-custom-banner

0개의 댓글