Concurrency versus Parallelism ( 병행 실행 vs 병렬 실행 )
- 단일 CPU 시스템은 다중 CPU 시스템으로 발전됨.
- 나중에는 단일 컴퓨팅 칩에 여러 텀퓨팅 코어를 배치하는 것으로 발전
- 이러한 시스템을 다중 코어라고 함.
- 다중 스레드 프로그래밍은 여러 컴퓨팅 코어를 효율적으로 사용하고 병행성을 향상시키는 기법을 제공
- 병행성과 병렬성의 차이점
- 병행 시스템은 모든 작업이 진행되게 하여 둘 이상의 작업을 지원한다.
- 병렬 시스템은 둘 이상의 작업을 동시에 수행할 수 있다.
- CPU 스케줄러는 프로세스 간 빠른 전환을 통해 병렬성의 환상을 제공함.
- 병행하게 실행되었지만 병렬로 실행되지 않음.
프로그래밍 도전 과제
- 일반적으로 다중코어 시스템을 위해 프로그래밍하기 위해서는 5개의 극복해야 할 도전 과제가 있다.
1. 태스크 인식
- 응용을 분석해 독립된 병행 가능 태스크로 나눌 수 있는 영역을 찾는 작업이 필요
- 대스크는 서로 독립적이고 개별 코어에서 병렬 실행될 수 있어야 한다.
2. 균형
- 전체 작업에 균등한 기여도를 갖도록 태스크로 나누는 것
- 기여도가 적은 작업을 위해 별도의 코어를 사용하는 것은 가치가 떨어짐.
3. 데이터 분리
- 태스크가 접근하고 조작하는 데이터 또한 개별 코어에서 사용할 수 있도록 나누어져야 함.
4. 데이터 종속성
- 데이터는 둘 이상의 태스크 사이에 종속성이 없는지 검토되어야 함
- 한 태스크가 다른 태스크에서 오는 데이터에 종속적일 경우, 데이터 종속성을 수용할 수 있도록 태스크의 수행을 잘 동기화 해야 한다.
5. 시험 및 디버깅
- 프로그램이 다중 코어에서 병렬로 실행될 때, 다양한 실행 경로 존재.
- 그런 병행 프로그램을 시험하고 디버깅 - 단일 스레드 보다 어려움.
병렬 실행의 유형
- 데이터 병렬 실행 / 태스크 병렬 실행 두 가지 유형 존재.
- 데이터 병렬 실행 - 동일한 데이터의 부분집합을 다수의 계산 코어에 분배한 뒤 각 코어에서 동일한 연산을 실행하는 데 초점을 맞춘다.
- 태스크 병렬 실행 - 태스크(스레드)를 다수의 코어에 분배한다. 각 스레드는 고유의 연산을 실행한다.
- 데이터 병렬 처리에는 여러 코어에 데이터 분배가 포함 된다.
- 태스크 병렬 처리에는 여러 코어에 태스크 분배가 포함 된다.
- 이 둘은 상호 배타적이지 않다. 실제로 두 전략을 혼합해 사용 할 수 있다.
'운영체제' 카테고리의 다른 글
[운영체제] 스레드와 병행성_다중 스레드 모델 (0) | 2021.03.06 |
---|---|
[운영체제] 스레드와 병행성 _ 개요 (0) | 2021.03.06 |
운영체제 구조 (0) | 2021.02.13 |