멀티코어 컴퓨팅 2주차

곽태욱·2020년 3월 27일
1

강의 노트

목록 보기
4/22
post-custom-banner

분산 컴퓨팅의 종류

Cluster Computing

유형이 동일한 많은 수의 컴퓨터를 빠른 네트워크를 통해 하나의 시스템으로 묶은 단위다.

  • 슈퍼컴퓨터보다 저렴하게 구성할 수 있지만
  • 각 컴퓨터마다 메모리가 따로 존재해 메모리 통합 관리가 어렵고
  • 네트워크 연결 선이 끊어졌을 때와 같이 오류가 발생했을 때 원인을 찾기가 어렵다.

Grid Computing

세계적으로 흩어져 있는 여러 컴퓨터를 일반 네트워크를 통해 하나의 시스템으로 묶은 단위다. 컴퓨터 간의 물리적인 거리가 길고 각 컴퓨터의 유형이 다를 수 있다.

Cloud Computing

인터넷을 통해 여러 기기의 컴퓨팅 자원을 공유하는 개념이다. 여기서 Cloud는 인터넷을 비유한 말이다. 사용자는 인터넷에 접속되어 있는 아무 기기를 통해 다른 기기의 컴퓨팅 자원을 이용할 수 있다.

좋은 병렬 컴퓨팅이란

  1. 결과가 정확하다. Correct
  2. 성능이 향상된다. Performance
  3. 자원 투자 대비 성능 향상 폭이 크다. Scalability
  4. 놀고 있는 컴퓨터가 없도록 최대한 일을 잘 분배한다. Load Balance

컴퓨터의 발전

20세기

20세기 말 컴퓨터는 다음과 같이 발전했다.

  1. 클럭 속도
  2. 명령 수행 최적화 : 파이프라인, 분기 예측 등
  3. 메모리 캐시

따라서 프로그램이 순차적(sequential)으로 실행돼도 프로그램의 성능이 높아질 수 있었다.

2000년대

하지만 2000년대 들어서 컴퓨터의 클럭 속도를 높이는데 한계가 왔다. 클럭 속도를 4~5GHz에서 더 높일 수록 발열과 전력 소모가 심해졌기 때문이다. 따라서 이때부터 컴퓨터의 아래와 같은 요소를 중점적으로 개발하기 시작했다.

  1. 하이퍼스레딩
  2. 멀티 코어 CPU
  3. 메모리 캐시 크기 증가

하이퍼스레딩은 인텔이 처음 개발한 기술로서 하나의 물리 코어에 2개 이상의 스레드를 할당하는 방법이다. 프로그램이 시작해 프로세스의 스레드가 실행되면 CPU의 각 코어는 스레드를 처리한다. 이때 대부분의 스레드가 CPU의 자원을 100% 사용하진 않는다는 점을 이용하여 CPU의 남는 자원을 다음 스레드에게 할당한다. 즉, 1번의 클럭 사이클에 2개 이상의 스레드를 실행해서 CPU의 성능을 향상시키는 기술이다.

따라서 이제는 프로그램이 CPU의 모든 코어를 효율적으로 사용해야 성능이 높아질 수 있게 됐다. 하이퍼스레딩과 멀티 코어 CPU는 기존 순차적 프로그램 성능 향상에 영향을 주지 않는다. 기껏해야 스레드 인터리빙을 방지해 프로그램이 제 성능을 낼 수 있게 해줄 뿐이다. 즉, 기존 순차적 프로그래밍으론 프로그램의 성능을 높이기 힘들어졌다.

병렬처리에 따른 비용

  1. lock의 오버헤드
  2. 구조적으로 병렬화할 수 없는 경우
  3. 프로그래밍의 어려움

병렬처리가 가능한 부분을 각 스레드에 효율적으로 분배하는 것이 중요하다. 그에 따라 병렬처리를 지원하는 프로그래밍 언어가 등장했다. 자바는 기본으로 지원해왔고, C++은 C++11부터 thread 라이브러리를 통해 지원한다.

profile
이유와 방법을 알려주는 메모장 겸 블로그. 블로그 내용에 대한 토의나 질문은 언제나 환영합니다.
post-custom-banner

0개의 댓글