2022. 11. 16. 20:49ㆍCUDA
함수 수식어
__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__
공유 메모리 영역에 할당되어 실행 중인 스레드 블록 상에서 유효. 블록 내의 스레드는 액세스 하여 읽고 쓰기가 가능.
'CUDA' 카테고리의 다른 글
메모리 아키텍처 (0) | 2022.11.22 |
---|---|
스레드 스케줄링 Thread Scheduling (0) | 2022.11.22 |
스레드 블록 아키텍처 Thread Block Architecture (0) | 2022.11.16 |
CUDA 프로세서 아키텍처 (0) | 2022.11.16 |
CUDA 기본 (0) | 2022.11.15 |