[다중 코어 프로그래밍]
단일 CPU 시스템은 다중 CPU시스템으로 발전하였다. 현재 시스템 설계 추세는 단일 컴퓨팅 칩에 여러 컴퓨팅 코어를 배치하는 것이다. 각 코어는 운영체제에 별도의 CPU로 보이는데 이러한 시스템을 다중 코어라고 한다.
다중 스레드 프로그래밍은 여러 컴퓨팅 코어를 보다 효율적으로 사용하고 병행성을 향상시키는 기법을 제공한다.
스레드가 4개인 응용 프로그램을 고려해보자. 단일 컴퓨팅 코어가 있는 시스템에서는 처리 코어가 한 번에 하나의 스레드만 실행할 수 있기 때문에 TASK가 번갈아가면서 실행된다.(병행성)
그러나 여러 코어가 있는 시스템에서 일부 스레드가 병렬로 실행될 수 있다.(병렬성)
순차 실행 구성요서와 병렬 실행 구성요소로 이루어진 응용에 추가의 계산 코어를 더했을 때 얻을 수 있는 잠재적인 성능을 계산해보자.
N : 처리 코어 개수 / S : 반드시 순차적으로 실행되어야만 하는 구성요소라 할 때
잠재적인 성능은 speedup <= 1 / S + {(1-S) / N} 로 계산될 수 있다.
예를 들어 75%의 병렬 실행 구성요소와 25% 순차 실행 구조를 가지고, 코어가 2개인 시스템에서 실행시킬 경우, 약 1.6배의 속도 향상을 얻을 수 있다.
[병렬 실행의 유형]
일반적으로 데이터 병렬 실행과 태스크 병렬 실행의 두 가지 유형이 존재한다.
1 ) 데이터 병렬 실행 : 동일한 데이터의 부분집합을 다수의 계산 코어에 분배한 뒤 각 코어에서 동일한 연산을 실행
2 ) 태스크 병렬 실행 : 태스크(스레드)를 다수의 코어에 분배해서 각 스레드는 고유의 연산을 실행