学习计算机图形学(一)

今天上了第一节计算机图形学课,记一些学习笔记,欢迎批评指正。

一.CPU与GPU

一般的CPU都是四核八线程的,对应图中的四个ALU,而GPU有多个算术逻辑单元,每一个单元理解为一个“线程”,众多的线程保证了GPU并行计算的优势,而CPU更适合于逻辑运算复杂的操作。CPU擅长逻辑控制,是串行计算,而GPU擅长高强度计算,是并行计算。

GPU又分为集显和独显,集成显卡是集成在主板上,共用主存,而独立显卡的板子上有自己的显存,这样会减少数据通讯所用的时间。

二.线程架构

(1)知识点
Host :主机
Kernel:核程序(由C 程序员编写 的能被并行化的代码)
PTX(Parallel Thread Execution):并行线程执行程序
CTA(Cooperative Thread Arrays):并行或同时执行同一个 核的多个线程列(1D,2D, 3D
Grid: 将执行同一核程序的CTAs 组成一个Grid
注意: CTA中的线程执行的是相同的核 程序,Grid中的 CTA 是独立执行的
Why need Grid?
~ 对于同一核程序可调用的线程将会非常 多
~  减少线程间的通信和同步,(因为不同 CTA之间的线程不能相互通信和同步)
(2)自己理解
~ 一个kernel是由多个编程语句组成的,即多个并行计算
~ 一个Grid对应一个kernel
~ 一个Grid中的每一个CTA(block)对应一个并行计算的语句
~ 硬件中为CTA,CUDA中即软件层面叫block
~ 一个CTA由多个线程(可以理解为ALU)组成,不过CTA为基本单位

三.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类型,表示一个线程的索引。

扫描二维码关注公众号,回复: 16683099 查看本文章

~ blockIdx是一个uint3类型,表示一个线程块的索引,一个线程块中通常有多个线程。

~ blockDim是一个dim3类型,表示线程块的大小。

~ gridDim是一个dim3类型,表示网格的大小,一个网格中通常有多个线程块。

五.流处理器

  1.  GPU围绕一系列流式多处理器(SMs)。多线程程序被分割成线程块,彼此独立,有更多的多处理器的GPU执行相同的程序将会使用更少的时间。
  2. 协处理器,是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于 CPU 中的协处理器,同样不算是辅助处理器,除非它是独立存在。

六.存储结构

  1. 每一线程拥有自己私有的存储,并且每个线程可以有多个私有存储,可以理解为多个寄存器。
  2. 同一CTA有一个对CTA中所有 线程可见的共享存储,其生命 周期在CTA执行完毕释放。
  3. 同一block的所有的线程都可访问同一块全局存储。
  4. 同一grid的所有的线程都可访问同一块全局存储.
  5. 常量、纹理和表面存储这些额 外的存储空间都可被所有线程 访问。(常数和纹理存储是只读的;表面存储是可读写的。
  6. 纹理可以理解为一小块图像,再多次复制平铺在图片上。图片是贴在物体表面,用来展示物体的纹理,纹理即纹路,是颜色与透明度的排列方式。

      

 上面说到的thread、CTA、block、grid都是虚拟机中的架构,实际的物理结构如下图,通常一个sm上运行一个block,当设备内存足够时,多个block可以在同一个sm上运行。

      

猜你喜欢

转载自blog.csdn.net/m0_46749624/article/details/123194228