热点推荐
ZOL首页 > 显卡 > 评测 > 1000元以上 >

GPU内部通用计算代码运算过程

超越图形界限 AMD并行计算技术全面解析

CBSi中国·ZOL 作者:中关村在线 濮元恺 责任编辑:王胤韬 【原创】 2010年08月25日 06:20 评论
在本页阅读全文(共53页)

    ● 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的存储器重新复制到宿主处理器中。



从Folding@home项目看GPU通用计算发展
两向量相加的简单Brook代码示例

  图为执行两向量相加的简单Brook代码示例。Brook支持所有带附加流数据的C句法,流数据存储于GPU的存储器中,而核函数也在GPU上执行。可编程顶点处理器和碎片处理器提供了许多相同的功能和指令集。但是,大部分GPU编程人员只将碎片处理器用于通用计算任务,因为它通常提供更优的性能,而且可以直接输出到存储器。

  利用碎片处理器进行计算的一个简单例子是对两个向量进行相加。首先,我们发布一个大三角形,其所包含的碎片数量和向量大小(容纳的元素)相同。产生的碎片通过碎片处理器进行处理,处理器以单指令多数据(SIMD)的并行方式执行代码。进行向量相加的代码从存储器中提取两个待加元素,并根据碎片的位置进行向量相加,同时为结果分配输出颜色。输出存储器保存了向量和,这个值在下一步计算中可以被任意使用。

  可编程碎片处理器的ISA类似于DSP或Pentium SSE的指令集,由四路SIMD指令和寄存器组成。这些指令包括标准数学运算、存储器提取指令和几个专用图形指令。

上一页 1 ...35 36 37 38 39 ...53 下一页
本文导航
频道热词:华硕主板  Intel  AMD  
视觉焦点
ATI Radeon HD 4850
  • 商家报价:
  • 厂商品牌:ATI
  • ZOL评分:0
  • 网友口碑:0
  • 查看详细>>
    显卡评测热点
    排行 文章标题