CUDA에서 데이터처리 (1)에서는 입력과 출력에 사용될 데이터를 그래픽 메모리에 할당하고 입력하는 방법을 소개했다. 이번 글에서는 데이터의 병렬처리를 위해 스레드를 생성하는 커널 함수에 대해서 설명하겠다.
CUDA에서 데이터 병렬 처리
1. 입력과 출력에 사용할 데이터를 PC 메모리에 할당
2. 입력과 출력에 사용할 데이터를 그래픽 메모리에 할당
3. 처리하고자 하는 값을 PC 메모리에 입력
4. PC 메모리에 있는 입력 데이터를 그래픽 메모리로 복사
5. 데이터를 분할하여 GPU로 가져옴
6. 수천개 이상의 스레드를 생성하여 커널 함수로 병렬처리
7. 처리된 결과를 병합
8. PC 메모리에 결과를 전송
9. 그래픽 메모리를 해제
10. PC 메모리를 해제
CUDA에서는 위와 같은 과정으로 데이터를 병렬처리 한다. 그 중 원하는 연산을 위해 GPU에서 동작하는 함수를 만드는데 그것을 커널 함수 라고 한다. CUDA 커널 함수는 기존의 CPU 프로그래밍과 다르게 독특한 문법을 사용한다.
CUDA 커널 함수 생성
__global__ void Kernel(int a, int b, int c){
...
}
원하는 함수 이름을 사용할 수 있고 __global__과 같은 지시어로 사용할 수 있는 영역을 구분한다. 커널 함수의 반환값은 항상 void이며 가변 파라미터는 사용할 수 없다. 또한 GPU에서 사용하는 함수이기 때문에 인자로 사용되는 포인터 변수가 가리키는 영역은 GPU에 할당된 메모리여야 한다.
CUDA 커널 함수 호출
Kernel<<<block, thread>>>(a, b, c);
기존의 함수 호출 방식과 다르게 <<<, >>> 기호가 추가되었는데 이는 스레드 생성을 지정하는 기호로 <<< 블록 , 블록당 스레드 수>>>의 구조로 이루어져있으며 만약 <<<6, 6>>>로 커널 함수가 호출되었다면 6 * 6 총 36개의 스레드가 생성되어 GPU 코어에서 커널 함수가 실행된다.
'GPU Programming > CUDA basic' 카테고리의 다른 글
3. CUDA 예제 - 초급 (0) | 2022.07.05 |
---|---|
2. CUDA에서 데이터 처리 (3) (0) | 2022.07.05 |
2. CUDA에서 데이터 처리 (1) (0) | 2022.06.29 |
1. CUDA? (0) | 2022.06.29 |
0. Introduction (0) | 2022.06.29 |