[发明专利]一种基于动态任务调度的层次包围盒构建方法有效
申请号: | 201710514892.0 | 申请日: | 2017-06-29 |
公开(公告)号: | CN107346527B | 公开(公告)日: | 2020-03-10 |
发明(设计)人: | 何发智;张正昌;黎明丽;陈壹林 | 申请(专利权)人: | 武汉大学 |
主分类号: | G06T1/00 | 分类号: | G06T1/00;G06F9/48;G06F9/54 |
代理公司: | 武汉科皓知识产权代理事务所(特殊普通合伙) 42222 | 代理人: | 鲁力 |
地址: | 430072 湖*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 动态 任务 调度 层次 包围 构建 方法 | ||
1.一种基于动态任务调度的层次包围盒构建方法,其特征在于,包括以下步骤:
步骤1:初始化GPU中的全局变量g_optimizecounter,所述全局变量g_optimizecounter用于表示当前已处理任务数目;
步骤2:根据全局变量g_optimizecounter值和场景三角元片数目为线程分配任务;
步骤3:结合任务ID自顶向下遍历BVH,并读取幼树重构所需数据到局部变量;
步骤4:当warp中有符合预定条件的线程时使用warp级编程用聚类方法进行幼树重构;具体包括以下子步骤:
步骤4.1:判断当前warp中是否有9个及以上线程满足条件,若没有则跳转到步骤2,若有则执行步骤4.2;
步骤4.2:从当前结点开始向下寻找9个叶子结点形成幼树;
步骤4.3:计算4.2中幼树下9个叶子结点之间的距离并存储在距离矩阵中;
步骤4.4:使用聚类方法进行幼树重构;每次使用16个线程的并行规约选取距离矩阵中距离最小的两个结点作为聚类对象形成新的内部结点,以该结点代替上述两个结点并更新距离矩阵,一直到幼树的根结点;
步骤4.5:将BVH树结点拓扑变更情况写入到全局内存中,若warp中还有剩余任务,则转到步骤4.2,否则转到步骤2;
步骤5:重复执行步骤2-4直到达到设定的结束条件,GPU输出计算结果。
2.根据权利要求1所述的基于动态任务调度的层次包围盒构建方法,其特征在于,其特征在于,所述步骤4中所述的预定条件为warp中存在至少一个内部结点下有9个叶子结点的线程。
3.根据权利要求1所述的基于动态任务调度的层次包围盒构建方法,其特征在于,所述步骤2具体包括:
步骤2.1:计算当前warp中空闲的线程数目;
步骤2.2:在warp第一个空闲线程中通过获取g_optimizecounter值得到当前已处理的任务数,并放入共享变量中;若所有任务都已完成则结束循环;
步骤2.3:结合共享变量中的任务数目和当前线程在warp中空闲线程的序号,进行任务分配。
4.根据权利要求1所述的基于动态任务调度的层次包围盒构建方法,其特征在于,所述步骤3中,终止第一个到达父结点的线程以保证处理内部结点时该结点下的所有子结点都已经处理完毕。
5.根据权利要求4所述的基于动态任务调度的层次包围盒构建方法,其特征在于,所述步骤4.2中,初始时只有一个内部结点和两个叶子结点,并且每次从叶子结点中寻找包围盒表面积最小的作为内部结点,并将该结点的直接子节点作为叶子结点。
6.根据权利要求5所述的基于动态任务调度的层次包围盒构建方法,其特征在于,在每一步的寻找表面积最小过程使用16个线程的并行规约找最小值,并在16个线程中编号为0的线程汇总更新当前内结点和叶子结点属性。
7.根据权利要求6所述的基于动态任务调度的层次包围盒构建方法,其特征在于,所述步骤4.3中,使用16个线程计算36个距离值经过三轮计算即可完成任务。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉大学,未经武汉大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710514892.0/1.html,转载请声明来源钻瓜专利网。