CUDA

CUDA C

커피살인마 2022. 11. 16. 20:49

함수 수식어

__global__ 

디바이스에서 실행. 호스트에서 호출할 수는 있어도 디바이스에서 호출할 수는 없음. 디바이스로 실행하는 커널 함수 지정에 사용할 수 있음.

재귀호출 할 수 없음. 가변형 인수를 가질 수 없음. __host__와 동시에 이용할 수 없음. 디바이스에서 처리가 완료되기 전에 호출한 즉시 반환하여 비동기 동작함.

 

__device__

디바이스에서 실행. 디바이스에서 호출할 수 있고 호스트에서 호출할 수 없음. 디바이스 코드 중에 작성하여 디바이스 내에서의 실행되는 서브함수로 사용. 

__device__ int function(int a, int b)
{
}

주의사항 : 재귀호출 할 수 없음. 함수 내에 static 변수를 가질 수 없음. 가변형 인수 가질 수 없음. __device__로 지정한 함수의 포인터는 사용할 수 없음. 

 

__host__

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

__host__ int function(int a, int b)
{
}

주의사항 : __host__, __global__, __device__가 지정되지 않은 경우, __host__를 지정한 것과 동일. __global__과 동시에 사용할 수 없음. __device__와 동시에 사용하여, 호스트와 디바이스 양쪽에서 사용할 수 있는 함수로 작성 가능. 

 

변수 수식어

__device__

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

 

__constant__

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

 

__shared__

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