函數類型限定符指定函數是在主機上執行還是在設備上執行和是從主機上調用還是從設備上調用。
一、__device__
使用 __device__ 限定符聲明的函數:
- 在設備上執行;
- 僅可通過設備調用。
二、__global__
使用 __global__ 限定符可將函數聲明爲內核。此類函數:
- 在設備上執行;
- 只能通過主機調用。
__global__ 函數的返回類型必須爲空。
對__ global__ 函數的任何調用都必須按B.18的方法指定其執行配置。
__global__ 函數的調用是異步的,也就是說它會在設備執行完成之前返回。
三、__host__
使用 __host__ 限定符聲明的函數:
- 在主機上執行;
- 僅可通過主機調用。
僅使用 __host__ 限定符聲明函數等同於不使用 __host__ 、 __device__ 或 __global__限定符聲明函數,這兩種情況下,函數都將僅爲主機進行編譯。
__global__ 和 __host__ 限定符不能一起使用。
但 __host__ 限定符也可與 __device__ 限定符一起使用,此時函數將爲主機和設備同時進行編譯。