CUDA编程(一)了解GPU架构
何为GPU?
GPU是英文Graphics Processing Unit
(图形处理器)的缩写,是一种专门设计用于高速处理图像、视频和其他图形数据的处理器。GPU最初是为了帮助计算机快速处理复杂的3D图形而设计的,但现在已广泛应用于许多其他领域,如机器学习、科学计算和图形处理等。
相比于CPU(中央处理器),GPU拥有更多的核心和更高的并行性能,使其能够更快地处理大规模的数据集。GPU还拥有更多的内存和更快的内存带宽,这对于一些需要大量内存和带宽的任务来说非常重要。在没有GPU的时候,人们想将计算机中的数据显示在屏幕上,是使用CPU来进行相关运算的。我们要做的事情简单概括一下,就是通过对数据进行相应的计算,把数据转换成一个又一个图片上的像素,然后将这张图片显示在屏幕上。整个流程中的计算并不复杂,但是数量大,且计算流程重复,如果全盘交给CPU的话会给其造成很大的性能负担。于是乎GPU诞生了:
下面我们来看看GPU与CPU的区别:
可以看到,GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
由于GPU是针对图像处理而设计的,所以要想搞清楚GPU的架构,得先了解一下渲染管线(用于绘制3D场景的核心部分)的流程,下图是DirectX 11中渲染管线的流程:
- 输入装配阶段(Input Assembler Stage):这个阶段将从内存中读取的数据(比如模型的顶点数据)转换为能够被GPU处理的数据格式,以供下一步操作使用。
- 顶点着色器阶段(Vertex Shader Stage):在这个阶段,每个顶点都会被输入到顶点着色器中。在这个阶段,可以对每个顶点进行各种形式的变换(比如缩放、旋转、平移等),并计算出该顶点的最终屏幕位置。
- 外壳着色器阶段(Hull Shader Stage):外壳着色器阶段的主要作用是控制曲面细节和形状,使得渲染出来的曲面更加真实。在这个阶段,可以编程控制曲面的数量和细节程度,以及控制每个曲面的形状。
- 曲面细分评估阶段(Tessellator Stage):这个阶段用于将输入的曲面或几何体进行细分,并将其转换为一系列小的三角形(或其他形状),以便进行光栅化和渲染。在该阶段中,驱动程序会根据细分曲面的类型和属性(如细分级别、曲面类型、细分模式等)进行计算,并生成所需的细分数据,如三角形顶点坐标、法线向量、纹理坐标等。
- Domain Shader Stage(域着色器阶段):该阶段主要用于处理曲面细分后的顶点数据,生成新的顶点数据,并对其进行变换、变形和其他操作。在该阶段中,可以使用自定义着色器代码来操作细分后的曲面顶点数据。这个着色器可以用来实现各种复杂的几何变换和效果,例如曲面弯曲、物体变形、纹理映射等。
- Geometry Shader Stage(几何着色器阶段):该阶段的主要作用是将顶点数据转换成几何图元数据(例如线段、三角形、点等),并且可以根据需要生成新的几何图元。几何着色器阶段在许多应用中都有用,例如粒子系统、几何图元生成、地形细节和特效渲染。但是需要注意的是,由于几何着色器阶段的计算量较大,可能会成为性能瓶颈。
- Stream Output Stage(流输出阶段):该阶段在几何着色器之后,将几何图形数据捕获并存储到缓冲区中。
- Rasterizer Stage(光栅化阶段):在这个阶段中,图形被转换成由像素(也称为片段)组成的栅格图像,以便后续的颜色插值和光栅化操作。具体而言,该阶段的主要任务是根据输入的几何形状和视角信息,将几何图形划分成像素,并计算出每个像素的位置、颜色、深度等信息,然后输出一张2D的栅格图像,可进一步用于纹理贴图、深度测试、遮挡剔除等操作。
- Pixel Shader Stage(像素着色器阶段):在该阶段,每个像素都会被传递到着色器中,然后通过编写的着色器代码进行处理。着色器代码通常使用输入变量(如顶点属性、纹理坐标、光照等)来计算输出颜色。在计算完每个像素的输出颜色后,将该颜色传递到下一个阶段(输出合成阶段)。像素着色器可以实现各种各样的效果,例如纹理映射、光照、阴影等等。通过编写适当的着色器代码,可以使像素看起来更真实、更具有光泽感、更有深度感,从而提高图形渲染的质量。
- Output Merger Stage(输出合并阶段):该阶段主要是将顶点和像素着色器的输出结果合并,并输出最终的像素颜色。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Welcome to Ylxy's Blog!
评论