TIL 020 멀티코어

조성현·2021년 5월 23일
0
post-custom-banner

📕 멀티코어 프로세서

폴락의 법칙에 의해 반도체의 성능에는 물리적인 한계가 있다.
이것을 해결하기 위해 코어 개수를 늘리는 쪽으로 CPU가 발전하게 되었다.

📘 멀티코어는 어떻게 작동하는 걸까

cpu의 여러 코어의 성능을 제대로 끌어내려면 일거리를 효율적으로 배분하도록 멀티스레드 구조로 짜야한다.

📘 개념

멀티코어
하드웨어 관점에서의 물리적 구성 단위

멀티스레드
소프트웨어 관점에서의 논리적 작업 처리단위

📘 멀티스레드 프로그래밍

1. 공유 메모리 모델

  • 모든 스레드가 하나의 메모리 공간을 공유.
  • 메모리 작업시, 작업중인지 확인하고 락을 걸고 메모리를 사용한다.
  • GPU는 보통 공유 메모리 사용. (하드웨어와 드라이버에서 어느 정도 락 관련 부분을 처리해주기 때문)

장점

  • 싱글스레드로 구현된 코드를 변환시키기 쉽다.(단순히 락 기능만 추가하면 된다)
  • 만약, 공유되는 자원이 없다면 빠른 병렬성 보장 ( 하나의 이미지에 락을 걸고 렌더링 vs 이미지를 등분해서 나눠서 렌더링)

단점

  • 병목현상이 발생한다.
    (락을 가지고 죽어버리는 데드락, 서로 락을 차지하려는 레이스 컨디션, 무한히 다른 락을 기다리는 스타베이션 )
  • 락을 확인하는 시점에 모든 스레드가 동기화 되어야하기 때문에 가장 느린 스레드의 속도에 맞춰져 버린다.

2. 메시지 전달 모델

  • 모든 스레드가 격리된 메모리 공간을 할당.
  • 생산자 스레드와 소비자 스레드로 구분
  • 스레드간 데이터 교환은 통신 채널을 통해 메시지 전달
  • 통신채널은 비동기로 동작
  • 각 스레드는 자신의 메시지를 받을 준비가 되었을 때 자신의 메시지 큐에 들어온대로 명령 처리.
    (메세지 큐가 꽉찼을때는 송신자 스레드가 대기 혹은 메세지 폐기)
  • 함수형 언어가 잘 지원하는 방식 (함수 하나하나가 독자적이기 때문)

장점

  • 락 매커니즘이 필요없다
  • 비동기이 때문에 느린 스레드에 맞춰 줄 필요가 없다.
  • 규모 확장이 쉽다.

단점

  • 싱글 스레드에서 변환하기가 복잡하다.
  • 메모리의 공간적 부담이 상승.
    (소비자 스레드는 보통 CPU 내부캐쉬로 커버할 수 있을 정도로 작다고함)
  • 메모리를 일관성 없이 참조해 CPU 적중률이 떨어짐.
    -> 벡터곱,행렬곱,텐서곱 등 균일한 배열에 대한 연산은 공유메모리 모델이 유리.
  • 큐에 넣는 것도 사실 상 오버헤드
    -> 간단한 수식 작업은 오버헤드가 커져서 비효율적.

참고)

프로세스간 통신 IPC
https://doitnow-man.tistory.com/110

profile
Jazzing👨‍💻
post-custom-banner

0개의 댓글