CN101702244B - 一种适用于绘制区域任意划分的并行绘制负载平衡方法 - Google Patents

一种适用于绘制区域任意划分的并行绘制负载平衡方法 Download PDF

Info

Publication number
CN101702244B
CN101702244B CN2009102130920A CN200910213092A CN101702244B CN 101702244 B CN101702244 B CN 101702244B CN 2009102130920 A CN2009102130920 A CN 2009102130920A CN 200910213092 A CN200910213092 A CN 200910213092A CN 101702244 B CN101702244 B CN 101702244B
Authority
CN
China
Prior art keywords
node
load
index
sub
pvp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2009102130920A
Other languages
English (en)
Other versions
CN101702244A (zh
Inventor
唐杰
武港山
朱炼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN2009102130920A priority Critical patent/CN101702244B/zh
Publication of CN101702244A publication Critical patent/CN101702244A/zh
Application granted granted Critical
Publication of CN101702244B publication Critical patent/CN101702244B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)

Abstract

一种适用于绘制区域任意划分的并行绘制负载平衡方法,用于三维渲染,通过剖分屏幕空间在多个绘制节点间分配计算任务,绘制节点也称渲染节点,包括预处理、负载评估、负载平衡、调整屏幕空间上的子绘制区域、绘制下一帧五个步骤。本发明使用多维二叉搜索树KD树对场景空间进行划分,在此基础上进行快速的负载评估,得到各节点下一帧绘制的负载预测值,最后基于这些预测值,再利用本发明提出的负载矩形构造负载矩阵,完成负载平衡,有效地避免了过多的负载评估过程,从而进一步提高了系统的整体效率,能很好地处理场景变化剧烈的情况。

Description

一种适用于绘制区域任意划分的并行绘制负载平衡方法
技术领域
本发明属于计算机图形学领域,涉及计算机图形绘制,具体为一种适用于绘制区域任意划分的并行绘制负载平衡方法。
背景技术
并行绘制技术研究的是利用集群运算系统进行三维绘制。集群运算系统常应用于运算量巨大的项目,如材料科学、声学、数学计算和工业设计等方面。大规模数据渲染的计算密集性大,非常适合由集群运算系统来完成。高性能的并行绘制系统可以为海量数据场景绘制、大规模虚拟现实和仿真、超高分辨率科学计算可视化等高端应用提供所需的图形绘制能力。和专业的图形工作站相比,集群绘制系统具有极高的性价比和较强的扩展性。因此,并行绘制技术具有重要的研究意义和实际价值。
Sort-first体系结构常用来构建高性能并行图形绘制系统。该模式最大程度保持了图形流水线的完整性,因此集群并行绘制系统大都采用sort-first结构。Sort-first系统通过剖分屏幕在多个绘制节点间分配计算任务,当几何图元在屏幕上分布不均匀时,容易出现节点间的负载不平衡:一些绘制节点因处理大量图元而处于忙碌状态,同时另一些节点因分配到稀疏的图元而处于空闲。由于一帧的绘制时间取决于最后完成工作的节点,所以这种不均衡状态将导致并行绘制系统速度的严重下降。由此可见,Sort-first模式下的负载平衡是影响系统性能的一个重要问题。
负载平衡对于sort-first并行绘制系统的性能有很大影响。按照是否动态修改屏幕的剖分,负载平衡方法可分为静态方法和动态方法两类。
静态方法将屏幕固定地剖分为一些相等的矩形任务块,块数大于绘制节点数。这些任务块间隔、固定地分配给各绘制节点,使每个绘制节点既有屏幕中央部分的块,也有屏幕边缘部分的块。对图形应用程序的观察统计发现,图元更易出现在屏幕中央,因此划分越细,各绘制节点越倾向于获得相同的负载。静态方法优点是实现简单,几乎没有什么开销。缺点是其有效性只是统计意义上的,过于粗糙,不能满足高性能图形并行绘制的需要。
动态负载平衡方法根据图形应用负载分布情况动态改变屏幕的剖分和分配。常见的方法有:Roble方法、Whelan的median-cut方法、Whitman的自顶向下分解方法、MAHD(Mesh-based Adaptive Hierarchical Decomposition)方法。它们的区别在于对绘制区域的调整策略不同。这些方法都通过离线的模拟程序证明了有效性,但没有直接在集群绘制系统中得到应用。原因在于它们都需要对所有图元做几何变换以确定其屏幕位置,集群绘制系统往往用于处理上百兆、甚至上G的几何数据,遍历图元的计算开销太大。理论上,几何变换是图形绘制计算的一部分,其计算结果可以与负载平衡计算共享。但现实中的并行绘制系统是软、硬件高度耦合的系统,将负载平衡计算插入到绘制流水线中去是不现实的。
负载评估是实现负载平衡的关键步骤。为了得到较准确的评估值,我们需要对模型在各个绘制区域内的分布情况有一个充分的分析。然而充分的分析意味着需要花费很多的时间,这势必造成集群系统整体效率的下降。因此,速度与精确性成为需要仔细权衡的两个方面。负载评估的实现目标是:在尽可能短的时间里,尽可能准确地得到模型的分布情况。目前每个节点的负载评估常用的指标是上一帧的绘制时间。当场景变化较为缓慢时,该指标基本能反映本节点的负载。但是当场景变化较为剧烈时,该指标的变化与实际绘制负载的变化相比,就会产生滞后现象,误导负载平衡算法,造成绘制性能的下降。
因此,一个实用的负载平衡算法要满足如下条件:一、应具备较快的计算速度,使其本身的开销小于使用该方法得到的性能提升;二、负载平衡的结果应尽量准确,即在绘制节点性能相同的前提下,各节点分配的负载应尽量相等,屏幕区域应能任意剖分。
发明内容
本发明要解决的问题是:现有并行绘制负载平衡算法不能很好解决场景剧烈变化下的要求,提出一种适用于绘制区域任意划分的并行绘制负载平衡方法。
本发明的技术方案为:一种适用于绘制区域任意划分的并行绘制负载平衡方法,用于三维渲染,通过剖分屏幕空间在多个绘制节点间分配计算任务,绘制节点也称渲染节点,包括以下步骤:
步骤一:预处理
首先对要绘制的模型进行预处理,对模型进行等质量划分,得到子模型,将图元也就是子模型组织成KD树空间结构,图元为KD树节点,则处于KD树同一层次的节点质量相同,密度越大的节点,其体积越小,在同一层次上,KD树的节点质心更接近模型的实际质量分布;模型在空间中有一个外接包围盒,在KD树的组织过程中,选择垂直于包围盒最长边的平面作为模型的分割平面;
步骤二:负载评估
将三维模型空间的点映射至二维的屏幕空间,划分屏幕空间得到子绘制区域,一个渲染节点对应一个子绘制区域,子绘制区域内的模型部分为渲染视区,负载评估对模型在各个子绘制区域内的分布情况进行分析,也就是分析图元属于哪个渲染视区,评估过程通过进行KD树自顶向下的图元归属判断来实现,由子绘制区域内的图元计算子绘制区域的负载,从KD树根节点开始按层次顺序对每个节点进行归属判断,如果某一个节点完全位于某个子绘制区域内部或者完全位于其外部,那么它所有的子节点在后续的层次遍历过程中都可以忽略,对于不属于前述情况的节点,即跨边界节点,则继续进行其子节点的归属判断;
步骤三:负载平衡
负载评估之后,得到各个子绘制区域的负载值,获取本子绘制区域内的各子模型包围盒,将各子模型包围盒的八个顶点映射至屏幕空间,然后在屏幕二维空间内取这八个点的包围矩形,将每个矩形作为一个负载体,称之为负载矩形,负载平衡以负载矩形为对象;每个渲染节点对应一个渲染视区,对每个渲染节点对应的渲染视区重新划分,在负载评估的负载值基础上动态调整渲染视区范围,使得每个渲染节点的绘制负载相等,首先将所有的渲染节点组织成一棵二叉树,二叉树的叶节点与各个渲染节点对应,所述二叉树的性质如下:对于该二叉树中的任意一个中间节点,设其左右子树中的叶节点数分别为NumL和NumR,那么NumL和NumR满足这样的关系:NumL=NumR或者NumL+1=NumR;
设有N个渲染视区,整个模型的总体负载值为L,调整每个叶节点的渲染视区范围,使每个叶节点的负载值为L/N,每个中间节点的负载等于其左右子树的负载之和,按照渲染节点组织成的二叉树,由自顶向下逐层分解,按每个节点的负载值划分屏幕空间;
步骤四:根据新的渲染视区范围对应调整屏幕空间上的子绘制区域;
步骤五:绘制下一帧。
负载评估中,对于跨边界节点,使用图元的包围球作为判断某图元归属于哪个子绘制区域的依据:计算包围球中心点到节点质心的空间直线距离,记为d,设包围球的半径为r,当d>αr时,认为节点质心远离包围球中心,反之为靠近,α是一个系数,由用户设定;当节点质心远离包围球中心点时,以节点质心归属的那个区域作为该节点所归属的区域,节点质心靠近包围球中心时,使用在本子绘制区域中包围球的体积,占包围球总体积的比重作为权值,来估算该节点在本子绘制区域内的负载;
以节点质心与包围球中心点之间的距离d占包围球半径r的比例α作为衡量质心有效性的依据,此时负载评估过程如下:
21):将所有子绘制区域的负载值清零,设定一个计数器TestCount=0
22):设定三类队列组Queue1,Queue2,QueueFinal,每个队列组都有两个队列[0]、[1]组成,Queue1存放局部归属于一个渲染视区的节点、Queue2存放跨越多个渲染视区的节点、QueueFinal存放最终待测试的节点,其中,Queue1和Queue2中的元素都是属于靠近渲染视区边缘的节点,且Queue2中存放的是跨越渲染视区公共边缘的节点;
23):设Index=1,TestFinish=False,Index表示当前访问队列组中的哪个队列,TestFinish是一个布尔变量,用来控制归属判断的整个过程是否可以进入结束收尾状态,将根节点root放入队列Queue2[0];
24):变换Index:Index=(Index+1)%2,控制两个队列间的切换,判断TestCount+2*(Queue1[Index].size+Queue2[Index].size)是否大于设定的阈值MaxTestCount,其中:
TestCount:已经进行的归属判断次数;
Queue1[Index].size:Queue1[index]队列中的KD节点数;
Queue2[Index].size:Queue2[index]队列中的KD节点数;
TestCount+2*(Queue1[Index].size+Queue2[Index].size)表示进行下一步归属判断后将达到的总归属判断数;
如果超过阈值,置判断结果TestFinish为真,判断结束;
25):遍历Queue2[Index],针对每一个节点Node,如果TestFinish为真,那么将其左右子女放入QueueFinal,否则判断其左右子女的类型并作如下的处理:
A、普通节点:依据其包围球作归属判断;如果节点归属于一个子绘制区域,那么依据节点的质量增加相应子绘制区域的负载值;如果该节点局部归属于一个子绘制区域,那么将该节点放入Queue1[Index];如果节点跨越多个子绘制区域,那么将其放入Queue2[(Index+1)%2];
B、叶节点:将该节点放入QueueFinal;
26):判断TestCount+2*(Queue1[Index].size+Queue2[(Index+1)%2].size)是否大于阈值MaxTestCount,如果超过阈值,置判断结果TestFinish为真,判断结束;
27):遍历Queue1[Index],针对每一个节点Node,如果TestFinish为真,那么将左右子女放入QueueFinal,否则判断其左右子女的类型并作如下的处理:
A、普通节点:依据其包围球作归属判断;如果节点归属于一个子绘制区域,那么依据节点的质量增加相应子绘制区域的负载值;如果该节点局部归属于一个子绘制区域,那么将该节点放入Queue1[(Index+1)%2];
B、叶节点:将该节点放入QueueFinal;
28):如果TestFinish为假,则跳转至步骤24);
29):遍历QueueFinal队列,针对每个元素Item,作如下处理:
①.如果Item.NodeValid为假,那么将Item的两个子女节点放入QueueFinal队列;
②.如果Item.MCValid为真,那么使用Item的质心进行归属判断,增加所属子绘制区域的负载。
③.如果Item.MCValid为假,对于该节点所占据的每一个渲染视区,计算Item中心点到渲染视区投影观察体侧面的最近距离D,设Item的包围球半径为R,那么该节点赋予该子绘制区域的负载值=((R-D)/(2*D))*Item.Mass,Mass是本节点的质量;
其中,MCValid是一个标志位,表示该节点质心的有效性,其含义是:如果节点质心靠近包围球中心,那么该节点质心无效,反之该节点质心有效;NodeValid标志位表示这样的含义:如果该节点属于狭长节点,那么此标志位为假,反之为真,狭长节点是指子模型的包围盒的长宽高的比严重不均衡,这样的子模型也就是KD树子节点就成为狭长节点。
负载平衡以负载矩形为对象,采用二叉树自顶向下逐层分解的方式来划分屏幕空间,具体步骤如下:
31):对负载矩形集合进行预处理,将其转换为负载网格,并以矩阵LoadMatrix[m][n]的形式表示,则屏幕被划分成m×n的不均匀网格,LoadMatrix[m][n]中的每个成员是一个整数值,代表所对应格子内的负载情况;
32):设定初始屏幕区域PVP为[0,0,W,H],初始划分节点node为二叉树ViewTree的根节点,初始屏幕区域PVP就是整个屏幕空间,初始划分节点node就是所有渲染节点,随着采用二叉树自顶向下逐层划分的深入,屏幕区域变为某个子屏幕空间PVPi,划分节点变为子渲染节点;
33):设定变量index=0,load=node.load,splitpos=0;
34):按列访问LoadMatrix,从第index列开始向右侧遍历,找到与PVP有重叠的第一列网格,设该列列号为row,设该列网格的横向起始位置与终点位置分别为x0,x1,取x0=max(x0,PVP.x);x1=min(x1,PVP.x+PVP.w)。计算[x0,x1]范围内的总负载值L:
A.如果L<load,那么,load=load-L,index=row+1;跳至步骤34);
B.如果L≥load,那么取划分位置:splitpos=x0+(load/L)*(x1-x0);
35):将PVP划分为两个子区域,PVP1=[PVP.x,PVP.y,splitpos-PVP.x,PVP.h],PVP2=[splitpos,PVP.y,PVP.w-PVP1.w,PVP.h];然后针对(PVP1,node->left)和(PVP2,node->right)分别递归地执行步骤33)~步骤35)。
步骤33)-35)中,index表示用来访问矩阵LoadMatrix的第index列,load表示当前计算所得的负载,PVP.x、PVP.y表示当前屏幕区域在整个屏幕区域内的起始坐标,PVP.w、PVP.h表示当前屏幕区域的宽和高,Splitpos表示当前区域的划分位置,以此位置将屏幕区域一分为二。
本发明的负载评估方法对于边界处的数据块进行了恰当的负载分布计算,因此有效地增加了这些数据块的归属判断准确度,降低了负载评估的误差。
本发明使用多维二叉搜索树KD树对场景空间进行划分,在此基础上进行快速的负载评估,得到各节点下一帧绘制的负载预测值,最后基于这些预测值,再利用本发明提出的负载矩形构造负载矩阵,完成负载平衡,有效地避免了过多的负载评估过程,从而进一步提高了系统的整体效率,能很好地处理场景变化剧烈的情况。
附图说明
图1为本发明的流程图。
图2为本发明渲染视区边界处的数据块示意图,图2(a)为负载平衡的情况;图2(b)为负载不平衡的情况。
图3为本发明负载矩形示意图。
图4(a)为本发明渲染视区分布状况;图4(b)为对应的渲染节点二叉树结构
图5(a)为本发明的负载矩形;图5(b)为负载矩阵示意图。
图6为本发明负载评估,(a)为测试模型,有150万三角片,(b)为水平划分方式,(c)为水平+垂直混合划分方式。
图7为本发明负载平衡实验示意图。
图8为本发明负载平衡的绘制时间比较,图8(a)未使用本发明负载平衡策略;图8(b)使用本发明负载平衡策略。
具体实施方式
实际的并行绘制系统中往往采用静态策略,如WireGL,但静态负载平衡方法适应性较差,而传统的动态平衡策略又往往只具备理论价值。因此,本发明首先解决动态平衡方法中的负载评估的问题,在做到快速负载评估的基础上,设计一种动态平衡策略。图1为本发明的系统流程图。
步骤1:创建绘制模型的KD树
负载评估的准确度,依赖于对场景数据分布情况的分析程度。为了得到最佳的评估值,必须对场景数据中所有的图元进行归属判断,即判断其属于哪一个子绘制区域。KD树的划分方法既有二叉树的结构简单的特点,又因为是对模型进行等质量划分,所以处于同一层次的节点质量相同,密度越大的节点,其体积越小,KD树节点的包围盒能够更紧密地包围图元。在同一层次上,KD树的节点质心更接近模型的实际质量分布,使用KD树可以从整体上降低每个图元集归属于多个渲染节点的概率。因此,本发明使用KD树作为负载评估的数据组织形式。在KD树构造的过程中,每次模型的分割平面必须与某个坐标轴垂直。模型在空间中有一个外接包围盒,为了使得每个节点的质心都能很好地代表这个子模型,应当避免划分出狭长的数据块。因此我们选择垂直于包围盒的最长边的平面作为分割平面,之所以选择最长边来进行划分,是为了使得每次划分后的两个子模型都尽量接近立方体。
KD树节点的数据结构如下:NodeID是该节点的唯一标志;BoundingBox和BoundingSphere分别是此节点的包围盒和包围球,用于对该节点进行归属判断;MassCenter是该节点的质心位置;Mass是该节点的质量,表示其带来的负载;MCValid是一个标志位,表示该节点质心的有效性,其含义是:如果质心和节点中心靠的比较近,那么该质点无效,反之该质点有效;NodeValid标志位表示这样的含义:如果该节点属于狭长节点,那么此标志位为False,反之为True。
在并行渲染系统中,图元归属判断是一个极其关键的技术。每个渲染节点都必须快速高效地判断图元是否在自己的子绘制区域内,也就是是否属于该渲染节点要处理的渲染视区。在本发明的负载评估中也同样需要快速的图元归属判断过程。由于采用KD树作为负载评估的输入数据,因此,图元归属判断的对象也就成了KD树中的节点。本发明使用包围球作为判断物体是否可见的依据,归属判断的过程非常快捷,其判断效率几乎等同于判断一个点是否可见。
步骤2:负载评估
负载评估是实现负载平衡的关键步骤。为了得到较准确的评估值,我们需要对模型在各个绘制区域内的分布情况有一个充分的分析。然而充分的分析意味着需要花费很多的时间,这势必造成集群系统整体效率的下降。因此,速度与精确性成为需要仔细权衡的两个方面。负载评估的实现目标是:在尽可能短的时间里,尽可能准确地得到模型的分布情况。前文所述的KD树数据结构以及基于包围球的归属判断方法为这种快速而准确的分析提供了可能性。
KD树是一种满二叉树,且每一层的所有节点都具有相同的质量。设模型的总体质量为M,那么位于第n层的节点的质量为M/2n。从根节点开始按层次顺序对每个节点进行归属判断时,如果某一个节点完全位于某个绘制区域内部或者完全位于其外部,那么它所有的子节点在后续的层次遍历过程中都可以忽略。实际过程中,只有位于子绘制区域边界附近的节点,才需要继续进行其子节点的归属判断。
在图2中,屏幕被划分为三个子绘制区域,模型对应分为三个渲染视区,每个子绘制区域仅负责绘制模型的一部分,也就是渲染视区部分。图2(a)的系统处于负载均衡的状态,图2(b)处于非均衡状态。在KD树自顶向下进行归属判断的过程中,需要不断细化的区域仅限于虚框内的部分。离子绘制区域的边界越远的地方,其归属判断所深入的层次越低,所消耗的时间也就越少。在理想状况下即模型质量均匀分布的情况下,位于渲染视区边界附近的质量占模型总质量的比例是相当小的。在使用KD树进行自顶向下归属判断的过程中,主要的分析工作集中在渲染视区的公共边界处。此外我们还注意到,在负载严重不均衡状态下,模型分布情况的分析工作量往往小于均衡状态。
跨视区节点的处理
在自顶向下的归属判断过程中,当测试的节点数目达到了某个判断阈值,归属测试就必须停止,此时往往还剩下很多跨越视区的节点没有处理。对这些节点最简单的处理方式就是忽略,因为它们的质量占模型总质量的比例极其的小,所以在一定程度上确实可以忽略,其结果对负载评估的准确性影响不是很大。然而当这样的节点数量占总测试节点数的比例比较大的情况下,简单忽略其负载并非是个明智的做法。因此,最好能使用合理的方式来处理它们,本发明进一步提出了新的判断方法来处理这些节点。
在构造KD树的过程中,以节点质心与节点包围球中心之间的距离占包围球半径的比例作为衡量质心有效性的依据,并依此计算标志位MCValid。当节点质心远离包围球中心点时,图元则集中分布在节点质心附近,以节点质心位置作为归属判断的依据显然更具准确性;当节点质心靠近中心时,可以认为包围球内的图元分布更具有均匀性,使用在本子绘制区域中包围球的体积,占包围球总体积的比重作为权值,来估算该节点在本子绘制区域内的负载则更具准确性。
负载评估流程
综上所述,自顶向下的负载评估过程描述如下:
21):将所有子绘制区域的负载值清零,设定一个计数器TestCount=0;
22):设定三类队列组Queue1,Queue2,QueueFinal,每个队列组都有两个队列[0]、[1]组成,Queue1存放局部归属于一个渲染视区的节点、Queue2存放跨越多个渲染视区的节点、QueueFinal存放最终待测试的节点,其中,Queue1和Queue2中的元素都是属于靠近渲染视区边缘的节点,且Queue2中存放的是跨越渲染视区公共边缘的节点;
23):设Index=1,TestFinish=False,Index表示当前访问队列组中的哪个队列,TestFinish是一个布尔变量,用来控制归属判断的整个过程是否可以进入结束收尾状态,将根节点root放入队列Queue2[0];
24):变换Index:Index=(Index+1)%2,控制两个队列间的切换,判断TestCount+2*(Queue1[Index].size+Queue2[Index].size)是否大于设定的阈值MaxTestCount,其中:TestCount:已经进行的归属判断次数;
Queue1[Index].size:Queue1[index]队列中的KD节点数;
Queue2[Index].size:Queue2[index]队列中的KD节点数;
TestCount+2*(Queue1[Index].size+Queue2[Index].size)表示进行下一步归属判断后将达到的总归属判断数;因为每个KD节点有两个子节点,所以在进行下一层的归属判断时,每个节点的子节点都有两个,代表两次判断,所以有乘以2;
如果超过阈值,置判断结果TestFinish为真,判断结束;
25):遍历Queue2[Index],针对每一个节点Node,如果TestFinish为真,那么将其左右子女放入QueueFinal,否则判断其左右子女的类型并作如下的处理:
A、普通节点:依据其包围球作归属判断;如果节点归属于一个子绘制区域,那么依据节点的质量增加相应子绘制区域的负载值;如果该节点局部归属于一个子绘制区域,那么将该节点放入Queue1[Index];如果节点跨越多个子绘制区域,那么将其放入Queue2[(Index+1)%2];
B、叶节点:将该节点放入QueueFinal;
26):判断TestCount+2*(Queue1[Index].size+Queue2[(Index+1)%2].size)是否大于阈值MaxTestCount,如果超过阈值,置判断结果TestFinish为真,判断结束;
27):遍历Queue1[Index],针对每一个节点Node,如果TestFinish为真,那么将左右子女放入QueueFinal,否则判断其左右子女的类型并作如下的处理:
A、普通节点:依据其包围球作归属判断;如果节点归属于一个子绘制区域,那么依据节点的质量增加相应子绘制区域的负载值;如果该节点局部归属于一个子绘制区域,那么将该节点放入Queue1[(Index+1)%2];
B、叶节点:将该节点放入QueueFinal;
28):如果TestFinish为假,则跳转至步骤24);
29):遍历QueueFinal队列,针对每个元素Item,作如下处理:
①.如果Item.NodeValid为假,那么将Item的两个子女节点放入QueueFinal队列;
②.如果Item.MCValid为真,那么使用Item的质心进行归属判断,增加所属子绘制区域的负载。
③.如果Item.MCValid为假,对于该节点所占据的每一个渲染视区,计算Item中心点到渲染视区投影观察体侧面的最近距离D,设Item的包围球半径为R,那么该节点赋予该子绘制区域的负载值=((R-D)/(2*D))*Item.Mass,Mass是本节点的质量;
其中,MCValid是一个标志位,表示该节点质心的有效性,其含义是:如果节点质心靠近包围球中心,那么该节点质心无效,反之该节点质心有效;NodeValid标志位表示这样的含义:如果该节点属于狭长节点,那么此标志位为假,反之为真,狭长节点是指子模型的包围盒的长宽高的比严重不均衡,这样的子模型也就是KD树子节点就成为狭长节点。
以上就是自顶向下负载评估的算法流程,在该算法中,设定了三类队列组Queue1,Queue2,QueueFinal,存放的元素分别是:局部归属于一个视区的节点、跨越多个视区的节点、最终待测试的节点。其中,Queue1和Queue2中的元素都是属于靠近视区边缘的节点,但Queue2中存放的是跨越视区公共边缘的节点,对跨越多个视区的节点赋予了一定的优先处理权,因此,在step5对Queue2中的节点进行了处理之后,又再次在Step6中作阈值判断,这里的阈值判断有可能导致在结束负载评估之前,Queue1的节点处理深度比Queue2低一个层次。因此,在进入步骤28)之后,Queue1中的节点质量可能是Queue2中节点质量的2倍。
步骤三:负载平衡
在完成了负载评估之后,各个子绘制区域的负载值就得到了,接下来就是负载平衡的过程,准确地说,就是根据当前负载的分布情况,重新调整各个渲染视区的大小,以求在接下来的绘制过程中能达到负载平衡。本发明提出“负载矩形”概念,并利用负载矩形进行负载平衡。
在图3中共有五个视区,在进行下一帧绘制之前,需要根据模型当前所在的位置进行负载评估,根据当前子绘制区域的负载对子绘制区域中渲染视区的大小进行调整,使得各渲染节点负载平衡。在负载评估的过程中,可以获取本渲染视区内的子模型包围盒,将包围盒的八个顶点映射至屏幕空间,然后在屏幕二维空间内取这八个点的包围矩形。图中的白色实线矩形框就是各个视区内的包围矩形。将每个矩形作为一个负载体,称之为“负载矩形”,然后以这些负载矩形为对象来划分屏幕空间。
在划分屏幕空间时,本发明不是将目标区域不断地分为负载相等的两部分,然后分配给各渲染节点处理,而是依据渲染节点组织成的二叉树,采用一种自顶向下的划分方法,按二叉树的结构进行负载分配。在某一次的划分过程中,目标区域并不一定划分为负载相等的两块。
本发明按子绘制区域,针对所有的渲染节点建立一棵二叉树,每个渲染节点只对应一个渲染视区,二叉树的叶节点与各个渲染节点对应。此二叉树的性质如下:对于该树中的任意一个中间节点,设其左右子树中的叶节点数分别为NumL和NumR,那么NumL和NumR满足这样的关系:NumL=NumR或者NumL+1=NumR。
图4(a)中有五个视区,其二叉树结构如图4(b)所示。这里渲染节点是物理设备,有5个,把它们组织起来的二叉树有4个非叶节点。而叶节点对应了5个渲染节点。
负载平衡的最终目的是要求所有渲染视区的负载值相同。那么在这样的二叉树中,也就意味着所有叶节点必须均分负载。假设有N个渲染视区,模型总体负载值为L,在绘制下一帧图像之前,必须调整每个叶节点的视区范围,使其负载值为L/N,而每个中间节点的负载等于其左右子树的负载之和。
在图4(b)中,给每个叶节点分配的负载值为L/5;给各个中间节点分配的负载情况如下:
节点1:L        节点2:2L/5
节点3:3L/5     节点4:2L/5
本发明采用二叉树自顶向下逐层分解的方式来划分屏幕空间。在上面的例子中,先按照节点2和节点3的负载,将屏幕划分为负载比为2∶3的两个部分A和B,然后将A以负载比1∶1进行划分;将B以负载比1∶2划分为C和D;最后再将D以负载比1∶1进行划分。
每次屏幕空间的划分都有两种方式:水平、垂直。负载平衡的计算机实现流程如下:
输入:负载矩形集合LoadRects,渲染节点二叉树ViewTree。
输出:重新调整过的视区集合。
流程:
Step1:对负载矩形集合进行预处理,将其转换为负载网格,如图5所示,并以矩阵LoadMatrix[m][n]的形式表示,则屏幕被划分成m×n的不均匀网格,LoadMatrix[m][n]中的每个成员是一个整数值,代表所对应格子内的负载情况;
Step2:设定当前的屏幕区域PVP为[0,0,W,H],设定当前的划分节点node为ViewTree的根节点;
Step3:设定变量index=0,load=node.load,splitpos=0;
Step4:按列访问LoadMatrix,从第index列开始向右侧遍历,找到与PVP有重叠的第一列网格,设该列列号为row,设该列网格的横向起始位置与终点位置分别为x0,x1,取x0=max(x0,PVP.x);x1=min(x1,PVP.x+PVP.w)。计算[x0,x1]范围内的总负载值L:
A.如果L<load,那么,load=load-L,index=row+1;跳至Step4;
B.如果L>=load,那么取划分位置:splitpos=x0+(load/L)*(x1-x0);
Step5:将PVP划分为两个子区域,PVP1=[PVP.x,PVP.y,splitpos-PVP.x,PVP.h],PVP2=[splitpos,PVP.y,PVP.w-PVP1.w,PVP.h];然后针对(PVP1,node->left)和(PVP2,node->right)分别递归地执行Step3~Step5。
PVP和node是递归算法中的入口变量。在递归的第一步,PVP就是整个屏幕空间,node就是所有渲染节点,随着递归划分的深入,每次递归子过程中,PVP和node就变为某个子空间和子渲染节点了。index表示用来访问矩阵LoadMatrix的第index列,load表示当前计算所得的负载,PVP.x、PVP.y表示当前屏幕区域在整个屏幕区域内的起始坐标,PVP.w、PVP.h表示当前屏幕区域的宽和高,Splitpos表示当前区域的划分位置,以此位置将屏幕区域一分为二。
本发明的时间复杂度与模型的图元数没有关系,只与负载矩阵的大小有关,确切地说,只是和渲染节点的数目相关,因此,本发明有着极其高效的特点,具备实际的应用价值。此外,考虑到负载网格对于负载分布的描述并不精确,使用本发明不一定通过一次渲染视区调整就完全达到负载均衡的效果,但经过几帧的渲染视区调整和绘制,负载就基本达到均衡了。而且仅仅第一次的调整就使得系统非常接近均衡状态了。此外,本发明可以灵活地使用各种屏幕划分方式,包括混合式(水平+垂直)的屏幕划分方式,是一种适用于任意绘制区域划分方式的并行绘制负载平衡方法。
图6是服务器端的负载平衡控制界面所绘制的负载评估示意图。其中,(a)为测试模型,有1.5M的三角片,(b)为水平划分方式,(c)为水平+垂直混合划分方式。图中绘制出了作最终归属判断也就是负载平衡的数据块的包围盒。从图中的结果可以看到,在KD树自顶向下的图元归属判断中,仅仅对处于边界附近的数据块需要不断地进行细化。
图7所示为跟踪某一次模型剧烈运动之后连续若干帧的绘制过程,共记录了6帧图像,(a)为第0帧,(b)为第1帧,(c)为第2帧,(d)为第3帧,(e)为第4帧,(f)为第5帧。其中,第0帧处于初始的平衡状态,随后发生了平移操作,模型被平移至右下端,这时候系统发生严重的负载不平衡。第1帧图像是经过了第一次负载平衡之后的绘制结果,由于及时地进行了一次负载平衡,第1帧图像中的视区已经发生了较大的调整,所以在实际绘制第1帧图像之前,负载严重不均衡的情况已经得到了很大的缓解。第2帧图像绘制前继续调整视区,第二次视区调整的幅度已经远远小于第一次。第2帧绘制完毕后,其它的后续负载平衡过程仅仅对视区进行微调。
表1记录了上述过程中的渲染视区调整前各个节点的负载评估值,用三角片个数表示,以及渲染视区调整完毕后各个绘制节点的实际负载值,用时间表示。在第一帧绘制之前,负载评估预测出系统将出现严重的负载不均衡,负载比为1∶184∶38,因此在实际绘制第一帧图像之前进行了视区调整,经过负载平衡之后的实际负载比约为1∶6∶3。到了第三帧的时候,系统负载已经基本达到均衡了。实验结果表明,本发明所提出的动态负载平衡算法具有很好的实用价值。
表1负载平衡实验数据
Figure G2009102130920D00131
图8所示为负载平衡的绘制时间比较,该“绘制时间”指的是所有绘制节点完成一帧渲染所用时间的最大值。对于使用了本发明负载评估的负载平衡,各个节点的绘制时间等于实际绘制时间加上负载评估时间。图8(a)未采用负载平衡策略,系统大部分时间都处于非均衡状态之下,平均绘制时间非常大;图8(b)使用了本发明基于负载评估的负载平衡机制,由于负载评估能够及时和准确地预测不均衡状态,所以系统一直处于负载基本均衡的状态,绘制时间比较平稳。综上所述,本发明所提出的基于负载矩形的负载平衡快速算法,具有很好的实际应用价值,对于并行绘制系统整体效率的提升有着重要的作用。

Claims (3)

1.一种适用于绘制区域任意划分的并行绘制负载平衡方法,用于三维渲染,通过剖分屏幕空间在多个绘制节点间分配计算任务,绘制节点也称渲染节点,其特征是包括以下步骤:
步骤一:预处理
首先对要绘制的模型进行预处理,对模型进行等质量划分,得到子模型,将图元也就是子模型组织成KD树空间结构,图元为KD树节点,则处于KD树同一层次的节点质量相同,密度越大的节点,其体积越小,在同一层次上,KD树的节点质心更接近模型的实际质量分布;模型在空间中有一个外接包围盒,在KD树的组织过程中,选择垂直于包围盒最长边的平面作为模型的分割平面;
步骤二:负载评估
将三维模型空间的点映射至二维的屏幕空间,划分屏幕空间得到子绘制区域,一个渲染节点对应一个子绘制区域,子绘制区域内的模型部分为渲染视区,负载评估对模型在各个子绘制区域内的分布情况进行分析,也就是分析图元属于哪个渲染视区,评估过程通过进行KD树自顶向下的图元归属判断来实现,由子绘制区域内的图元计算子绘制区域的负载,从KD树根节点开始按层次顺序对每个节点进行归属判断,如果某一个节点完全位于某个子绘制区域内部或者完全位于其外部,那么它所有的子节点在后续的层次遍历过程中都可以忽略,对于不属于前述情况的节点,即跨边界节点,则继续进行其子节点的归属判断;
步骤三:负载平衡
负载评估之后,得到各个子绘制区域的负载值,获取本子绘制区域内的各子模型包围盒,将各子模型包围盒的八个顶点映射至屏幕空间,然后在屏幕二维空间内取这八个点的包围矩形,将每个矩形作为一个负载体,称之为负载矩形,负载平衡以负载矩形为对象;每个渲染节点对应一个渲染视区,对每个渲染节点对应的渲染视区重新划分,在负载评估的负载值基础上动态调整渲染视区范围,使得每个渲染节点的绘制负载相等,首先将所有的渲染节点组织成一棵二叉树,二叉树的叶节点与各个渲染节点对应,所述二叉树的性质如下:对于该二叉树中的任意一个中间节点,设其左右子树中的叶节点数分别为NumL和NumR,那么NumL和NumR满足这样的关系:NumL=NumR或者NumL+1=NumR;
设有N个渲染视区,整个模型的总体负载值为L,调整每个叶节点的渲染视区范围,使每个叶节点的负载值为L/N,每个中间节点的负载等于其左右子树的负载之和,按照渲染节点组织成的二叉树,由自顶向下逐层分解,按每个节点的负载值划分屏幕空间;
步骤四:根据新的渲染视区范围对应调整屏幕空间上的子绘制区域;
步骤五:绘制下一帧。
2.根据权利要求1所述的一种适用于绘制区域任意划分的并行绘制负载平衡方法,其特征是负载评估中,对于跨边界节点,使用图元的包围球作为判断某图元归属于哪个子绘制区域的依据:计算包围球中心点到节点质心的空间直线距离,记为d,设包围球的半径为r,当d>αr时,认为节点质心远离包围球中心,反之为靠近,α是一个系数,由用户设定;当节点质心远离包围球中心点时,以节点质心归属的那个区域作为该节点所归属的区域,节点质心靠近包围球中心时,使用在本子绘制区域中包围球的体积,占包围球总体积的比重作为权值,来估算该节点在本子绘制区域内的负载;
以节点质心与包围球中心点之间的距离d占包围球半径r的比例α作为衡量质心有效性的依据,此时负载评估过程如下:
21):将所有子绘制区域的负载值清零,设定一个计数器TestCount=0;
22):设定三类队列组Queue1,Queue2,QueueFinal,每个队列组都有两个队列[0]、[1]组成,Queue1存放局部归属于一个渲染视区的节点、Queue2存放跨越多个渲染视区的节点、QueueFinal存放最终待测试的节点,其中,Queue1和Queue2中的元素都是属于靠近渲染视区边缘的节点,且Queue2中存放的是跨越渲染视区公共边缘的节点;
23):设Index=1,TestFinish=False,Index表示当前访问队列组中的哪个队列,TestFinish是一个布尔变量,用来控制归属判断的整个过程是否可以进入结束收尾状态,将根节点root放入队列Queue2[0];
24):变换Index:Index=(Index+1)%2,控制两个队列间的切换,判断TestCount+2*(Queue1[Index].size+Queue2[Index].size)是否大于设定的阈值MaxTestCount,其中:TestCount:已经进行的归属判断次数;
Queue1[Index].size:Queue1[index]队列中的KD节点数;
Queue2[Index].size:Queue2[index]队列中的KD节点数;
TestCount+2*(Queue1[Index].size+Queue2[Index].size)表示进行下一步归属判断后将达到的总归属判断数;
如果超过阈值,置判断结果TestFinish为真,判断结束;
25):遍历Queue2[Index],针对每一个节点Node,如果TestFinish为真,那么将其左右子女放入QueueFinal,否则判断其左右子女的类型并作如下的处理:
A、普通节点:依据其包围球作归属判断;如果节点归属于一个子绘制区域,那么依据节点的质量增加相应子绘制区域的负载值;如果该节点局部归属于一个子绘制区域,那么将该节点放入Queue1[Index];如果节点跨越多个子绘制区域,那么将其放入Queue2[(Index+1)%2];
B、叶节点:将该节点放入QueueFinal
26):判断TestCount+2*(Queue1[Index].size+Queue2[(Index+1)%2].size)是否大于阈值MaxTestCount,如果超过阈值,置判断结果TestFinish为真,判断结束;
27):遍历Queue1[Index],针对每一个节点Node,如果TestFinish为真,那么将左右子女放入QueueFinal,否则判断其左右子女的类型并作如下的处理:
A、普通节点:依据其包围球作归属判断;如果节点归属于一个子绘制区域,那么依据节点的质量增加相应子绘制区域的负载值;如果该节点局部归属于一个子绘制区域,那么将该节点放入Queue1[(Index+1)%2];
B、叶节点:将该节点放入QueueFinal;
28):如果TestFinish为假,则跳转至步骤24);
29):遍历QueueFinal队列,针对每个元素Item,作如下处理:
①.如果Item.NodeValid为假,那么将Item的两个子女节点放入QueueFinal队列;
②.如果Item.MCValid为真,那么使用Item的质心进行归属判断,增加所属子绘制区域的负载。
③.如果Item.MCValid为假,对于该节点所占据的每一个渲染视区,计算Item中心点到渲染视区投影观察体侧面的最近距离D,设Item的包围球半径为R,那么该节点赋予该子绘制区域的负载值=((R-D)/(2*D))*Item.Mass,Mass是本节点的质量;
其中,MCValid是一个标志位,表示该节点质心的有效性,其含义是:如果节点质心靠近包围球中心,那么该节点质心无效,反之该节点质心有效;NodeValid标志位表示这样的含义:如果该节点属于狭长节点,那么此标志位为假,反之为真,狭长节点是指子模型的包围盒的长宽高的比严重不均衡,这样的子模型也就是KD树子节点就成为狭长节点。
3.根据权利要求1或2所述的一种适用于绘制区域任意划分的并行绘制负载平衡方法,其特征是负载平衡以负载矩形为对象,采用二叉树自顶向下逐层分解的方式来划分屏幕空间,具体步骤如下:
31):对负载矩形集合进行预处理,将其转换为负载网格,并以矩阵LoadMatrix[m][n]的形式表示,则屏幕被划分成m×n的不均匀网格,LoadMatrix[m][n]中的每个成员是一个整数值,代表所对应格子内的负载情况;
32):设定初始屏幕区域PVP为[0,0,W,H],初始划分节点node为二叉树ViewTree的根节点,初始屏幕区域PVP就是整个屏幕空间,初始划分节点node就是所有渲染节点,随着采用二叉树自顶向下逐层划分的深入,屏幕区域变为某个子屏幕空间PVPi,划分节点变为子渲染节点;
33):设定变量index=0,load=node.load,splitpos=0;
34):按列访问LoadMatrix,从第index列开始向右侧遍历,找到与PVP有重叠的第一列网格,设该列列号为row,设该列网格的横向起始位置与终点位置分别为x0,x1,取x0=max(x0,PVP.x);x1=min(x1,PVP.x+PVP.w)。计算[x0,x1]范围内的总负载值L:
A.如果L<load,那么,load=load-L,index=row+1;跳至步骤34);
B.如果L≥load,那么取划分位置:splitpos=x0+(load/L)*(x1-x0);
35):将PVP划分为两个子区域,PVP1=[PVP.x,PVP.y,splitpos-PVP.x,PVP.h],PVP2=[splitpos,PVP.y,PVP.w-PVP1.w,PVP.h];然后针对(PVP 1,node->left)和(PVP2,node->right)分别递归地执行步骤33)~步骤35);
步骤33)-35)中,index表示用来访问矩阵LoadMatrix的第index列,load表示当前计算所得的负载,PVP.x、PVP.y表示当前屏幕区域在整个屏幕区域内的起始坐标,PVP.w、PVP.h表示当前屏幕区域的宽和高,Splitpos表示当前区域的划分位置,以此位置将屏幕区域一分为二。
CN2009102130920A 2009-11-10 2009-11-10 一种适用于绘制区域任意划分的并行绘制负载平衡方法 Expired - Fee Related CN101702244B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102130920A CN101702244B (zh) 2009-11-10 2009-11-10 一种适用于绘制区域任意划分的并行绘制负载平衡方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102130920A CN101702244B (zh) 2009-11-10 2009-11-10 一种适用于绘制区域任意划分的并行绘制负载平衡方法

Publications (2)

Publication Number Publication Date
CN101702244A CN101702244A (zh) 2010-05-05
CN101702244B true CN101702244B (zh) 2012-04-25

Family

ID=42157157

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102130920A Expired - Fee Related CN101702244B (zh) 2009-11-10 2009-11-10 一种适用于绘制区域任意划分的并行绘制负载平衡方法

Country Status (1)

Country Link
CN (1) CN101702244B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102063329B (zh) * 2010-12-22 2012-12-12 北京邮电大学 基于多代理协作的管理任务动态分解方法及系统
CN102063331B (zh) * 2011-01-07 2013-04-17 同济大学 用于空间计算并行化的自适应负载平衡方法
CN103268253A (zh) * 2012-02-24 2013-08-28 苏州蓝海彤翔系统科技有限公司 一种智能化的多尺度并行渲染作业调度管理方法
CN103077088B (zh) * 2013-01-17 2016-01-13 浙江大学 集群渲染环境中基于pkdt树的动态反馈负载均衡方法
CN103544727B (zh) * 2013-06-26 2017-02-15 Tcl集团股份有限公司 一种基于预测分支的场景渲染优化方法、系统和移动终端
EP3040945B1 (en) * 2014-12-30 2019-06-19 Dassault Systèmes Creation of bounding boxes on a 3d modeled assembly
CN104809684B (zh) 2015-04-02 2018-03-27 华为技术有限公司 图形处理方法、装置及系统
CN106558104B (zh) * 2016-10-20 2020-05-08 合肥阿巴赛信息科技有限公司 一种对三维网格模型进行布尔运算的方法
CN106600522B (zh) * 2016-12-07 2019-10-11 东北大学 一种基于sort-first负载平衡的异质绘制节点并行图形绘制方法
CN107491305A (zh) * 2017-08-10 2017-12-19 深圳市华傲数据技术有限公司 数据分析及可视化处理方法、装置
CN107767449B (zh) * 2017-10-16 2020-12-18 苏州蜗牛数字科技股份有限公司 一种基于球面顶点的球体区域划分方法
CN109745704B (zh) * 2018-11-19 2022-09-09 苏州蜗牛数字科技股份有限公司 一种体素地形的管理方法
CN110580274B (zh) * 2019-09-12 2023-03-24 西安瑞特森信息科技有限公司 一种gis数据渲染方法
CN113888704B (zh) * 2021-12-01 2022-03-04 中国电子科技集团公司第二十八研究所 一种面向低时延交互的微场景分级分时绘制优化方法
CN116485629A (zh) * 2023-06-21 2023-07-25 芯动微电子科技(珠海)有限公司 一种多gpu并行几何处理的图形处理方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1445664A (zh) * 2003-04-03 2003-10-01 浙江大学 计算机集群并行绘制系统中基于时空变换的负载平衡设计方法
CN101218562A (zh) * 2005-05-27 2008-07-09 Ati技术公司 向多个视频处理单元(vpu)应用非均匀属性

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1445664A (zh) * 2003-04-03 2003-10-01 浙江大学 计算机集群并行绘制系统中基于时空变换的负载平衡设计方法
CN101218562A (zh) * 2005-05-27 2008-07-09 Ati技术公司 向多个视频处理单元(vpu)应用非均匀属性

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Mohammed Javeed Zaki,Wei Li,Srinivasan Parthasarathy.Customized Dynamic Load Balancing for a Network of Workstations.《High performance distributed computing》.1996,第282页到第291页. *
季华,陈福民.带负载平衡策略的PC sort-first并行渲染系统.《计算机仿真》.计算机仿真,2005,第22卷(第11期),第209页到第214页. *
陈颉,周智,黄刘生.负载平衡在三维渲染中的应用.《计算机工程与应用》.2005,(第34期),第65页到第68页,第81页. *

Also Published As

Publication number Publication date
CN101702244A (zh) 2010-05-05

Similar Documents

Publication Publication Date Title
CN101702244B (zh) 一种适用于绘制区域任意划分的并行绘制负载平衡方法
US8570322B2 (en) Method, system, and computer program product for efficient ray tracing of micropolygon geometry
CN103324780A (zh) 颗粒流动仿真系统和方法
US20110282641A1 (en) Method and system for real-time particle simulation
Vigueras et al. A comparative study of partitioning methods for crowd simulations
CN102855661B (zh) 基于空间相似性的大规模森林场景快速生成方法
Goswami et al. Regional time stepping for SPH
Mundani et al. A sliding window technique for interactive high-performance computing scenarios
Zhang et al. A fast adaptive load balancing method for parallel particle-based simulations
Hastings et al. Optimization of large-scale, real-time simulations by spatial hashing
CN1159668C (zh) 过程冶金中计算流体力学的数据可视化方法
Vigueras et al. Workload balancing in distributed crowd simulations: the partitioning method
Steiner et al. Dynamic Work Packages in Parallel Rendering.
CN110110158A (zh) 一种三维网格数据的存储空间划分方法及系统
CN108875275B (zh) 一种基于大规模流线的矢量场实时仿真方法及系统
Wong et al. Virtual subdivision for GPU based collision detection of deformable objects using a uniform grid
CN108171785B (zh) 用于光线跟踪的sah-kd树设计方法
Wenzel et al. Accelerating navigation in the VecGeom geometry modeller
Qiao et al. Component-based 2-/3-dimensional nearest neighbor search based on Elias method to GPU parallel 2D/3D Euclidean Minimum Spanning Tree Problem
Hirschmann et al. Towards understanding optimal load-balancing of heterogeneous short-range molecular dynamics
CN115344383A (zh) 一种基于进程并行的流线可视化并行加速方法
Zhao et al. A data allocation strategy for geocomputation based on shape complexity in a cloud environment using parallel overlay analysis of polygons as an example
Su et al. View frustum culling algorithm based on optimized scene management structure
Chen et al. Extending the educational scope of a particle-based simulation framework through parallelization
CN110738719A (zh) 一种基于视距分层优化的Web3D模型渲染方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120425

Termination date: 20121110