CUDA 기본 문법 정리

프로그래밍/CUDA 2014. 12. 6. 13:39

<CUDA C언어 기본 문법 정리>


__global__

· 디바이스에서 실행된다. 호스트에서 호출할 수 있지만, 디바이스에서 호출할 수 없다.

· 디바이스로 실행하는 커널 함수 지정에 사용할 수 있다.


1
2
3
__global__ function<<< >>> () 
 
{ ...}


* 주의사항

1. 리턴값은 항상 void이다.(리턴값을 지정할 수 없다. (x))

2. <<<, >>>를 이용하여 실행 시 블록과 스레드 지정이 가능하다.

3. 재귀 호출은 불가능

4. 함수내 static변수를 가질 수 없다.

5. 가변형 인수를 가질 수 없음( __global__ function<<< ... >>> (int a, ...) (x)

6. __global__로 지정한 함수의 포인터를 이용할 수 있다.

7. __host__와 동시에 이용할 수 없다.

8. 디바이스에서 처리가 완료되기 전에 호출한 즉시 반환하여 비동기 동작

9. 공유 메모리를 이용하요 256바이트까지의 인수 사용이 가능하다.



__device__

· 디바이스에서 실행된다. 디바이스에서 호출할 수 있고, 호스트에서 호출이 불가능하다. 디바이스

코드 중에 작성하여 디바이스 내에서의 실행되는 서브함수로 사용한다.


1
2
__device__ int function(int a, int b)
{...}


* 주의사항

1. 재귀호출 사용 불가

2. 함수내 static변수를 가질 수 없다.

3. 가변형 인수를 가질 수 없다.

4. __device__로 지정한 함수의 포인터는 사용할 수 없다.



__host__ 

· 호스트에서 실행된다. 호스트에서 호출할 수 있고, 디바이스에서 호출할 수 없다. 호스트에서 보통 사용하는 함수가 된다.


1
2
__host__ int function(int a, int b)
{ ... }


* 주의사항

1. __host__, __global__, __device__가 지정되지 않은 경우, __host__를 지정한 것과 동일함

2. __global__과 동시에 사용할 수 없다.

3. __device__와 동시에 사용하여, 호스트와 디바이스 양쪽에서 사용할 수 있는 함수로 작성할 수 있다.




<변수 수식어>
1. __device__
· 글로벌 메모리 영역에 할당되어 프로그램이 종료될 때까지 유효하다. 모든 스레드가 액세스 할 수 있고, 호스트 측에서는 API함수를 통해서 읽기와 쓰기가 가능하다.

2. __constant__

· 상수 메모리(constant memory) 영역에 할당되어 프로그램이 종료될 때까지 유효하다. 모든 스레드가 액세스하며 읽기만 가능하다. 호스트에서 cudaMemoryToSymbol()의 API를 통해서 값을 쓸 수 있다. 상수 캐시(constant cache)가 함께 사용된다.

3. __shared__

· 공유 메모리 영역에 할당되어 실행 중인 스레드 블록 상에서 유효하다. 블록 내의 스레드는 액세스하여 읽고 쓰기가 가능하다.


'프로그래밍 > CUDA' 카테고리의 다른 글

Image Processing with CUDA  (0) 2015.07.28
CUDA 스레드 구조  (0) 2014.12.06