컴퓨터(Computer Science)/운영체제(Operation System)

다중 코어 프로그래밍 (Multicore programming)

게임이 더 좋아 2020. 5. 30. 21:14
반응형
728x170

영어도 보다보면 익숙해진다

 

보고가자

 

• Types of parallelism 

Data parallelism – distributes subsets of the same data across multiple cores, same operation on each
Task parallelism – distributing threads across cores, each thread performing unique operation

 

• As # of threads grows, so does architectural support for threading
CPUs have cores as well as hardware threads
Consider Oracle SPARC T4 with 8 cores, and 8 hardware threads per core

 

 


요즘 컴퓨터보면 뭐든 맨날 코어가 많다. 적게는 4개부터 16개까지... 뭐 여기까지가 가정용이겠지..?

 

아무튼 코어가 정말 많아졌다.  그것을 다중 코어라고 한다.

 

다중 코어에서 다중 스레드 프로그래밍은 여러 코어를 효율적으로 사용하고 병행성을 향상시키는 기법을 제공한다.

 

 

단일 코어에서는 어차피 코어가 한 번에 하나의 스레드만 실행할 수 있다.

 

 

그렇지만 다중 코어에서는 각 코어에 별도의 스레드를 할당할 수 있어서 스레드가 병렬로 실행이 가능하다.

 

 

 

 

** 병행성, 병렬성, Concurrency, Pararrelism 은 다르다.

 

병행 시스템은 모든 작업이 진행되게 하여 둘 이상의 작업을 지원하는 것이다.

병렬 시스템은 둘 이상의 작업을 동시에 수행하는 것이다.

 

병렬성이 없어도 병행성을 가질 수 있다. 

 

 

 

 

 


다중 코어 시스템에서 프로그래밍하기 위해서는 고려할 점이 많다.

 

• Multicore or multiprocessor systems putting pressure on programmers, challenges include:
1. Identifying tasks
2. Balance
3. Data splitting
4. Data dependency
5. Testing and debugging


Parallelism implies a system can perform more than one task simultaneously

Concurrency supports more than one task making progress
• Single processor / core, scheduler providing concurrency

 

 

 

5가지 정도 있다.

 

1. 태스크 인식

응용을 분석해서 독립된 병행 가능 태스크로 나눌 수 있는 영역을 찾는 작업이 필요하다.

// 태스크가 서로 독립적이고 개별 코어에서 병렬 실행될 수 있는 것이 이상적이다.

 

 

2. 균형

병렬로 실행될 수 있는 태스크를 전체 작업에 균등한 기여도를 가지도록 태스크를 나누어야한다.

//기여도가 낮음에도 코어 하나를 쓰는 것은 아깝다.

 

 

3. 데이터 분리

응용이 독립된 태스크로 나누어지는 것처럼, 태스크가 접근하고 조작하는 데이터 또한 개별 코어에서 사용할 수 있도록 나우어져야 한다. // 그래야 실행할 수 있지.

 

 

4. 데이터 종속성

태스크가 접근하는 데이터는 둘 이상의 태스크 사이에 종속성이 없는지 검토해봐야 한다.

 

** 종속적인 경우 태스크의 수행을 동기화해야한다.

 

5. 시험 및 디버깅

프로그램이 다중 코어에서 병렬로 실행될 때 다양한 실행 경로가 존재할 수 있으므로 시험하고 디버깅 해봐야 한다.

 

 

 


 

 

병렬 실행의 유형은 2가지 정도가 있는데

 

1. 데이터 병렬 실행

2. 태스크 병렬 실행

 

우선 데이터 병렬 실행부터 살펴보자면

동일한 데이터의 부분집합을 다수의 계산 코어에 분배한 뒤 각 코어에서 동일한 연산을 실행하는데 초점을 맞춘다.

 

예를 들자면

크기가 N인 배열의 내용을 더하는 경우

 

단일 코어 시스템에서는 [0] 부터 [N-1] 까지 더한다.

 

듀얼 코어 시스템에서는 [0] ~ [N/2-1] [N/2]~[N-1] 까지 더할 수 있다는 것이다.

코어 1에서는 스레드 A가 계산, 코어 2에서는 스레드 B가 계산되는 것이다.

 

 

 

태스크 병렬 실행은 데이터가 아니라 태스크(스레드)를 다수의 코어에 분배하는 것이다.

각 스레드는 고유의 연산을 실행하기만 하면 된다. 

 

 

사실 어느 한 쪽만 골라서 쓰는게 아니라 둘이 잘 혼합해서 쓰는 것이다.

 

그래야 효율적으로 된다.

 

 

728x90
반응형
그리드형