● GPU内部通用计算代码运算过程
CPU与GPU在编程方面到底有哪些联系和区别,如何将原有CPU编程概念和GPU硬件概念相对应?相信这对于一位对GPU并不十分了解的程序员还是相当困难的,这一节我们通过对应传统的CPU计算概念和他们对应的GPU概念上做一些非常简单的类比来帮助用户理解这一点。
GPU纹理=CPU数组:在GPU上的基本数据数组结构是纹理和顶点数组。对于GPGPU来说,SIMD结构的流处理器比MIMD结构流处理器更为易用同时拥有更高分值。在任何会在CPU上使用数据数组的地方,都能在GPU上使用纹理。
GPU片段程序=CPU“内循环”:GPU的很多并行流处理器是它们的计算部件——它们在数据流上执行核计算。在CPU上,会使用一个循环来迭代流的元素,串行序列化地处理它们。在CPU的情况中循环内的指令是核。而在GPU上,在一个片段程序中写相似的指令,它们会被应用到流的所有元素。在这个计算过程中,并行数量取决于使用的GPU上有多少个流处理器,以及是否能够很好地利用GPU计算指令提供的四维向量结构的指令并行性。
渲染到纹理=反馈:大多数计算在GPU内部被拆解为很多步,每一步都依赖前一步的输出。在CPU上这些反馈都是微不足道的,因为它的存储器模型是统一的,它的存储器可以在程序中的任何地方被读或者写。而GPU为了反馈,必须使用渲染到纹理这个过程,把片段程序的结果写入存储器,然后才可以把后面的程序输入。
几何体光栅化=计算调用:为了执行一个程序,还应该知道该如何计算,而不止是数据表示、计算和反馈。为了计算调用,只需要绘制几何体。顶点处理器将会转换几何体,而光栅器将会决定它在输出缓冲区中覆盖了哪些像素,并为每一个像素产生一个片段。在GPGPU中,一般处理片段的矩形流中的每个元素,他们表现成一个栅格。因此在GPGPU中编程最常见的一个调用是一个四边形。
在绘制图像时,GPU首先接收宿主系统以三角顶点形式发送的几何数据。这些顶点数据由一个可编程的顶点处理器进行处理,该处理器可以完成几何变换、亮度计算等任何三角形计算。接下来,这些三角形由一个固定功能的光栅器转换成显示在屏幕上的单独“碎片(fragment)”。在屏幕显示之前,每个碎片都通过一个可编程的碎片处理器计算最终颜色值。
计算碎片颜色的运算一般包括集合向量数学操作以及从“纹理”中提取存储数据,“纹理”是一种存储表面材料颜色的位图。最终绘制的场景可以显示在输出设备上,或是从GPU的存储器重新复制到宿主处理器中。
两向量相加的简单Brook代码示例
图为执行两向量相加的简单Brook代码示例。Brook支持所有带附加流数据的C句法,流数据存储于GPU的存储器中,而核函数也在GPU上执行。可编程顶点处理器和碎片处理器提供了许多相同的功能和指令集。但是,大部分GPU编程人员只将碎片处理器用于通用计算任务,因为它通常提供更优的性能,而且可以直接输出到存储器。
利用碎片处理器进行计算的一个简单例子是对两个向量进行相加。首先,我们发布一个大三角形,其所包含的碎片数量和向量大小(容纳的元素)相同。产生的碎片通过碎片处理器进行处理,处理器以单指令多数据(SIMD)的并行方式执行代码。进行向量相加的代码从存储器中提取两个待加元素,并根据碎片的位置进行向量相加,同时为结果分配输出颜色。输出存储器保存了向量和,这个值在下一步计算中可以被任意使用。
可编程碎片处理器的ISA类似于DSP或Pentium SSE的指令集,由四路SIMD指令和寄存器组成。这些指令包括标准数学运算、存储器提取指令和几个专用图形指令。
- 第1页:全文导读与内容简介
- 第2页:前言:通过GPU见证行业变革
- 第3页:第一章:GPU工作原理与并行计算
- 第4页:21世纪视觉需求与GPU变化
- 第5页:从山峰渲染了解GPU图形流水线
- 第6页:CPU与GPU的设计方向决定运算能力
- 第7页:GPU并行编程为何加速发展
- 第8页:GPU并行计算已成未来趋势
- 第9页:初识高性能并行计算
- 第10页:高性能并行计算发展历程
- 第11页:高性能并行计算单元分类
- 第12页:初识基于GPU系统的云计算
- 第13页:第二章:GPU结构与ATI产品发展
- 第14页:统一着色器架构释放GPU运算能力
- 第15页:传统GPU发展与着色器管线
- 第16页:传统SIMD结构流处理器指令细节
- 第17页:MIMD结构流处理器指令细节
- 第18页:R600时代对SIMD架构补充与优化
- 第19页:两种结构流处理器优劣对比
- 第20页:R300以来的芯片架构及其影响
- 第21页:ATI第一代统一渲染架构Xenos
- 第22页:统一渲染GPU R600临危受命
- 第23页:AMD对GPU架构的不断改进和优化
- 第24页:未来ATI图形芯片架构预测
- 第25页:第三章:GPU通用计算发展与细节
- 第26页:多核并行计算困惑与发展
- 第27页:基于AMD CPU+GPU异构计算平台
- 第28页:着色器模型变化历程与总结
- 第29页:Shader计算能力快速发展
- 第30页:揭秘GPU高性能计算关键
- 第31页:CPU与GPU的区别和发展方向
- 第32页:如何将GPU功能单元映射为通用单元
- 第33页:分支对GPU结构体系的挑战
- 第34页:GPU与CPU将如何演绎融合与吞并
- 第35页:第四章:GPU内部计算实现细节
- 第36页:GPU主要计算单元分布和职能
- 第37页:GPU内部通用计算代码运算过程
- 第38页:认识GPU浮点计算精度
- 第39页:整数运算能力与未来融合架构
- 第40页:GPU存储体系特点与变化
- 第41页:ATI GPU吞吐特性对比与分析
- 第42页:ATI GPU OPEN CL综合性能分析
- 第43页:先进混合架构之Larrabee展望
- 第44页:概念型融合架构之Fusion APU展望
- 第45页:GPU进化架构之Fermi分析
- 第46页:第五章:ATI GPU通用计算实例
- 第47页:ATI Stream技术发展与现状
- 第48页:OPEN CL接口技术与异构运算
- 第49页:Havok引擎与CPU+GPU异构运算
- 第50页:BOINC平台充沛的ATI GPU加速项目
- 第51页:最具影响力的Folding@home项目
- 第52页:GPU架构对于其他实例的适应性
- 第53页:全文总结与未来架构展望