GPGPU - General-Purpose GPU
병렬 처리(Parallel Processing) & 병행 처리(Concurrent Processing)
효율적인 병렬 처리 알고리즘을 직접 설계하고 구현해야 할 필요성을 살펴보자. 아래 예제 코드가 있다.
int sum = 0;
for (int i=0; i<N; i++)
{
int x = ComputeNextValue();
sum += x;
}
위 코드를 병렬로 할 경우, 아래처럼 생각해 볼 수 있다.
위의 과정에서는 연산에 걸리는 시간과 데이터를 전송 받는 시간 사이의 trade-off를 잘 고려해야 한다. 연산이 진행되고 취합하는 과정을 최적화 하는 것도 성능 개선에 도움이 된다.
Micheal J. Flynn이 1966년에 제안한 컴퓨터 아키텍처 구분법이다. 기준은 1. 데이터에 대해 한 번에 수행하는 명령어(instruction)의 개수와 2. 명령어가 수행되는 데이터(data) 개수이다.
여러 명령을 여러 개의 데이터에 적용하는 컴퓨팅 아키텍처. 명령어와 데이터가 1:1로 연결되며, 다수의 SISD가 하나의 칩 안에 들어있는 구조라고 생각하면 된다. 멀티코어 CPU가 한 예이다. 각 산술논리장치 (Arithmetic Logic Unit, ALU)가 각각의 Control Unit을 가지고 있다. 각 스레드에 독립된 작업(task)들을 분배하는 경우가 많으며, 이러한 병렬 처리 기법을 taks-level parallelism이라고 부른다.