一种基于cuda的梯形填充方法

文档序号:6442422阅读:387来源:国知局
专利名称:一种基于cuda的梯形填充方法
技术领域
本发明涉及多线程并行开发、计算机图形学、数据结构开发、数字图像处理等领域,具体为一种利用CUDA通用并行计算架构,使GPU (图形处理器)能够解决复杂计算和大量数据处理问题的梯形填充方法。
背景技术
光刻技术是在衬底表面上印刷具有特征的构图的技术,本发明所涉及的无掩膜光刻技术使用数字微镜系统生成图像,通过光学投影元件,图像以一定的倍率投影到光敏感的衬底上,产生特征的构图。
在光刻过程中,需要进行大量的、快速的数据处理与发送,而将GDSII文件解析之后,得到的只是一系列的梯形顶点坐标,然后需要利用绘图工具进行填充处理,以得到需要的图像。
现有填充技术中多采用CUDA进行填充,CUDA是NVIDIA的GPGPU模型,也就是通用计算图形处理器,它使用为大多数编程人员所知晓的C语言编程,编写的程序直接在显示芯片上执行,从而避免学习像汇编这样底层开发语言或指令。
在CUDA的架构下,一个应用程序被分为两个部分执行,一部分被分配在CPU上执行,也就是所谓的Host端;另一部分被分配在GPU上运行,也就是所谓的Device端,又被称为Kernel。而通常是在Host端准备好数据,然后复制到Device端的全局存储器、常数存储器或纹理存储器中,再由GPU执行Device端程序,执行完的结果,再拷贝到Host端的内存中。
在CUDA 架构下,一个 GPU 中含有数十个 TPC (Texture Processing Clusters),每个TPC 中含有多个 SM(Streaming Multiprocessor),每个 SM 中有 8 个以上的 SP (Streaming !Processor),而SP就是最基本的处理单元。并且这些SP可以同时进行运算。
在CUDA架构下,显示芯片执行的最小单位是Thread,数个Thread组成一个 Block, 一个Block中的Thread能存取同一块共享内存,而且可以快速的进行同步动作。执行相同程序的Block,可以组成Grid。
采用传统的图形设备接口⑶1+绘图,即使⑶1+可以让程序对图形界面的操作和硬件设备隔绝开来,但依然不能构造庞大的⑶1+内容,在gdi32. inc文件中函数总量达到 300多个,与GDI+相关的数据结构数量也十分庞大,而且CPU即使采用了很好的作业调用算法和中断抢断机制,但其终究是基于时间片,相对于某个时刻来说,也只有一个作业在执行。随着GDSII图像越来越复杂,客户对曝光速度的要求越来越快,采用传统的填充方法已满足不了光刻系统的需求。本发明使用一种通用并行处理架构(CUDA),从而能够快速处理图形图像,以满足光刻机在光刻过程中对图像和速度的要求。发明内容
本发明的目的是提供一种基于CUDA的梯形填充方法,以解决现有技术中采用GDI绘图不能满足大量图形数据处理,且使用时效率低下,不够便捷的问题。
为达到上述目的,本发明采用的技术方案为一种基于CUDA的梯形填充方法,其特征在于包括以下步骤①、在Host端准备需要填充的位形,设置位深、颜色表,分配并初始化内存单元;②、在Host端准备好需要的梯形顶点数据,并保存在梯形点集里;③、把当前处理任务分配给一个Grid,根据位形的数量确定Block数量,根据梯形的数量确定Thread数量;④、通过CUDA提供接口函数,在Device端的GlobalMemory分别分配位形和梯形顶点数据所需的空间;⑤、将Host端的数据拷贝到Device端的内存中;⑥、启动CUDA多线程并行填充梯形;⑦、待处理完之后,将Device端填充之后的数据,拷贝到Host端,即完成填充。
所述的一种基于CUDA的梯形填充方法,其特征在于在步骤③中也可把任务分配给多个Grid处理。
所述的一种基于CUDA的梯形填充方法,其特征在于所述Grid由数个执行相同程序的Block组成,所述Block由数个Thread组成。
本发明的有益效果为本发明采用CUDA多线程并行填充梯形方法,从而避免了利用GDI填充方法不能对大量图形数据有效处理,且由于CPU串行运行的限制而不能并行处理的问题,因而本发明能够有效地提升填充效率,满足大量图形数据处理的需求。


图1为本发明中GPU内部构造与CPU数据交互方式的示意图。
图2为本发明中未填充之前Block内每个Thread分配的梯形及梯形最小外接矩形的范围示意图。
图3为每个Block内梯形完成填充后的状态示意图。
具体实施方式
如图1、图2、图3所示,本发明包括以下步骤①、准备位形数据根据需要,可以选择单色、8位、M位或32位等位图,对非单色图,设置其填充的初始灰度值。本实施例选择8位图,填充的灰度值为一固定值。
②、准备梯形顶点数据对于每一张位形,其需要填充的梯形可能不同,将这些梯形顶点坐标放在一个梯形顶点的结构体数组里,为不同位形的梯形组分配不同大小的内存空间,并保存这些梯形顶点。
③、分配Block和Thread数量因为位形之间可以并行填充,这样不会产生冲突,所以把每一个Block分配一个位形,然后把这个位形需要填充的梯形分配给该Block下的Thread进行处理。
④、Device端分配内存利用CUDA提供的接口函数,对Device端分配内存,其大小为Host端需要分配的内存大小。
⑤、将数据拷贝至Device端利用CUDA提供的接口函数,对步骤①和②分配的数据进行拷贝,使得这些数据复制到GPU的内存里。该内存可以是全局存储器,也可以是常数存储器。对于位形数据,一般比较大,放在全局存储区。
⑥、启动CUDA核心函数进行填充先把每一张位形所属的梯形顶点集拷贝到共享存储区(即图1中Glared Memory),然后使得每个线程分配一张位形(如图2), 比如说ThreadO填充bmpO,Threadl填充bmpl,Thread2填充bmp2。准备就绪,使得所有线程都在同一起点,也就是某个Block把其梯形顶点拷贝到其自己的共享存储区最晚结束的时间,然后开始启动填充,每一个Thread都会先计算自己的四条边的斜率,然后得到自己的四条直线。根据四个顶点计算到一个最小外接矩形,然后比较这个外接矩形内的坐标点是否在梯形范围内,如果在,设置其灰度值。
⑦、将数据拷贝到Host端利用CUDA提供的接口函数,拷贝Device填充好的数据至Host端已经分配好的内存区。
对于步骤①,如果是单色图,或者初始灰度值为0的图形,则不需要将位形数据在步骤⑤中拷贝至GPU内存中,直接在GPU分配需要的同等大小的内存即可。
对于步骤⑥,把梯形顶点放在共享存储区(即图1中Siared Memory),其目的是为了在进行步骤⑥中的点与梯形边比较的频繁使用,而共享存储区的特点是比较小,存储速度快。这样可以提高填充速度。
其中如果梯形顶点只有三个,也可以填充;包括梯形顶点有可能超出图形外围内 (如图2中梯形4),或为负值,或大于位图宽高,亦可以填充。对于相互重叠的梯形或梯形最小外接矩形,在填充时,不需要考虑重叠部分,只需要在其原有灰度的基础上,添加需要设置的灰度即可。
在CUDA梯形填充处理中,需要考虑位形和梯形数据的有效性和合理性,对填充过程,合理化安排每个Block和Thread可使性能提升。
权利要求
1.一种基于CUDA的梯形填充方法,涉及光刻技术,其特征在于包括以下步骤①、在Host端准备需要填充的位形,设置位深、颜色表,分配并初始化内存单元;②、在Host端准备好需要的梯形顶点数据,并保存在梯形点集里;③、把当前处理任务分配给一个Grid,根据位形的数量确定Block数量,根据梯形的数量确定Thread数量;④、通过CUDA提供接口函数,在Device端的GlobalMemory分别分配位形和梯形顶点数据所需的空间;⑤、将Host端的数据拷贝到Device端的内存中;⑥、启动CUDA多线程并行填充梯形;⑦、待处理完之后,将Device端填充之后的数据,拷贝到Host端,即完成填充。
2.根据权利要求1所述的一种基于CUDA的梯形填充方法,其特征在于在步骤③中也可把任务分配给多个Grid处理。
3.根据权利要求1所述的一种基于CUDA的梯形填充方法,其特征在于所述Grid由数个执行相同程序的Block组成,所述Block由数个Thread组成。
全文摘要
本发明公开了一种基于CUDA的梯形填充方法,涉及多线程并行开发、计算机图形学、数据结构开发、数字图像处理等领域,本发明采用CUDA多线程并行填充梯形方法,从而避免了利用GDI填充方法不能对大量图形数据有效处理,且由于CPU串行运行的限制而不能并行处理的问题,因而本发明能够有效地提升填充效率,满足大量图形数据处理的需求。
文档编号G06T1/00GK102521789SQ20111043206
公开日2012年6月27日 申请日期2011年12月21日 优先权日2011年12月21日
发明者蒋兴华, 赵美云 申请人:合肥芯硕半导体有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1