▶마이크로프로세서 설계시, 매니코어 궤적의 경우 병렬 응용프로그램 처리에 초점을 맞춘다.
*매니코어 : 작은 코어를 대량으로 사용.
GPU=매니코어, 병렬 실행에 특화
CPU=멀티코어, 순차 실행에 특화
최대 부동 소수점 연산의 처리량은 매니코어를 사용하는 GPU가 훨씬 처리량이 높다.
전위차 = 병렬 실행과 순차 실행 간 성능 차이
Figure1과 같이 CPU와 GPU는 설계 구조가 다르다.
CPU
- 순차적인 코드의 성능 최대화를 위해 설계. 실제로는 단일 쓰레드를 구성하는 명령어들을 병렬로,
- 비순차적으로 실행하는 복잡한 제어 로직 사용.
- 데이터 접근 지연시간을 줄이기 위해 큰 cache memory 사용.
- 그러나 복잡한 제어 로직과 큰 cache memory 는 최대 연산 속도에 영향을 미치지 못함.
GPU
- 쉽게 메모리 대역폭을 늘릴 수 있다.
- 많은 수의 쓰레드를 통해 처리량을 최적화 (지연시간이 긴 메모리 접근을 기다리는 동안 다른 쓰레드가 작업을 수행하도록 함 => 제어 로직을 최소화
- 동일한 메모리에 접근할 경우 여러 쓰레드들이 실제로 접근할 필요 없이 작은 크기의 cache memory 제공.
- 산술 연산 엔진으로 설계
▶GPU의 구조
쓰레드화 된 스트리밍 멀티프로세서(streaming multiprocessor:SM)의 배열로 구성.
하나의 SM은 제어 논리회로&명령어 회로를 공유하는 다수의 스트리밍 프로세서(streaming processor:SP) 로 구성.
GPU를 통해 CPU로 수행하는 것에 비하여 속도 향상을 얻는 것은 application 마다 다르다.
대부분의 application은 CPU에서 훨씬 수행을 잘 하며(많은 부분이 순차적으로 수행되기 때문),
사용자가 CPU에서 많은 부분을 처리하도록 하고 GPU가 실행을 도와주는 방식으로 코드를 작성해야 함.
▶CUDA
- GPU내에서 병렬처리를 위한 공유 메모리 기능을 제공.
- 프로그래머는 CPU-GPU간의 데이터 통신에 "단방향(one-sided)" 메시지 전달 방법을 사용.
'CUDA' 카테고리의 다른 글
5장 CUDA 메모리 (0) | 2021.07.12 |
---|---|
4장. CUDA 스레드 (0) | 2021.07.07 |
3장 CUDA의 기초 (1) | 2021.06.30 |