利用FPGA器件加速OpenCL在MFP图像处理中的应用.doc
《利用FPGA器件加速OpenCL在MFP图像处理中的应用.doc》由会员分享,可在线阅读,更多相关《利用FPGA器件加速OpenCL在MFP图像处理中的应用.doc(19页珍藏版)》请在三一办公上搜索。
1、利用FPGA器件加速OpenCL在MFP图像处理中的应用I. 引言历史上,MFP和打印机厂商都是开发定制ASIC或SoC器件来执行图像处理操作。这些ASIC/SoC器件包括图像流水线,用以接受来自CCD或CIS传感器的RGB数据,执行滤波、缩小/放大、色彩空间转换、图像分割和半色调操作。然后,由此产生的经处理的图像使用减色着色剂进行打印:青色、品红、黄色和黑色。其目标是在打印副本上精确地再现原始文档,而不引入视觉假像。在底层技术(如DDR内存和USB连接)变得过时之前,ASIC/SoC器件通常有三年的有限寿命。随着硅技术的不断萎缩,开发一个定制ASIC/SoC所需的投资在继续增加。一个采用双核
2、处理器、必要的连接、DDR3内存控制器、图像处理、GPU、LCD控制器等的28纳米SoC的设计、开发和交付需要花费超过1000万美元的成本。取决于许多因素,大型SoC/ASIC器件的开发周期要花18至30个月,包括新IP的数量和大小、利用以往设计的能力、设计团队经验和成熟的有针对性的硅技术。打印机/MFP市场的产品周期是24到36个月的时间。打印机/MFP市场成长速度平缓,增加了以较低成本和较短开发周期提供更多功能的竞争压力。随着ASIC/SoC开发周期接近同一时间MFP产品的生命周期,MFP/打印机厂商需要一个新的平台来缩短开发和部署周期。基于SoC的OpenCL和FPGA的组合为解决这一难
3、题提供了一个有趣的解决方案。II. MFP图像处理流水线背景一个重要的研究机构已经在文档图像处理领域积累了近20年的经验。大部分早期工作都侧重于图像处理的基础知识,包括提供统一色彩的校准输入传感器数据、去除来自传感器噪声的滤波,实现图像尺寸缩小或放大的缩放算法,以及实现使用二进制像素打印连续色调图像数据的半色调。当前的文档图像处理研究和开发处于图像分析、内容提取和数据压缩技术领域。所有MFP文档图像处理产品都可执行一系列基本功能复印、扫描和打印。图1用图形说明了一台个MFP设备的基本功能或流水线。复印和扫描的操作相类似,开始于从一个扫描设备到设备无关的彩色空间的原始RGB数据转换。复印操作进一
4、步处理设备无关的色彩空间图像,并创建用于打印的CMYK图像。扫描操作在设备无关的色彩空间图像上执行一组不同的图像处理操作。这些操作可以包括:图像分析、用不同频率内容将图像分割为多个图像层、OCR、光学字符识别和数据压缩。然后,所产生的图像转被移到任一本地存储介质,如USB闪存驱动器或网络设备。图字:来自CCD或基于CIS扫描仪的RGB;分割扫描仪接口;校准和调整;CST(RGB到Lab);滤波器;缩放R 来自网络的PS/PCL/其他PDL;解译;显示列表;渲染器;位图或字节图;调整;半色调;无损压缩;图像存储;无损解压缩;图像调整;引擎接口有损解压缩;有损压缩;至引擎出口处理;至网络外部接口;
5、微观图像处理操作;图像存储;通用CPU操作;宏观图像处理操作打印功能接收一个采用PDL(页面描述语言)的编码,或图形显示接口格式的文件。在采用PDL文件的情况下,MFP设备必须首先解释文档语言,并创建一个原始对象列表。渲染器捕获这些对象,并将其转换成数字CMYK位图/位图图像。所产生的数字图像可被进一步处理和随意压缩。GDI打印机不需要解释过程,因为传送到打印机的图像是一个显示对象的列表。一旦打印或复印流水线创建了CMYK位图/位图图像,图像即被发送到引擎在所需介质上打印。本文的重点是一个OpenCL MFP核心复印流水线(CCP)的开发,如图2所示。图字:滤波器;缩放R 图像存储源图像510
6、0x6600x24位LAB;目标图像5100x6600x32位CMYKIII. MFP核心复印流水线CCP由5个内核组成:77滤波器;用pad/crop缩放或减小与放大;色彩空间转换;调整和误差扩散。我们将简要地回顾各个算法和相关的内存需求。A. 77滤波器77滤波器是一个2D对称滤波器,可降低图像噪声。它的每一行需要跨连续7行乘连续7个像素的49个像素的上下文(context)。MFP应用通常使用一组系数来实现一个平均或锐化滤波器。77滤波器的一般形式是:由于系数值经常重复,滤波处理可以避免重复的乘法和加法。相反,乘以相同系数的像素可首先加入,然后与滤波器系数相乘一次。图4直观地显示了潜在的
7、优化。这个数字仅为了清晰起见,并不代表OpenCL设计。图字:M每页扫描线N每扫描线像素像素;减少的滤波矩阵;有相同颜色的条目分享共同系数工作矩阵对称滤波器计算的高度概括,针对左到右滑动进行了优化,包括:1. 针对每一个加载的新的像素栏3种加法A2. 针对属于图4所示47矩阵中相同滤波器系数像素的18种加法3. 针对每个系数一个C0至C9的10种乘法M4. 计算系数乘法最终结果的9种加法那么,计算的总数是10M + 3A + 18A + 9A = 10M + 30A。图5示出了计算树。随着滤波器在图像上从左至右的滑动,仅需要加载最右侧像素列,即7个像素。逻辑上,这涉及将内部像素列移到左边,并在
8、右侧加上新的像素列。B. 缩放缩放模块使用双线性插值来减小和/或放大一幅图像。双线性插值是一个众所周知的算法,在所需的新输出像素周围使用了4个输入像素。图6示出了要测试像素的双线性插值输入和输出网格。C. 色彩空间转换CCP采用设备无关的色彩空间数据,通常是LAB格式,并将其转换为设备相关的CMYK色彩空间。不幸的是,没有公式化的方法来直接转换L*a*b*至CMYK。每台打印机的着色剂以非线性方式进行交互。打印行业的公认方法是打印测试斑点,测量所得色,并创建一组C、M、Y和K查找表,即LUT。关键是要尽量减少LUT的大小,同时提供最高的色彩保真度。为了计算这些存储在LUT之间的值,我们必须使用
9、一个插值方案。有许多方法来执行插值,但四面体插值法被广泛认为是最准确的。顾名思义,四面体插值法使用4个已知点来计算一个中间点。在我们的L*a*b*情况下,这些已知点的每一个都具有对应于输入色彩空间的三个维度。三个输入维度L、a、b形成一个我们可以用来确定输出像素的立方体。图7示出了色彩空间和LUT概念。注意每个输出彩色平面都有独立的LUT。图字:第一张图:L*a*b* 色彩空间下方注解:对于每24位输入L*a*b*像素,可能有224个32位CMYK输出像素。这相当于64MB LUT!第二张图:青色点阵单位立方体格点凭经验测量感兴趣的像要使LUT大小降低到一个合理水平,我们可执行以下操作:每彩色
10、平面有各自的LUT每个LUT有代表点阵点的4096个条目算法首先发现期望像素点驻留的单位立方体一旦算法确定了哪一个单位立方体包含要测试的输出像素,我们必须从一组8个已知像素中计算出输出像素。这是三线性插值的实际情形。四面体插值法利用一个单位立方体可以被划分成一组6个非重叠四面体的方法,其每个终点都位于单位立方体的顶点。使用一个四面体(有4个点)内插来削减一半像素数时,我们必须使用插值结果。图8以图形示出了六个四面体。CST算法首先确定了输出像素(P)驻留在哪个四面体中,并使用了4个已知输出像素插入最终结果见图7。图9示出了四面体5中的像素P。该算法计算了每个单位立方体轴端点和像素dx、dy、d
11、z之间的距离,并使用了已知点之间的线性插值距离。D. TRC调整TRC调整算法是一个简单的LUT。它允许C、M、Y、K值的进一步调整,以校正非线性色调再现。具体C、M、Y、K LUT条目凭经验来测量。E. 误差扩散最后阶段执行半色调功能。彩色激光MFP产品使用一个激光系统来消除感光介质上的电荷。无论电荷清除的是C、M、Y、K,墨粉都不能转移到感光体。激光束扫过移动的感光体,被调制来创建一个倒置的图像。调制的最小时间周期是一个像素。在反转图像被写入感光体后,它经过一个墨粉分配器附近。然后,带有相反电荷的墨粉被吸引到电荷存在的感光区。墨粉“粘”到感光体上。最后一个步骤是将感光体上的图像转印到纸张或
12、其他介质上。单个像素或开或关,实现二进制的1过程。来自TRC内核的8位CMYK像素必须半色调或二进制化,以驱动打印机中的激光系统。有许多算法可以将连续色调数据转换为二进制数据。误差扩散是MFP/打印机中使用的一种通用算法。我们选择了实施众所周知的弗洛伊德-斯坦伯格(Floyd-Steinberg)误差扩散算法的一个变种,它有简单的算术修正系数7。弗洛伊德-斯坦伯格误差扩散量化了基于一个阈值阵列的输入像素,然后将剩余误差分配到相邻像素。在我们的案例中,我们将一个8位输入像素减少到二进制输出像素。因此,我们的阈值阵列是一个127的值。大于127的输入像素成为了逻辑1。127的像素成为了0。该算法定
13、义如下:1. IP(x,y)是当前输入像素2. EPP是来自以前像素的剩余阈值误差,IP(x-1,y)3. EP是来自以前扫描线的误差矢量,y-1。IV. ALTERA OpenCL编译器超出实际OpenCL代码的OpenCL系统的最关键部分是编译器。针对OpenCL 13.1,Altera SDK提供了一些独特的功能,包括8:A. 通道B. I/O通道C. 内存访问合并(coalescing)D. 自动循环流水线E. 移位寄存器推理A. 通道标准OpenCL模型假设内核运行在基于全局内存的数据集。由内核1从全局内存读取一个输入块,经处理将其结果写回全局内存的不同部分。如果第二个内核需要进一步
14、处理来自内核1的结果,就必须等待,直到内核1完成,所有输出数据被写回全局内存。只有这样,内核2才能读取和处理数据。显然,这个连续过程导致了流水线延迟,每个额外内核都以最佳线性增加的。而且,内存的每一次进出都增加了全局内存带宽,并降低了流水线吞吐量。为了解决这个问题,Altera提供了内核通道的概念,它允许来自内核1的输出结果直接转到内核2的输入。Altera离线编译(AOC)增加了所有必要的同步逻辑和FIFO存储器,允许数据从子内核n传递给内核n+1。图10显示了标准OpenCL和Altera厂商扩展通道数据流。图字:标准OpenCL模型:系统内存主机CPU核心1;核心N全局内存DDR3;内核
15、接口FIFO、DMA、DDR控制器、内存聚结器、结构总线转向、PLL时钟交错,等内核N;内核;内核;内核1;内核M;内核;内核;内核N本地内存RAM块内核FPGA有通道厂商扩展的OpenCL:系统内存主机CPU核心1;核心N全局内存DDR3;内核接口FIFO、DMA、DDR控制器、内存聚结器、结构总线转向、PLL时钟交错,等内核N;内核2;内核3;内核4;内核N;内核M;内核N+1;内核N+2本地内存RAM块内核FPGAB. IO通道IO通道是一个扩展通道概念,它允许外部IO直接连接到OpenCL内核。IO通道允许外部端口,如以太网、串行LVDS或OEM专用接口连接到内核,而无需首先进入全局内
16、存。在我们的MFP例子中,IO通道可以允许RGB扫描仪数据馈送到校准内核,然后连接到CCP。此外,CCP误差扩散输出视频数据可以馈送到在彩色打印机上打印图像数据的一个引擎内核。(请注意,我们尚未实现IO通道。这是留给未来的工作。)图11示出了IO通道数据流。图字:有通道和直接IO通道厂商扩展的OpenCL系统内存主机CPU核心1;核心N全局内存DDR3;内核接口FIFO、DMA、DDR控制器、内存聚结器、结构总线转向、PLL时钟交错,等IO接口IO接口内核1;内核2;内核3;内核4;内核N;内核M;内核N+1;内核N+2本地内存RAM块内核FPGA左边红字注解:直接IO通道允许外部IO(如以太
17、网或串行Lite)和内核之间的直接连接右边红字注解:通道允许内核之间的直接连接,而不需要访问全局内存C. 内存访问合并DDR内存对于随机访问非常低效。它对长脉冲串顺序数据效果最好。Altera的OpenCL编译器提供静态和动态内存合并。编译器将尝试静态识别OpenCL内核代码中的多个连续请求,并创建硬件来发出一个宽请求。例如,如果一个整数阵列被连续访问,则编译器将创建硬件用一个DDR控制器请求来一次抓取八个整数。此外,Altera的OpenCL内存系统提供动态数据重新排序。DDR输入队列按顺序接受它们收到的来自不同内核的内存访问请求。内部数据重新排序模块,检查输入队列地址和操作类型,然后动态重
18、新排序请求。重新排序请求以优化排序存储在重新排序缓冲器中。内存控制器器读取重新排序缓冲器,并以优化形式存储/检索数据。图12示出了有排序缓冲器的高电平DDR控制器。图字:全局内存DDR3;DDR控制器;DDR队列重新排序;DDR输入重新排序;全局内存总线PCIe内核接口FIFO、DMA、DDR控制器、内存聚结器、结构总线转向、PLL时钟交错,等IO接口IO接口内核1;内核2;内核3;内核4;内核N;内核M;内核N+1;内核N+2本地内存RAM块FPGA输入队列检查器D. 自动循环流水线 - ALPOpenCL内核通常描述一个单线程的工作,目的在于启动大量这样的线程来处理一个数据集。但是,一些问
19、题最好表达为单线程算法。滤波和误差扩散是两个这样的例子。使用多线程进行滤波要么将需要过多的内存读取,这将在稍后讨论,要么需要线程之间过多的通信。由于从当前像素到其邻近像素的误差传播,用在CCP的佛洛伊德-斯坦伯格误差扩散算法很难并行化。Altera OpenCL编译器以单线程算法提供了自动流水线循环。ALP允许以自然方式表达这类算法,并仍然获得了FPGA加速的全部好处。对于这个项目,滤波和误差扩散内核都通过编译器形成了自动流水线,实现了每个时钟周期一个像素的理想流水线效率。E. 移位寄存器推理Altera的OpenCL编译支持所谓移位寄存器推理(SRI)的优化。SRI对于滤波等滑动窗口操作特别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 FPGA 器件 加速 OpenCL MFP 图像 处理 中的 应用
链接地址:https://www.31ppt.com/p-4935535.html