《一种基于CUDA的梯形填充方法.pdf》由会员分享,可在线阅读,更多相关《一种基于CUDA的梯形填充方法.pdf(8页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102521789 A (43)申请公布日 2012.06.27 CN 102521789 A *CN102521789A* (21)申请号 201110432064.5 (22)申请日 2011.12.21 G06T 1/00(2006.01) (71)申请人 合肥芯硕半导体有限公司 地址 230601 安徽省合肥市经济技术开发区 锦绣大道 68 号 (72)发明人 赵美云 蒋兴华 (74)专利代理机构 安徽合肥华信知识产权代理 有限公司 34112 代理人 余成俊 (54) 发明名称 一种基于 CUDA 的梯形填充方法 (57) 摘要 本发明公开了一种基于 CUD。
2、A 的梯形填充方 法, 涉及多线程并行开发、 计算机图形学、 数据结 构开发、 数字图像处理等领域, 本发明采用 CUDA 多线程并行填充梯形方法, 从而避免了利用 GDI 填充方法不能对大量图形数据有效处理, 且由于 CPU 串行运行的限制而不能并行处理的问题, 因 而本发明能够有效地提升填充效率, 满足大量图 形数据处理的需求。 (51)Int.Cl. 权利要求书 1 页 说明书 3 页 附图 3 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 1 页 说明书 3 页 附图 3 页 1/1 页 2 1. 一种基于 CUDA 的梯形填充方法, 涉及光刻技术, 其特。
3、征在于包括以下步骤 : 、 在 Host 端准备需要填充的位图图形, 设置位深、 颜色表, 分配并初始化内存单元 ; 、 在 Host 端准备好需要的梯形顶点数据, 并保存在梯形点集里 ; 、 把当前处理任务分配给一个Grid,根据位图图形的数量确定Block数量, 根据梯形 的数量确定 Thread 数量 ; 、 通过 CUDA 提供接口函数, 在 Device 端的 Global Memory 分别分配位图图形和梯形 顶点数据所需的空间 ; 、 将 Host 端的数据拷贝到 Device 端的内存中 ; 、 启动 CUDA 多线程并行填充梯形 ; 、 待处理完之后, 将 Device 端填。
4、充之后的数据, 拷贝到 Host 端, 即完成填充。 2. 根据权利要求 1 所述的一种基于 CUDA 的梯形填充方法, 其特征在于 : 在步骤中也 可把任务分配给多个 Grid 处理。 3. 根据权利要求 1 所述的一种基于 CUDA 的梯形填充方法, 其特征在于 : 所述 Grid 由 数个执行相同程序的 Block 组成, 所述 Block 由数个 Thread 组成。 权 利 要 求 书 CN 102521789 A 2 1/3 页 3 一种基于 CUDA 的梯形填充方法 技术领域 0001 本发明涉及多线程并行开发、 计算机图形学、 数据结构开发、 数字图像处理等领 域, 具体为一种。
5、利用 CUDA 通用并行计算架构, 使 GPU( 图形处理器 ) 能够解决复杂计算和大 量数据处理问题的梯形填充方法。 背景技术 0002 光刻技术是在衬底表面上印刷具有特征的构图的技术, 本发明所涉及的无掩膜光 刻技术使用数字微镜系统生成图像, 通过光学投影元件, 图像以一定的倍率投影到光敏感 的衬底上, 产生特征的构图。 0003 在光刻过程中, 需要进行大量的、 快速的数据处理与发送, 而将 GDSII 文件解析之 后, 得到的只是一系列的梯形顶点坐标, 然后需要利用绘图工具进行填充处理, 以得到需要 的图像。 0004 现有填充技术中多采用 CUDA 进行填充, CUDA 是 NVID。
6、IA 的 GPGPU 模型, 也就是通 用计算图形处理器, 它使用为大多数编程人员所知晓的 C 语言编程, 编写的程序直接在显 示芯片上执行, 从而避免学习像汇编这样底层开发语言或指令。 0005 在 CUDA 的架构下, 一个应用程序被分为两个部分执行, 一部分被分配在 CPU 上执 行, 也就是所谓的Host端 ; 另一部分被分配在GPU上运行, 也就是所谓的Device端, 又被称 为Kernel。 而通常是在Host端准备好数据, 然后复制到Device端的全局存储器、 常数存储 器或纹理存储器中, 再由 GPU 执行 Device 端程序, 执行完的结果, 再拷贝到 Host 端的内。
7、存 中。 0006 在 CUDA 架构下, 一个 GPU 中含有数十个 TPC(Texture Processing Clusters), 每 个TPC中含有多个SM (Streaming Multiprocessor) , 每个SM中有8个以上的SP(Streaming Processor), 而 SP 就是最基本的处理单元。并且这些 SP 可以同时进行运算。 0007 在 CUDA 架构下, 显示芯片执行的最小单位是 Thread, 数个 Thread 组成一个 Block,一个Block中的Thread能存取同一块共享内存, 而且可以快速的进行同步动作。 执 行相同程序的 Block, 。
8、可以组成 Grid。 0008 采用传统的图形设备接口 GDI+ 绘图, 即使 GDI+ 可以让程序对图形界面的操作和 硬件设备隔绝开来, 但依然不能构造庞大的 GDI+ 内容, 在 gdi32.inc 文件中函数总量达到 300 多个, 与 GDI+ 相关的数据结构数量也十分庞大, 而且 CPU 即使采用了很好的作业调用 算法和中断抢断机制, 但其终究是基于时间片, 相对于某个时刻来说, 也只有一个作业在执 行。随着 GDSII 图像越来越复杂, 客户对曝光速度的要求越来越快, 采用传统的填充方法已 满足不了光刻系统的需求。本发明使用一种通用并行处理架构 (CUDA), 从而能够快速处理 图。
9、形图像, 以满足光刻机在光刻过程中对图像和速度的要求。 发明内容 0009 本发明的目的是提供一种基于 CUDA 的梯形填充方法, 以解决现有技术中采用 GDI 说 明 书 CN 102521789 A 3 2/3 页 4 绘图不能满足大量图形数据处理, 且使用时效率低下, 不够便捷的问题。 0010 为达到上述目的, 本发明采用的技术方案为 : 一种基于 CUDA 的梯形填充方法, 其特征在于包括以下步骤 : 、 在 Host 端准备需要填充的位图图形, 设置位深、 颜色表, 分配并初始化内存单元 ; 、 在 Host 端准备好需要的梯形顶点数据, 并保存在梯形点集里 ; 、 把当前处理任务。
10、分配给一个Grid,根据位图图形的数量确定Block数量, 根据梯形 的数量确定 Thread 数量 ; 、 通过 CUDA 提供接口函数, 在 Device 端的 Global Memory 分别分配位图图形和梯形 顶点数据所需的空间 ; 、 将 Host 端的数据拷贝到 Device 端的内存中 ; 、 启动 CUDA 多线程并行填充梯形 ; 、 待处理完之后, 将 Device 端填充之后的数据, 拷贝到 Host 端, 即完成填充。 0011 所述的一种基于 CUDA 的梯形填充方法, 其特征在于 : 在步骤中也可把任务分配 给多个 Grid 处理。 0012 所述的一种基于CUDA的。
11、梯形填充方法, 其特征在于 : 所述Grid由数个执行相同程 序的 Block 组成, 所述 Block 由数个 Thread 组成。 0013 本发明的有益效果为 : 本发明采用CUDA多线程并行填充梯形方法, 从而避免了利用GDI填充方法不能对大量 图形数据有效处理, 且由于 CPU 串行运行的限制而不能并行处理的问题, 因而本发明能够 有效地提升填充效率, 满足大量图形数据处理的需求。 附图说明 0014 图 1 为本发明中 GPU 内部构造与 CPU 数据交互方式的示意图。 0015 图 2 为本发明中未填充之前 Block 内每个 Thread 分配的梯形及梯形最小外接矩 形的范围示。
12、意图。 0016 图 3 为每个 Block 内梯形完成填充后的状态示意图。 具体实施方式 0017 如图 1、 图 2、 图 3 所示, 本发明包括以下步骤 : 、 准备位图图形数据 : 根据需要, 可以选择单色、 8 位、 24 位或 32 位等位图, 对非 单色图, 设置其填充的初始灰度值。本实施例选择 8 位图, 填充的灰度值为一固定值。 0018 、 准备梯形顶点数据 : 对于每一张位图图形, 其需要填充的梯形可能不同, 将这 些梯形顶点坐标放在一个梯形顶点的结构体数组里, 为不同位图图形的梯形组分配不同大 小的内存空间, 并保存这些梯形顶点。 0019 、 分配Block和Thre。
13、ad数量 : 因为位图图形之间可以并行填充, 这样不会产生冲 突, 所以把每一个 Block 分配一个位图图形, 然后把这个位图图形需要填充的梯形分配给 该 Block 下的 Thread 进行处理。 0020 、 Device 端分配内存 : 利用 CUDA 提供的接口函数, 对 Device 端分配内存, 其大 小为 Host 端需要分配的内存大小。 说 明 书 CN 102521789 A 4 3/3 页 5 0021 、 将数据拷贝至 Device 端 : 利用 CUDA 提供的接口函数, 对步骤和分配的数 据进行拷贝, 使得这些数据复制到 GPU 的内存里。该内存可以是全局存储器, 。
14、也可以是常数 存储器。对于位图图形数据, 一般比较大, 放在全局存储区。 0022 、 启动 CUDA 核心函数进行填充 : 先把每一张位图图形所属的梯形顶点集拷贝到 共享存储区 ( 即图 1 中 Shared Memory), 然后使得每个线程分配一张位图图形 ( 如图 2), 比如说 : Thread0 填充 bmp0, Thread1 填充 bmp1, Thread2 填充 bmp2。准备就绪, 使得所有 线程都在同一起点, 也就是某个 Block 把其梯形顶点拷贝到其自己的共享存储区最晚结束 的时间, 然后开始启动填充, 每一个 Thread 都会先计算自己的四条边的斜率, 然后得到自。
15、 己的四条直线。根据四个顶点计算到一个最小外接矩形, 然后比较这个外接矩形内的坐标 点是否在梯形范围内, 如果在, 设置其灰度值。 0023 、 将数据拷贝到Host端 : 利用CUDA提供的接口函数, 拷贝Device填充好的数据 至 Host 端已经分配好的内存区。 0024 对于步骤, 如果是单色图, 或者初始灰度值为 0 的图形, 则不需要将位图图形数 据在步骤中拷贝至 GPU 内存中, 直接在 GPU 分配需要的同等大小的内存即可。 0025 对于步骤, 把梯形顶点放在共享存储区(即图1中Shared Memory), 其目的是为 了在进行步骤中的点与梯形边比较的频繁使用, 而共享存。
16、储区的特点是比较小, 存储速 度快。这样可以提高填充速度。 0026 其中如果梯形顶点只有三个, 也可以填充 ; 包括梯形顶点有可能超出图形外围内 ( 如图 2 中梯形 4), 或为负值, 或大于位图宽高, 亦可以填充。对于相互重叠的梯形或梯形 最小外接矩形, 在填充时, 不需要考虑重叠部分, 只需要在其原有灰度的基础上, 添加需要 设置的灰度即可。 0027 在 CUDA 梯形填充处理中, 需要考虑位图图形和梯形数据的有效性和合理性, 对填 充过程, 合理化安排每个 Block 和 Thread 可使性能提升。 说 明 书 CN 102521789 A 5 1/3 页 6 图 1 说 明 书 附 图 CN 102521789 A 6 2/3 页 7 图 2 说 明 书 附 图 CN 102521789 A 7 3/3 页 8 图 3 说 明 书 附 图 CN 102521789 A 8 。