像素处理器

科技工作者之家  |   2020-11-17 17:32

像素处理器,是指由图像的小方格即所谓的像素(pixel)组成的,这些小方块都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现的出来的样子,进行运算和逻辑运算的一种仪器。

基于查找表的像素处理器图形处理器新算法在基本的像素处理算法的基础上,提出了一种基于查找表的快速平滑插值算法。该算法不仅运算量小、精度较高,而且易于硬件实现,适合于高速显示处理系统中。1

算法概述综合考虑图形显示的速度和逼真两方面因素,故该算法的光照明采用Phong模型,明暗处理采用Gouraud算法,选择三角形面片作为像素处理模型,算法流程采用流水线结构,倒数值通过查找表获得,加/减法、比较运算和乘法等采用并行硬件来实现。对每个三角形有:

**·**只需耗时较少的加法、减法、比较和乘法运算;

**·**没有耗时较多的除法或求倒数运算;

**·**利用查找表法可以保证灰度的高精度;

**·**不会重复扫描任何像素。1

算法的流程该算法的处理过程可以分为5个功能块,其数据流是单向的;同时5个功能块又相对独立,于是可以采用流水线操作,并且整个流程由5级流水组成。

step1: 数据输入接口;

step2: 求dxi、dzi、dσ;

step3: 求dz、dc;

step4: 计算LR端点、计算LR扫描线;

step5: 数据输出接口。1

算法的硬件实现采用FPGA技术和EPLD技术来实现该算法。FPGA(现场可编程逻辑门阵列)和CPLD(复杂可编程逻辑器件)各有优缺点:

(1)FPGA和CPLD在资源方面比传统器件和PLD都要丰富;

(2)FPGA基于RAM工艺,不要求对FPGA母片编程,其编程数据写到EPROM中,上电时通过引导读入FPGA中的RAM,从而使FPGA具有所需要的构造。这个过程需要几十到几百毫秒。而CPLD基于EPROM或E2 PROM 工艺,无上电引导过程,需要对芯片本身编程;

(3)FPGA适合于寄存器密集型设计,但延时很难估计,速度较慢。而CPLD的延时固定,速度较快。

最后,运算器、数据输出接口部分采用一片FPGA器件来实现,FIFO控制、系统控制时序部分采用一片CPLD器件来实现。1

查找表的设计在分辨率为512×512、256级灰度、216级深度信息的高分辨率灰度图形显示系统中,要求坐标x、y的位数各 9位,深度信z的位数取为16位,灰度信息c的位数取为8位。此时,查找表的设计有如下特点:

(1) 采用存储倒数型查找表,即插值变化率为分母的倒数值和分子的乘积,其中分母的倒数值由查找表获得。

(2) 仅仅存储分母的倒数值,可大大减少对存储容量的要求。所需的存储空间可估算如下: 1/(D1ty)所对应的查找表存储容量约为512W(29字),1/(D1tx)所对应的查找表存储容量约为512W(29字);

(3) 考虑到查找表存储容量很小,所以共安排多个线性查找表,以字为单位进行寻址。这样像素处理器(图形处理器)需要约2KW的查找表存贮空间。1

GPU替代CPU崛起中的GPGPU应用自从GPU于2001年进入可编程时代 以来,`’能否把GPU丰富的资源应用到通用计算中去‘’ 一直是业界讨论的话题。毕竟通用计算设计的CPU实力有限。而在进行纯CPU操作的时候。有浮点专长的GPU在 一边睡大觉着实是一种浪费。早在DX8时代就有研究机构尝试用Ti4200显卡进行数据库操作。进入DX9时代 以后此类研究就更多了。2

GPGPU的定义以及特点1、可编程并行处理器

主流GPU有两种可编程并行处理器即顶点处理器(Vertex Shader)和像素处理器(图形处理器)(PixelShader)。在OPenGL中。后者又被称作FragmentProcessor(片断或子素处理器)。顶点处理器负责处理顶点数据流(由位置颜色、标准向量和其它属性)。它们是组成三维几何模型的元素。根据每个顶点相对于其视点的位置。用Vertex Shader程序对其进行变换。

像素处理器(图形处理器)将Pixel Shader程序用于处理每个输出像素以确定最后的颜色。如今无论是PS还是VS都是完全可编程的。可以对四个不同的数值同时执行一条指令。这是因为绘图的基本要素是向量(X、Y、Z、W)和颜色《红、绿、蓝、alPha)。

Shader程序实际就相当于CPU的内循环,在CPU中。一个循环可以重复使用存在一个矩阵内的一个数据流内的各个元素,用该循环体内的各条指令处理这些元素。而在GPU中。类似的指令可以写在Shader程序中并自动应用到相应数据流的所有元素上。在这个运算中。并行处理的数量取决于该GPU中并行处理器的数量。

2、光栅处理器(Rasterizer)

在顶点处理器转换完顶点后,每三个一组的顶点就用来形成 一个三角形。从这个三角形出发,光栅处理器产生一个像素流。实际光栅处理器的功能非常专一,就是表现三角形的。并非可编程,但是可以将其看作一个地址内插器或者数据放大器(因为它根据几个三角形顶点就可以产生许多像素)。2

GPGPU的发展进入DX9 SM2.0时代以后,GPGPU进入了新的时代第三代GPU以NVIDIA GeForce Fx和、ATi R3XX为代表,其像素和顶点可编程性更通用化。像素部分支持FP16/24/32浮点。可以包含上千条指令。依赖纹理更为灵活并且可以用作索引进行查找。纹理不再限制在[0.1]范围,从而可以用作任意数组,这一点是对通用计算的一个重要贡献。在这一代显卡中诞生了很多GPGPU的应用,第一个商用的GPGPU应用NVIDIA Gelato就是从这一 代的显卡开始支持的。这是一款电影后期处理软件。用于进行电影帧渲染处理等工作。

主流的SM3.0显卡可以算作第四代GPU毕竟功能相对以前更为丰富和灵活,而且顶点程序可以访问纹理(VTF)支持动态分支操作(尤其是ATi X1000系列)像素程序开始支持分支操作。包括循环、if/else、重复等。支持子函数调用64位浮点纹理滤波和融合多个绘制目标。同时面向大众的GPGPU应用终于开始出现了(也就是开头提到的FAH)。2

GPGPU相关软件的发展使用HLSL、CG这样的绘制语言(shadinglangugae)进行GPGPU编程存在着不少缺陷用户必须编写控制图形流水线的许多任务。如分配纹理存储、读入绘制程序等,为此程序员对最新的API以及GPU硬件的特点与限制需要有详细的了解。同时,程序员仍然需要利用纹理、三角形等图形素元表达他们的算法这就使得GPU的通用计算编程工作仍然局限于只能由资深的图形开发者进行,严重限制了其发展。

GPU中的Shader实际是典型的流处理机(stream processor)结构。流处理机与向量处理机的主要区别在于它不具有大容量的缓存可以读写,只是直接在芯片上利用临时寄存器作流数据的操作。对于GPU而言图形流数据分别是顶点图元及光栅化后的像素。根据图形处理的特点GPU流处理的元素为4个单元的向量。可以用它表示三维齐次坐标、三维空间齐次向量、颜色等。正是这种流处理机的并行结构。为通用计算提供了并行计算的平台。其中顶点处理器操作在空间的几何点上,因而比较适用于除图形绘制以外的几何操作类的应用:而像素处理器(图形处理器)由于是操作在像素一级的单元上,具有较大容量的‘’纹理`’空间。可以模拟纹理数据及其操作。

Brook一for一GpU把Gpu的解构纳入了流处理器模型这个通用模型中这使得GPGPU的推广成为了可能因为广大程序员不再需要了解GPU的具体物理解构了。此语言由于是为流处理机所设计。因而具有应用于GPU流处理机模型的良好结构与基础有利于扩充该语言作为通用计算的软件工具。Brook的设计本身通过流数据类型定义流数据。作用在数据上的操作或计算称为核(krenel)。核作用于流数据结构实现并行操作,以保证较高的计算效率(即计算操作量相对于带宽的比率)。Brook具有很好的可移植性除了基于Open G L、DirectX针对NVIDIA和ATi等的GPU编程以外。亦可对普通CPU编程。Brook运行系统是一个与GPU结构无关的程序库。它允许由编译器产生的编码使用该库函数去运行核。2

本词条内容贡献者为:

肖志勇 - 副教授 - 江南大学