GPU NVIDIA_CUDA_Programming_Cuide_1.0 Chapter 4. Application Programming Interface

38 篇文章 0 订阅
38 篇文章 0 订阅

4.1 An Extension to the C Programming Language 

CUDA 平台的编程接口主要是为了方便使用C语言在device(显卡)硬件平台上编写运行程序。

它的扩展包括:

1.对于C语言的很少的扩展,将在Section 4.2 详细描述,主要是为了方便编程人员把程序在Device上运行起来。

2.运行时的library包括一下几个部分:

1)(host)主体部分,运行在主机上,提供访问和控制多个计算平台(device)的功能。(在Section 4.5有详细描述)

2)运算平台(device)模块,运行在平台层,针对不同平台,提供不同的访问调用。(在Section 4.4有详细描述)

3)普通组件模块,提供主体和运算平台都支持的,内嵌的矢量类型和C语言的标准数据类型。(在Section 4.3有详细描述)

这里需要强调的是,只有普通组件模块支持的C语言标准函数,才能在平台上运行。

4.2 Language Extensions

C语言进行了以下4个部分的扩展:

1.函数调用类型,规定函数是否在host 或者device上运行,是否能够被host或者device调用。(在Section 4.2.1有详细描述)

2.规定了变量的位置,规定了变量在device的内存位置。(Section 4.2.2)

3.一种新的调用方法,指明kernel是怎么通过hostdevice上调用的。(Section 4.2.3);

4.4种内嵌的类型(CUDA 特有的类型)grid(栅格),block demensionsblock(块),thread indices(线程id一类的东东)

包含了这些扩展的源文件都必须通过CUDA的编译器nvcc来编译。(Section 4.2.5)。对于nvcc得详细的描述可以在别的文档中找到。

接下来的部分对每种扩展都进行了详细的说明。如果没有违法了详细说明中的规定,nvcc会提示错误或者警告,但是有些遗漏还是不能被检查到。

4.2.1 Function Type Qualifiers 函数类型

4.2.1.1 __device__

__device__ 规定的函数:

device上执行。

只能在device上调用。

4.2.1.2 __global__

__global__ 定义了一个kernel函数:

device上运行。

只能在host上调用

4.2.1.3 __host__

__host__定义的函数:

host上运行,

只能在host上调用。

没有定义__host____device__或者__global__的函数等同于__host__函数,系统都会把函数编译成host函数。

另外,__host__定义可以和__device__定义一起使用,编译器会把这个函数编译为hostdevice通用的函数。

4.2.1.4 Restrictions (强调,限制)

__device__函数通常是inlined

__device____global__函数都不支持递归调用。

__device____global__函数都不能定义static变量在函数内部。

__device____global__函数不能包含有可变参数。

__device__函数没有函数地址,也没有指向它的函数指针,但是__global__函数有。

__global__定义和__host__定义不能一起使用。

__global__函数必须是void返回类型。

任何调用__global__的函数都必须指明运行配置。(Section 4.2.3

__global__函数是异步调用的。在运行结束前就会返回。

__global__函数的参数通常是采用共享内存,最多是265bytes

4.2.2 Variable Type Qualifiers

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值