NVIDIA CUDA初级教程视频--(七)

**

第七章CUDA编程(二)

**
1.函数的声明
global void KernelFunc():只能从主机端调用,在设备执行,返回值类型必须是空
device float DeviceFunc():在设备和设备间使用
host float HostFunc():在主机端和主机端使用
globaldevice :尽量少用递归(不鼓励),不要用静态变量,少用malloc(现在允许但不鼓励),小心通过指针实现的函数调用
2.向量数据类型
char[1-4],uchar[1-4],short[1-4],ushort[1-4],int[1-4],uint[1-4],long[1-4],ulong[1-4],longlong[1-4],ulonglong[1-4],float[1-4],double1,double2
同时适用于主机端和设备段代码,通过函数make_构造,通过.x,.y.z,.w访问
3.数学函数 sqrt.rsqrt,exp.log,sin,cos,tan,sincos等等
Intrinsi function内建函数:仅仅面向设备端,更快,精度降低,以__为前缀,比如__exp
4.线程同步:块内线程可以同步,调用

__syncthreads创建一个barrier栅栏,每个线程在调用点等待块内所有线程执行到这个地方,然后所有线程继续执行后续指令,这是在一个线程块内的,而不是全局的。
要求线程的执行时间尽量接近,会导致线程暂停,甚至造成死锁
5.线程调度:
Warp-块内的一组线程:G80/GT200 -32个线程,运行于同一个SM,线程调度的基本单位,threadIdx值连续,一个实现细节,warpSize
利用线程相互独立执行的代码充分占据空闲的时间洗,达到延迟掩藏的效果,warp的调度是零开销的,是存在于物理空间的,如果warp内部线程沿不同分支线,则出现devergent warp
6.内存模型
寄存器registers:每个线程专用,快速,片上,可读写,增加kernel的寄存器用量
超出限制后线程数将因为block的减少而减少
局部存储器local memory:存储在global memory,作用域是每个线程,用于存储自动变量数组,通过常亮索引访问。
shared memory:在每个block共享,快速,片上,可读写,全速随机访问,和cache在同一个等级。
全局存储器:global memory:长延时(100个周期),片外,可读写,随即访问影响 性能,host主机端可读写,带宽非常大
常量存储器:constant memory:短延时,高带宽,当所有线程访问同一位置时只读,有缓存
NVIDIA CUDA初级教程视频--(七)_第1张图片
NVIDIA CUDA初级教程视频--(七)_第2张图片

你可能感兴趣的:(CUDA开发)