본문 바로가기

운영체제

[운영체제] 스레드와 병행성_다중 코어 프로그래밍

Concurrency versus Parallelism ( 병행 실행 vs 병렬 실행 )

 

Concurrent execution on single-core system

 

Parallelism on a multi-core system

 

  • 단일 CPU 시스템은 다중 CPU 시스템으로 발전됨.
  • 나중에는 단일 컴퓨팅 칩에 여러 텀퓨팅 코어를 배치하는 것으로 발전
  • 이러한 시스템을 다중 코어라고 함.
  • 다중 스레드 프로그래밍은 여러 컴퓨팅 코어를 효율적으로 사용하고 병행성을 향상시키는 기법을 제공
  • 병행성과 병렬성의 차이점
    • 병행 시스템은 모든 작업이 진행되게 하여 둘 이상의 작업을 지원한다.
    • 병렬 시스템은 둘 이상의 작업을 동시에 수행할 수 있다.
  • CPU 스케줄러는 프로세스 간 빠른 전환을 통해 병렬성의 환상을 제공함. 
  • 병행하게 실행되었지만 병렬로 실행되지 않음.

 

프로그래밍 도전 과제

  • 일반적으로 다중코어 시스템을 위해 프로그래밍하기 위해서는 5개의 극복해야 할 도전 과제가 있다.

1. 태스크 인식

  • 응용을 분석해 독립된 병행 가능 태스크로 나눌 수 있는 영역을 찾는 작업이 필요
  • 대스크는 서로 독립적이고 개별 코어에서 병렬 실행될 수 있어야 한다.

 

2. 균형

  • 전체 작업에 균등한 기여도를 갖도록 태스크로 나누는 것
  • 기여도가 적은 작업을 위해 별도의 코어를 사용하는 것은 가치가 떨어짐.

 

3. 데이터 분리

  • 태스크가 접근하고 조작하는 데이터 또한 개별 코어에서 사용할 수 있도록 나누어져야 함.

 

4. 데이터 종속성

  • 데이터는 둘 이상의 태스크 사이에 종속성이 없는지 검토되어야 함
  • 한 태스크가 다른 태스크에서 오는 데이터에 종속적일 경우, 데이터 종속성을 수용할 수 있도록 태스크의 수행을 잘 동기화 해야 한다.

 

5. 시험 및 디버깅

  • 프로그램이 다중 코어에서 병렬로 실행될 때, 다양한 실행 경로 존재.
  • 그런 병행 프로그램을 시험하고 디버깅 - 단일 스레드 보다 어려움.

 

 

병렬 실행의 유형

 

  • 데이터 병렬 실행 / 태스크 병렬 실행 두 가지 유형 존재.
  • 데이터 병렬 실행 - 동일한 데이터의 부분집합을 다수의 계산 코어에 분배한 뒤 각 코어에서 동일한 연산을 실행하는 데 초점을 맞춘다.
  • 태스크 병렬 실행 - 태스크(스레드)를 다수의 코어에 분배한다. 각 스레드는 고유의 연산을 실행한다.
  • 데이터 병렬 처리에는 여러 코어에 데이터 분배가 포함 된다.
  • 태스크 병렬 처리에는 여러 코어에 태스크 분배가 포함 된다.
  • 이 둘은 상호 배타적이지 않다. 실제로 두 전략을 혼합해 사용 할 수 있다.