本博客用来记录所学GPU知识。主要来源于NVIDIA初级教程。
名词解释
1.FLOPS 每秒钟的浮点数运算
2.GFLOPS 10^9*FLOPS
3.TFLOPS 1000*GFLOPS
为什么需要GPU?
应用的需求越来越高(天气预报、石油勘探)
CPU-GPU交互
1.CPU和GPU有各自独立的物理内存空间
2.两者通过PCIE总线互联,数据通过总线传递
3.交互开销较大
线程的组织架构
一个Kernel具有大量的线程。线程划分成大量的线程块,线程块的数目其实是由用户指定的,一个线程块中的线程可以共享存储区。线程和线程块都有唯一的表示ID,可以有效的索引。
编程模型
常规上的GPU用于处理图形图像,可以应用SIMD(single instruction mutiple data),单指令多数据可以理解为数据并行分割。
GPU版本的SIMT(single instruction mutiple thread)
1.大量线程模型高度并行,不再是指令层次
2.多个线程执行相同指令流
3.GPU上大量线程承载调度
CUDA函数声明(device指GPU,host指CPU)
执行位置 | 调用位置 | |
__device__ float DeviceFunc() | device | device |
__global__ void KernelFunc() | device | host |
__host__ float HostFunc() | host | host |
注:核函数为入口函数,CPU上通过调用核函数会在GPU上创建大量的线程,使得数据并行处理,在GPU上执行函数内的内容,但核函数必须返回void;__device__和__host__可以同时修饰一个函数,GPU和CPU上都可以调用。