今天上了第一节计算机图形学课,记一些学习笔记,欢迎批评指正。
一.CPU与GPU
一般的CPU都是四核八线程的,对应图中的四个ALU,而GPU有多个算术逻辑单元,每一个单元理解为一个“线程”,众多的线程保证了GPU并行计算的优势,而CPU更适合于逻辑运算复杂的操作。CPU擅长逻辑控制,是串行计算,而GPU擅长高强度计算,是并行计算。
GPU又分为集显和独显,集成显卡是集成在主板上,共用主存,而独立显卡的板子上有自己的显存,这样会减少数据通讯所用的时间。
二.线程架构
三.CUDA与CUDNN
(1)CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。
(2)CUDNN(CUDA Deep Neural Network library):是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。它能将模型训练的计算优化之后,再通过 CUDA 调用 GPU 进行运算。如果你要用GPU训练模型,CUDNN不是必须的,也就是说你也可直接使用 CUDA,而不通过 CUDNN ,但运算效率会低好多。
四.CUDA编程
理解:
(1)<<<...>>>:CUDA语法,表示kernel被指定多少个CUDA线 程调用
(2)
~ threadIdx是一个uint3类型,表示一个线程的索引。
~ blockIdx是一个uint3类型,表示一个线程块的索引,一个线程块中通常有多个线程。
~ blockDim是一个dim3类型,表示线程块的大小。
~ gridDim是一个dim3类型,表示网格的大小,一个网格中通常有多个线程块。
五.流处理器
- GPU围绕一系列流式多处理器(SMs)。多线程程序被分割成线程块,彼此独立,有更多的多处理器的GPU执行相同的程序将会使用更少的时间。
- 协处理器,是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于 CPU 中的协处理器,同样不算是辅助处理器,除非它是独立存在。
六.存储结构
- 每一线程拥有自己私有的存储,并且每个线程可以有多个私有存储,可以理解为多个寄存器。
- 同一CTA有一个对CTA中所有 线程可见的共享存储,其生命 周期在CTA执行完毕释放。
- 同一block的所有的线程都可访问同一块全局存储。
- 同一grid的所有的线程都可访问同一块全局存储.
- 常量、纹理和表面存储这些额 外的存储空间都可被所有线程 访问。(常数和纹理存储是只读的;表面存储是可读写的。)
- 纹理可以理解为一小块图像,再多次复制平铺在图片上。图片是贴在物体表面,用来展示物体的纹理,纹理即纹路,是颜色与透明度的排列方式。
上面说到的thread、CTA、block、grid都是虚拟机中的架构,实际的物理结构如下图,通常一个sm上运行一个block,当设备内存足够时,多个block可以在同一个sm上运行。