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 )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日晨难再

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值