반응형
[CUDA] 수식어
수식어의 종류는 함수의 수식어, 변수의 수식어로 크게 2가지로 나뉜다.
함수의 수식어는 함수 type 정의 앞에 붙는다.
※함수의 수식어 종류
- __global__
device(그래픽카드)에서 실행되며, host(CPU)에서 call 할 수는 있어도 device에서 call 할 수는 없다.
device로 실행하는 kernel function 지정에 사용할 수 있다.
* 문법 주의사항__global__ void function<<< block count, thread count >>>( int a, int b, int c) { }
- Function의 Return type은 무조건 void type 이다.
- <<<, >>>을 이용하여 실행 시 block과 thread를 지정할 수 있다.
- 재귀호출 하여 사용하면 절대 안된다.
- Function 내 static 변수를 가질 수 없다.
- 가변형 인수를 가질 수 없다.
- __global__ 로 지정한 함수의 포인터를 사용 할 수 있다.
- __host__ 수식어와 동시에 사용 할 수는 없다.
- device 에서 처리가 완료되기 전에 호출한 즉시 반환하여 비동기 동작한다.
- 공유 메모리를 이용하고 256 byte 까지의 인수를 사용 할 수 있다. - __device__
device에서 실행되며, device에서 call 할 수는 있어도 host에서 call 할 수는 없다.
device code 중에 작성하여 device 내에서의 실행되는 Sub Function로 사용한다.
* 문법 주의사항
__device__ int function(int a, int b) { }
- 재귀호출은 할 수 없다.
- Function 내에 static 변수를 가질 수 없다.
- 가변형 인수를 가질 수 없다.
- __device__로 지정한 Function의 포인터는 사용할 수 없다. - __host__
host에서 실행되며, host에서 call 할 수 있고, device에서 call 할 수 없다.
host에서 일반적으로 사용하는 Function이다.
* 문법 주의사항// 1번 __host__ int function() { } // 2번 __host__ __device__ int function() { }
- __host__, __global__, __device__ 중 하나의 수식어로 지정되지 않은 경우는 묵시적으로 __host__ 가 기본으로 지정된다.
- __global__ 과 동시에 사용 할 수 없다.
- __device__ 와 동시에 사용하여, host와 device 양쪽에서 사용할 수 있는 함수로 작성 할 수 있다.
※변수의 수식어 종류
- __device__
global memory 영역에 할당되어 프로그램이 종료 될 때까지 유효하다.
모든 Thread가 접근 할 수 있고 host 측에서는 API 함수를 통해서 읽기와 쓰기가 가능하다. - __constant__
상수 메모리(Constant Memory) 영역에 할당되어 프로그램이 종료 될 때까지 유효하다.
모든 Thread가 접근 가능하며, 읽기만 가능하다.
host에서 cudaMemcpyToSymbol()의 API를 통해서 값을 쓸 수 있다.
Constant Cache가 함께 사용된다. - __shared__
share memory 영역에 할당되어 실행 중인 Thread Block에서만 유효하다.
Block 내의 Thread는 접근하여 읽고 쓰기가 가능하다.
반응형
'Windows > CUDA' 카테고리의 다른 글
[CUDA] 프로젝트 작성 및 기본 구조 (0) | 2018.05.21 |
---|---|
[CUDA] Visual Studio 2010 / Visual Studio 2013 기반 OpenCV + CUDA Build (0) | 2018.05.21 |