背景技术
RIP(Raster Image Processor,栅格图像处理器)是一种解释器,用来将页面描述语言所描述的版面信息解释转换成可供输出设备输出的数据信息(一般是位图)。RIP是整个印前行业的核心软件,一个桌面系统的输出质量、输出速度和开放性在很大程度上取决于RIP的优劣。
在印刷领域中,如果印版上的两个元素没有任何微观上的变化,那么通过该印版印刷出来的印刷品只有两个层次——黑与白,颜色也只能表现出两种——黑色与白色(单色黑墨印刷时,如果是四色印刷颜色最多也只有8种),这样就无法表现出原稿上的丰富的阶调层次和多彩的色彩。如果能将印版上的图文部分分割成大量面积大小不同的小点,不同面积大小的点着墨后,着墨的多少也就不同,在视觉效果上也就表现出了不同的阶调层次。同样,着墨的多少,也反映出了色彩的千变万化。这些小点在印刷上称之为网点,所以印刷上一定要采用网点来印刷。对于连续调图像,必须通过加网的方式转变成网目调图像才能完成印刷,即8位转化为1位。
按照加网的方法,网点分为调幅网点(AM Screening,以点的大小来表现图像的层次,点间距固定,点大小改变)和调频网点(FMScreening,以点的疏密而不是点的大小来表现图像的层次)。
加网除了保障质量之外,其速度也是需着重考虑的因素。加网速度往往受两个方面影响:1,数据量。以一张A4幅面,分辨率为600dpi的样张为例,其像素数目大致为32M。当设备以CMYK四色面输出时,其待加网数据量为128M,若有其它专色输出,则加网数据量以32M的等差数列递增。当以更高分辨率输出时,其待加网数据量倍增。同样A4幅面,2400dpi,CMYK四色输出时,数据量为2G。由此可见,在RIP中加网的数据量相当可观。2,加网算法。各家公司实现加网算法的方式不甚一致。但是,其必定涉及位置计算,8位颜色数据与网点数据的匹配计算等。其计算时间也不容小觑。由于数据量大,加网算法较为耗时,加网已成为RIP的速度瓶颈之一。
GPU(Graphic Processing Unit,图形处理器)是相对于CPU的一个概念。传统上,GPU的应用被局限于处理图形渲染计算任务。随着GPU可编程性的不断提高,利用GPU完成通用计算的研究渐渐活跃起来。将GPU用于图形渲染以外领域的计算称为GPGPU(General-purpose computing on graphic processing units,基于GPU的通用计算)。GPGPU计算通常采用CPU+GPU异构模式,由CPU负责执行复杂逻辑处理和事务管理等不适合数据并行的计算,由GPU负责密集型的大规模数据并行计算。这种利用GPU的强大处理能力和高带宽弥补CPU性能不足的计算方式,在发掘计算机潜在的性能方面,以及在成本和性价比方面有显著优势。
GPGPU编程模型将CPU作为主机,GPU作为协处理器。在一个系统中可以存在一个主机和若干个设备。在这个模型中,CPU、GPU各自拥有相互独立的存储器地址空间:主机端的内存和设备端的显存。
显卡中有全局内存,常量内存,纹理内存和共享内存。全局内存不会被缓存,访问成本很高。灵活合理地使用内存,可以大幅度提高渲染的性能。从纹理内存而非全局内存读取数据可以带来多方面的性能受益,纹理不受制于存储器访问模式的限制,寻址计算的延迟得到很好的隐藏,且纹理有缓存,能改进执行随机数据访问的应用程序的性能。纹理存储器空间会被缓存,因此纹理拾取仅需在缓存丢失时读取一次设备存储器,否则只需读取纹理缓存即可。
一旦确定了程序中的并行部分,就可以考虑把这部分计算工作交给GPU。运行在GPU上的并行函数称为Kernel,一个Kernel函数不是一个完整的程序,而是可以被并行执行的步骤。CPU的串行代码完成的工作包括在Kernel启动前进行数据准备和设备初始化的工作,以及在Kernel之间进行一些串行计算。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
图1示出了根据本发明实施例的加网方法的流程图,包括:
步骤S10,将主存中的加网源数据复制至在显存中设置的临时加网源数据缓冲区中;
步骤S20,GPU并行地加网处理临时加网源数据缓冲区中的加网源数据,得到的加网目标数据存储到在显存中设置的临时加网目标数据缓冲区中;
步骤S30,将临时加网目标数据缓冲区中的加网目标数据复制至主存中。
图2示出了根据本发明实施例的加网装置的示意图,包括:主机端100和客机端200,主机端100包括CPU 10和主存20,客机端200包括GPU 30和显存40;CPU 10用于将主存20中的加网源数据复制至在显存30中设置的临时加网源数据缓冲区40中;GPU200并行地加网处理临时加网源数据缓冲区中的加网源数据,得到的加网目标数据存储到在显存40中设置的临时加网目标数据缓冲区中;CPU 10还用于将临时加网目标数据缓冲区中的加网目标数据复制至主存20中。
相关技术的加网处理中,由CPU串行方式处理待加网数据,因为数据量很大,所以速度较慢。发明人发现各像素进行加网的计算方法大致相同,且仅与位置有关即像素之间无相关性,具有良好的并行计算性。因此,本实施例的加网方法中,将待加网数据导入显存中,利用GPU的并行能力进行并行处理,显著地提高了加网处理速度。
优选地,步骤S10包括:在主存中设置加网源数据缓冲区和加网目标数据缓冲区,在显存中设置临时加网源数据缓冲区和临时加网目标数据缓冲区;将待加网数据导入加网源数据缓冲区中;在主存中设置加网源数据的网点表;将网点表复制至显存中并进行纹理绑定。网点表,是加网过程需要用到的辅助一维表。其反应加网源数据与加网目标数据的映射关系。在加网过程中,GPU通过查找网点表,来获取加网源数据对应的加网目标数据。
优选地,步骤S10还包括:将加网源数据缓冲区中的加网源数据分成多段;将各段加网源数据依次复制至临时加网源数据缓冲区。
优选地,步骤S20包括:在GPU上启动多个线程,运行Kernel程序,每个线程分别处理临时加网源数据缓冲区中当前段的加网源数据中的N个像素(即,N*线程数=当前段的加网源数据的总像素数),包括:获取各个像素的颜色值Cs(即加网源数据);计算当前像素的加网源数据Cs在显存的网点表中的对应位置Pg;采用纹理获取方式,获取在显存的网点表中位置Pg的数值Ct;将数值Ct经过整理作为一个加网目标数据填充至临时加网目标缓冲区。
优选地,步骤S30包括:将临时加网目标缓冲区中的所有数值Ct复制至加网目标数据缓冲区中。
优选地,CPU包括:第一模块,用于在主存中设置加网源数据缓冲区和加网目标数据缓冲区,在显存中设置临时加网源数据缓冲区和临时加网目标数据缓冲区;第二模块,用于将待加网数据导入加网源数据缓冲区中;第三模块,用于在主存中设置加网源数据的网点表;第四模块,用于将网点表复制至显存中并进行纹理绑定。
优选地,CPU还包括:第五模块,用于将加网源数据缓冲区中的加网源数据分成多段;第六模块,用于将各段加网源数据依次复制至临时加网源数据缓冲区。
优选地,GPU包括:第七模块,用于在GPU上启动多个线程,运行Kernel程序,每个线程分别处理临时加网源数据缓冲区中当前段的加网源数据中的N个像素,包括:第八模块,用于获取各个像素的加网源数据Cs;第九模块,用于计算当前像素的加网源数据Cs在显存的网点表中的对应位置Pg;第十模块,用于采用纹理获取方式,获取在显存的网点表中位置Pg的数值Ct;第十一模块,用于将数值Ct经过整理作为一个加网目标数据填充至临时加网目标缓冲区。
优选地,CPU用于将临时加网目标缓冲区中的所有数值Ct复制至加网目标数据缓冲区中。
图3示出了根据本发明优选实施例的加网处理的流程图,本实施例采取CUDA(Compute Unified Device Architecture,统一设备架构)技术,CPU+GPU的异构模式,对3页A4幅面大小的CMYK色面点阵,进行加网。单色面点阵由4992*7040像素组成,约34M数据。CPU即为普通CPU,GPU支持CUDA技术,通过北桥进行互联。本方法包括:
步骤S302:加网装置初始化
1)清空主机端与设备端的网点表;
2)清空临时加网源数据缓冲区Device_TBs以及临时加网目标数据缓冲区Device_TBt。
步骤S304:数据加网
第1页数据加网,以C版数据为例,其它MYK版数据处理同C版数据,包括:
1)加网之前的准备,如图4所示:
步骤S402,在主机端主存上申请加网目标数据缓冲区Host_Bt,容量为8M;
步骤S404,在主机端主存上申请加网源数据缓冲区Host_Bs,容量为64M,并导入全部C版的点阵数据(即待加网数据)作为加网源数据;
步骤S406,在主机端判断是否已有C版对应网点表Host_Tc,若有则无需建立网点表Host_Tc,程序终止,否则转入步骤S408;
步骤S408,在主机端主存上开辟网点表Host_Tc,并生成网点表数据;
步骤S410,在设备端显存上开辟C版对应网点表Device_Tc,并将主存上的网点表Host_Tc中数据复制至设备端网点表Device_Tc;
步骤S412,对设备端的网点表Device_Tc中数据进行纹理绑定。
2)进行并行加网,图5示出了根据本发明优选实施例的数据并行加网的流程图,包括以下步骤:
步骤S502,若在设备端尚未申请临时加网源数据缓冲区Device_TBs及临时加网目标数据缓冲区Device_TBt,执行步骤S504,否则执行步骤S506;
步骤S504,在设备端申请临时加网源数据缓冲区Device_TBs,容量为16M,及临时加网目标数据缓冲区Device_TBt,容量为2M;
步骤S506,将待加网数据分为N段例如4段,第一段索引1;
步骤S508,若当前段索引不大于4,则执行步骤S510,否则终止;
步骤S510,将当前段10M,等于或小于2048线主机端加网源数据复制至设备端临时源数据缓冲区Device_TBs;
步骤S512,在GPU上启动1个Grid(格子),该Grid有2048个块,每块有256个线程,总计512K个线程,运行Kernel程序。每个线程基本处理该段数据中的20个像素。Kernel程序执行如下步骤:
Kernel程序执行如下步骤,如图6所示:
步骤S602,计算该线程对应的起始像素的位置Ps,置当前像素位置Pcur为起始像素位置Ps;
步骤S604,当前像素位置Pcur与起始像素位置Ps相错是否小于20,若是则执行步骤S606,否则终止;
步骤S606,获取该像素的加网源数据Cs;
步骤S608,计算该像素对应的网点在网点表中的位置Pg;
步骤S610,根据此位置Pg,采用纹理获取方式,获取其在对应网点表中的数值Ct;
步骤S612,将此数值Ct经过整理填充至临时加网目标缓冲区Device_TBt;
步骤S614,当前像素位置移至下一像素位置Pcur=Pcur+1,执行步骤S604;
步骤S514,将临时加网目标缓冲区Devce_TBt中的约2M数据复制至对应的主机端加网目标数据缓冲区Host_Bt。
步骤S516,移至下一数据段,执行步骤S508。
3)加网数据导出,包括:
(a)将主机端加网目标数据缓冲区Host_Bt中数据导出;
(b)释放主机端加网目标数据缓冲区Host_Bt;
(c)释放主机端加网源数据缓冲区Host_Bs。
步骤S306:加网装置析构
(1)释放主机端与设备端的网点表Host_Tc、Host_Tm、Host_Ty、Host_Tk、Device_Tc、Device_Tm、Device_Ty、Device_Tk;
(2)释放临时加网源数据缓冲区Device_TBs以及临时加网目标数据缓冲区Device_TBt。
第2、3页数据处理同第1页。
本发明通过利用CPU+GPU的异构模式,将可并行的加网部分移交至GPU进行并行计算,再将所得数据返回至主机端内存。本发明根据挂网的技术特点,充分利用了GPU的并行计算性能,将串行挂网的方式,修改为并行挂网,大幅度地提高了挂网的速度。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。