CUDA

1장 서론

왕크다 2021. 6. 29. 21:52

▶마이크로프로세서 설계시, 매니코어 궤적의 경우 병렬 응용프로그램 처리에 초점을 맞춘다.

*매니코어 : 작은 코어를 대량으로 사용. 

GPU=매니코어, 병렬 실행에 특화

CPU=멀티코어, 순차 실행에 특화 

최대 부동 소수점 연산의 처리량은 매니코어를 사용하는 GPU가 훨씬 처리량이 높다.

전위차 = 병렬 실행과 순차 실행 간 성능 차이

 

 

Figure 1. The GPU Devotes More Transistors to Data Processing

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