ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CUDA C:核函数、主机函数、设备函数

2026/8/21 0:09:46 拓冰建站 浏览量
CUDA C:核函数、主机函数、设备函数

相关阅读

CUDA Cicon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12530616.html?spm=1001.2014.3001.5482


        核函数(Kernel Function)指的是在主机(CPU)调用(某些情况下也可以在设备调用),在设备(GPU)上执行的函数,使用__global__限定符修饰。

        主机函数(Host Function)指的是在主机(CPU)调用,在主机(CPU)上执行的函数,可以使用__host__限定符修饰,一个普通的C函数其实就是一个主机函数。

        设备函数(Device Function)指的是在设备(GPU)调用,在设备(GPU)上指定的函数,使用__device__限定符修饰。

        其中__host__和__device__可以一起使用,代表这个函数既可以在主机调用,主机执行;也可以在设备调用,设备执行。

        上面的函数修饰符信息总结于表1。

表1 函数类型限定符

限定符调用执行备注
__global__可以从主机调用,也可以从计算能力3以上的设备调用在设备执行
__host__从主机调用在主机执行可省略
__device__从设备调用在设备执行

        CUDA提供了一系列运行时(runtime)API供开发者使用,它们大部分是主机函数,小部分即是主机函数也是设备函数。

        例如对于下面的内存拷贝API函数,它就是一个主机函数。

__host__ ​cudaError_t cudaMemcpy ( void* dst, const void* src, size_t count, cudaMemcpyKind kind )

        这个函数中的返回值​是一个cudaError_t枚举类型,参数dst是目标内存指针,参数src是源内存指针,参数count是需要拷贝的字节数,参数kind是一个cudaMemcpyKind枚举类型。

·        cudaMemcpyKind枚举类型的定义如下所示。

cudaMemcpyHostToHost     = 0  //Host -> Host
cudaMemcpyHostToDevice   = 1  //Host -> Device
cudaMemcpyDeviceToHost   = 2  //Device -> Host
cudaMemcpyDeviceToDevice = 3  //Device -> Device//Direction of the transfer is inferred from the pointer values. 
Requires unified virtual addressing
cudaMemcpyDefault        = 4

        下面的设备同步API函数既是一个主机函数,也是一个设备函数。

__host__​__device__​cudaError_t cudaDeviceSynchronize ( void )