最新读了Sung-Eui Yoon的文章
阅读中将其它相关部分译了出来
摘要:当前的计算机系统架构使用了缓存来提高广大应用程序的性能。缓存结构的一个主要特点是当对(一个没有缓存的)对象进行读取时使用块读取技术。为了最大化的利用好块读取机制的效率,本文作者对表面网格以及体网格模型提出了新的缓存已知(cache-aware)和缓存未知(Cache-oblivious)的布局,它们提升了交互可视化的性能以及几何处理算法。基于一般的I/O模型,作者提出了一种新的缓存已知(Cache-aware)和缓存未知(Cache-oblivious)标准。他们与进行网格数据的访问时,缓存失中的数量有很大的相关性。此外,对于指导布局的处理时,本文提出的方法可以用来对一个布局的质量进行定量的标定,如对于同一个格网模型的不同布局方法比较,以及对一个给定的布局是否可以有明显的性能提高的评定。我们的结果表明,在对一些可视化应用进行性能分析时,如等值面提取或视点相关渲染,用本文提出的标准进行优化的无结构化网格比传统的布局方法有较高的性能提升。此外,我们改善了缓存未知(cache-oblivious)网格布局的性能以及应用性和精确性。
1.介绍
很多几何算法使用了CPU和GPU的计算能力来进行交互可视化和其它任务。但这几十年来的一个趋势是处理器速度与内存访问速度之间的差距在增大。因此,系统架构持续通过增加高速缓存以及内存层次来避免存储访问的延迟。然而目前的情况下,在不同的存储层次中的访问速度相关几个数据量级。在一些情况下,程序的运行时间是它的缓存访问模式的函数以及它的操作数。
内存层次结构的一个重要的特征是每当出现一个缓存失中时使用块读取技术。块读取架构假设数据访问的空间具有很高的相关性,可以保证重复的缓存击中发生。因此,要最大化的使用块读取的好处,组织与访问数据以一个缓存一致性的方法就显得十分的重要了。一般说来,有两种方法来最小化缓存数据失中数量:计算重组(computation reordering)和数据布局优化(data layout optimization)。计算重组偏向于提高数据访问的局部性,如使用编译器优化或应用特定的手调谐(hand-tuning)。另一方面,数据布局优化将内存中的数据进行了重排序,以致它的布局可以匹配期望的访问模式。在本文中,我们集中讨论计算缓存一致性的多边形及多边形格式的数据布局,它们的顶点以单元格网(三角形和四面体)是以一个线性的方式进行元素组织。
很多布局和表达(三角形条带,空间填充曲线,流和cache-oblivious布局)都已经出现用于缓存相关的访问。然而,先前的方法要么是对特定的缓存和应用程序进行了特殊处理,包括图的稀疏矩阵的计算,要么构建不带有所需要构建优化的全局布局质量,布局间相关的排列或驱动一般优化策略的标准。此外,先前的标准可能更适应内存应用的本身,但对以块进行缓存的上下文并不是好的布局质量的估计。
主要结果
我们提出了新的标准和方法来估计和优化网格布局的局部性。基于一般的I/O模型,我们获得了缓存已经知和缓存未知公制标准,他们能较好的与以一理想相关方式访问网格模型时缓存中失中数量相关。使用这些标准,我们采取了一个多层的迭代优化方法来有效的计算数以亿计顶点的巨大网格模型的缓存相关的布局。我们也同时观察到迭代的构建布局,在不考虑其它排序标准时,根据我们的标准,一般可以得到好的局部性。
优点:
我们的方法提供当前最为优秀的特点:
一般性:本算法适应任何一种数据集,它所期望的访问特征可以用图结构进行表达。
简单性:我们的标准是简明的,并且容易进行布设。
精确性:我们所获得的标准与运行时缓存的失中数目关联得很好。因此,本方法可以很好的构建布局。
有效性:我们的方法可以快速的对一个给定的布局进行质量定量描述。如果根据这个标准,当一个布局已经相关是时,则不需要进行额外的重组工作,可以节省时间来进行大数据量的处理。
高性能:采用本方法进行的优化布局计算显示出比其它的布局更高的性能。
本文中对两种应用采用了本文提出的缓存相关的布局:从正四面体网格模型中进行等值面提取和视点相关的多边形渲染。为了表明我们的方法的一般性,我们计算了多种几何模型的布局包括CAD环境,扫描模型,等值面以及四面体网格模型。我们直接使用这些布局而没有改变运行应用程序。我们的布局减少了缓存的失中数量,并提升了整体的性能。
相关的工作
缓存有效性算法在过去二十年中引起了理论计算机科学和编译器研究方面广泛的研究。这些算法包括模型的缓存行为,基于片的编译器优化(compiler Literature),条带使用(strip-mining),循环交换(loop interchanging):所有的这些算法展示了减少缓存的失中率。缓存相关的算法可以被分类为计算重组(Computation Reordering)以及数据布局的优化。
2.1 计算重组
计算重组是为了获得一个运行时缓存相关的顺序以提高程序的局部性和减少失中的数量。这种方法典型的是应用编译器优化或应用特定的手调谐(hand tuning)。
从高的层面看,计算重组方法可以分成,缓存已知(Cache-aware)和缓存未知(Cache-oblivious)两类。缓存已知的方法使用缓存参数的知识,如缓存块的大小。另一方面,缓存未知算法并不要知道任何缓存的参数。在开发用于特定问题和应用的程序时,缓存有效计算重排序的算法中有一系列的成果,包括数值程序,排序,几何计算,矩阵乘法,FFT以及图的算法。最近给出一个综述。在可视化与计算机图形学领域,基于外核的算法(out-of-core)是设计用来处理大数据量模型运行在有限内存中的方法,典型的来说,是通过限制访问到一个小的,处于高速缓存中的模型的子块实现的。最近也有一个综述可以参考。
2.2 数据布局优化
数据元素存储的顺序会明显的影响到运行时的性能。因此,学术界进行了相当的工作用于计算数据的缓存相关的布局以达到预期访问的特征。下面是一些方法:
图和矩阵布局:
图和矩阵布局的问题属于组合优化问题一类,他们的主要目标是找到一个图或矩阵的线性布局来最小化一个特定的目标函数。比较有名的最小化问题包括线性排列(边长的和,如相邻顶点的索引差),带宽(最大边长),轮廓(profile,每顶点边长的最大和),波面(最大面大小)。这一方面的工作进行了广泛的研究并由Diaz给了一个A Survey of Graph Layout Problems的综述。然而,要潜在的提高数据相关性,对基于块的缓存来说,现有的这些数据的布局是不优化的,或者说需要更好的,下面将看到。
渲染顺序:
当代的GPU维持了一个小的缓冲区用来重用最近访问过的顶点。为了最大化的利用好顶点缓存用于快速渲染的优点,对三角形进行重排序是必要的。这个工作由Deering引领着。对三角形排序的结果被称之为三角形条带或渲染序列。Hoppe将三角形重组合的问题转换成一个带有依赖于特定顶点缓冲区大小代价函数的离散优化问题。很多技术提升了视点相关算法的渲染性能,通过计算渲染队列而不针对特定的缓存大小。
处理序列:
Isenburg等提出了处理顺序作为渲染顺序的一个扩展来用于大数据量的处理。一个处理序列表示了一个索引网格作为交叠三角形和顶点它们可以流式进行到系统的内存。全局的网格访问被限定在一定的顺序中。局部的随机访问只对网格加入到缓冲区的部分进行支持,因为他是流型通过内存的。这种表达对于一些离线应用很有效。(如,简化和压缩)可以将这些计算转化到一定的顺序。
空间填充曲线:
很多算法使用空间填充曲线来计算缓存友好的体格网(volumetric grids)或高程域(height fields)模型布局。这些布局广泛用来提高图像处理、地形和体可视化的性能。一个基于空间填充曲线的网格布局的标准的构建方法是将网格模型或几何对象置入一个包含了空间填充曲线的统一的格网中。Gotsman和Lindenbaum调查了空间填充曲线的空间定位(Locality)。由查询或排序的应用的激发,Wierum提出了使用边长的对数的量度重新组合我们的标准,用于分析规则空间格网的布局。然而,我们的结果显示,空间曲线的引入并没有很好的服务于几何图元不规则分布的网格。最近,YOON等提出了缓存相关的布局用于多边形网格以及BVHs。这些构建方法是自然的需要进行一系列的二分选择但不依赖于全局的定位。因此,这些方法依赖于特定的优化框架且不能用于布局质量的判断。
3 计算模型
在本部分,我们将扫描一个用于缓存表达的I/O模型。我们同时提出了一个图的表达和概率模型用来获取访问网格模型的可能性。
3.1 I/O模型
大多数的现代计算机使用层次的内存结构,每一个层级的存储单元作为下一级的缓存。内存的层次结构有两个特点:第一,低层次的存储器,容量比较大,但远离处理器,所以访问的速度比较慢。第二,数据在存储层次中的移动是以块为单元很多元素一起进行的。数据是先存储在低层次的存储器中的。一般来说是磁盘中。数据的传输发生在当相邻的两级存储结构中,缓存出现失中时。由于块读取的机制,缓存的失中可以通过对同时访问的块中的数据元素进行排序来实现减少。
我们使用一个简单的两层I/O模型由Aggarwal和Vitter定义的。这种结构获取了层次存储的两种特点。这个模型商定一个快速的内存称为“缓存”,有M块,以及一个低层的无限内存。每一个缓存块的大小的B,因此,整个的内容是MXB,数据在层次之间以块的方式进行传输。
3.2 图表示
我们的布局算法需要一个有向图来表达运行时的访问特征的。在这个有向图中,每一个节点表达一个数据元素,如网格顶点或三角形。两节点间的有向弧
设
我们也需要每一个节点和弧段的概率(作为权值),表示运行时访问到它们的可能性。我们获得这个概率值是基于图结构,并通过考虑有限的图的随机穿行。对每一个有向弧
网格特殊化:对网格模型概率的计算假设在给定网格中,顶点i在通过出度访问他们的邻节点的概率是相等的。因此
一个网格布局包含一对独立的顶点和单元格的线性序列。顶点的布局需要一个有向图
4 缓存已知布局(CACHE-AWARE LAYOUTS)
本部分中,我们获取了基于我们的计算模型的缓存已知的标准,并描述了一个有效的布局算法。我们的目标是计算当通过遍历简单弧段访问节点时的缓存失中期望的数量。因为在我们的框架下,弧段被访问的概率是相等的。这种方法对任何数量的访问具有一般性。我们考虑这个问题的两种情况:缓存中包含恰好一块,另外是包含有多个块。
4.1单个缓存块 M=1
由于缓存中只能保存一个块,那么缓存的失中将发生在每当所访问的节点存在于没有加载到缓存中的块时,也就是,缓存失中的获取是当我们遍历弧
此处
布局算法:为
4.2 多块缓存 M>1
现假设缓存中有多块数据,在单块的情况下,缓存失中发现在访问弧
理论上讲,
近似:
不幸的是,生成所有可能的块的访问特征的代价过高,因为以自然基的指数f增长,而且我们发现用一个误差范围内不考虑大量访问特征的近似的
然而要指出的是,有一个病态的情况,使得我们的猜想是无效的,解释它,我们先计算一个光谱式布局
5缓存未知的布局
缓存未知的布局允许一个较大范围块和块的大小的性能。这对大多数缓存系统的层次性是很重要的。同时也对跨平台的不同缓存参数的兼容性十分有效。本部分介绍了我们的缓存未知标准,它可得到任何块大小B的缓存失中期望数。对于单一块缓存,我们得到了两个不同的标准:一个对块大小B不进行限制,另一个限制块大小B是2的幂。在通过简要的讨论多块缓存,我们得出结论。
5.1 单一缓存块, M=1
现在,我们假设B是一个特定大小的块,来考虑用来优化多个块的大小(甚至无限个)的标准。首先,假设缓存中只保持一个块。
在4.1中,对固定大小B的块,获得了一个缓存已知的尺度
此处t是所考虑的最大的缓存块大小。
假设:为了简化,我们假设一个布局以统一的概率开始于一个块内任何地方。因此,我们将二值函数
而(5)式则成
此处我们用积分来近似表达求和是为了数字表达的简单。可以发现,这种近似表达中引入了可以忽略的误差,最后,我们要表现尺度的最简单的形式,一般说来,我们考虑
5.2 块大小的数字级数
当没有其它信息时,对
随着t的增加,
说明:
5.3 块大小的几何级数
对于所有块的大小相等,以及应该统一加权的假设是有问题的。首先这将消除小块大小的重要影响,因为我们可能包含任意多个大块通过增加t值。第二,缓存的层次关系中大小常是几何级数,这将建议我们以不同的比例优化缓存块大小,而不特定对任何可能的大小。实际上,大多数的缓存区的大小彩的是2的幂的字节(如32B的L1,64B的L2,4KB的磁盘缓冲区),因此,我们考虑块的大小变化统一从几何序列中
表达式右边是一个弧长几何均值的对数。由于logt是单调的,我们可以直接使用缓存未知尺度值进行优化,如图1。从现在起,我们估计
5.4 性质
图2表示了
我们说明,
5.5 有效性
我们对于在缓存块大小上的不同假设获取了二种缓存未知的度量值。为了决定哪一个更与实际的缓存失中相符,我们用龙的模型进行有效性检验。首先,我们计算了两个不同的布局:一个算术布局,
根据
5.6 布局算法
要构建使用
与[30]中的布局不同的是,那是基于一个待定的构建算法,而我们的全局尺度允许我们使用其它的优化方法,如:模拟退火算法(simulated annealing),遗传算法(genetic algorithms),最速下降算法(steepest decent)。而我们发现多层迭代方法对减小
5.7 多块缓存 M>1
我们可以基于相应的缓存已知尺度
6 布局的评价
本部分介绍两种用我们的标准进行的评价方法。如果一个布局是好的话。那么它不需要进行代价高的排序,特别是对于带有亿计的顶点网格。而我们的能在已知的方法以及几何级数的缓存未知尺度允许对不同的布局的图或网格排名。怎样将一个他们报告的一个单一布局数值映射到绝对质量或优化的接近度是不清楚的。如果任何尺度较小一点边界对图可知,我们可以用布局的带有尺度的边界来衡量其质量。不幸的是,对一般性的图或网格是不知的。对于测试的10个例子中,顶点从35K到800K的
另一种替代方法,代价更高,来标称布局的质量是来比较一个给定的布局A的优化的布局A*,通过由本文的方法之一构建由于比较的目标,首先是要避免长度的优化,我们只优化图的一小部分G’,从原图G中抽出仅优化得到A*。
6.1 算法
计算一个小子图
1. 采样输入图:在输入图中随机选择一个起始顶点,为了使获得的子图较好的反映整图的质量
2.构建子图的优化布局:我们应用了缓存已知和缓存未知算法来构建布局A*,并选择A*和A的尺度。我们简单使用数值近似表达输入模型和优化本模型布局失中率。若差别很大则最好计算全图的值。我们用这种方法快速访问,即使对最大的模型也小于10S用6-40K的顶点的子图,误差在15%范围内,即使用原模型有数以百万计顶点。
7 结果
本部分将展示用来缓存相关布局获得的性能的提高,二个应用:等值面提取,视点相关渲染。使用2.8GHz的P4的PC机,带
引导(替代)布局:为了减少布局的计算时间,只计算顶点或三角形布局中的一个,而采用其它的布局而非单独计算。首先,我们构建一个顶点的布局,原因是顶点的数目将小于三角形的数量,因此处理的时间小于三角形的时间,然后,我们访问顶点布局中的每一个顶点,我们按顺序存储所有三角形,我们发现使用这种使用已知的来产生的方法要引起一定的运行时性能的下降,在测试中有比采用独立 计算低5%的性能。
7.1 等值面提取
从一堆无序数据集中提取等值面是GIS和科学可视化的一个长期的问题。很多有效的等值面提取采用种子集来生成面,通过只遍历与之相交的单元格。此算法的运行时间由遍历等值线的相交单元格占据。我们采取的从单元格生成的方法使用深度优先遍历。因此,访问这种体格网以缓存相关的方式。
我们比较了在SPX体网格包含140K顶点和820K四面体的等值面生成算法的情况。用八个不同的布局存储体模型在第一个提取中,保证没有任何部分在缓存中,因此从磁盘加载是最大的瓶颈。第二种时所有数据全加载入内存,因此L1和L2的失中为最主要的问题。图6所示较强的关联在几何的缓存未知与失中率及运行时间。而且本文的缓存未知的布局只比采用4K块大小的缓存优化稍有降低,但比其它要高4倍
7.2 视点相关渲染
视点相关渲染常用于大规则模型的交互显示,这种方法预计算大模型的多分辩率层次。运行时,根据像空间的像素误差(PoE)限值动态简化模型。本文使用[32]中的CHPM来进行视点相关渲染。CHPM方法的渲染是快速的且大多数帧时间用于渲染简化模型。我们预计算了不同的布局对三种不同的模型比较缓存性能。包括1200万三角形的发电厂模型CAD模型,Bunney模型以及LLNL的等值面模型有1亿三角形块。要比较不同布局在视点相关渲染中的缓存性能。使用了平均缓存失中率(ACMR),它定义为缓存失中数目与用一定的顶点缓存大小渲染三角形数目的比。为了验证缓存未知的本质特点,我们模拟了一个先进先出的顶点缓存设置它的大小,量测ACMR是缓存大小的函数。
将缓存未知的布局与全局渲染序列(URS),Hoppe的渲染序列(HRS),Z序空间填充曲线以及YOON的COML[30]进行比较。HRS可以看作缓存已知的方法,因为他对一个特定大小的缓存优化且新设置了替换策略。另一方面,Z-Curve和URS和COML是缓存未知的方法,没有任何关于缓存的参数。
图7是bunney模型序列的ACMR值。三角形数目是顶点数目的二倍,ACMR在[0.5,3]之间,而且,可以计算一个更低的区间0.5+O(1/k),中是顶点缓存的大小。可以发现,我们的布局的ACMR接近最低值,且始终小于URS和COML在所有的缓存大小的测试中的值。当缓存大小为16时产生的失中要多于HRS,而HRS正是对此大小进行优化的。在8和64时,我们的方法要好很多。这正是本文方法的优点。适应通过的大小而不是一个固定的大小。用
图8表现的是电厂的ACMR,它的几何分布十分不规则,使用了我们的方法和其它的方法,空间填充曲线只在几何分布规则的区域可以获得较好的局部效果。在此,我们不期望其好的性能。事实上,我们的方法比Z-曲线和其它的方法产生好的结果。由
最终我们测试了
7.3与COML的比较
在[30]中Yoon提出了缓存未知网格布局COML,与本文的有很多相似,特别是在性能方面。然后我们还是继续的提升了COML的性能,我们的主要的动机是对于原来模型布局缺少全局性的布局相关性的扩展,这个成为一个数量的限制。COML使用了一个局部的概率值来进行相关性的量测。它允许决定是否一个局部的小数据量的顶点的调整是否可能减少缓存的失中数。这个标准并没有扩展到整个模型。并不具备传播性。假设一个局部的调整A要比另一个局部的调整B要好得多。且B也比另一个C要好得多。然而,根据COML的标准,A并不一定给C要好。有两个原因,COML并不能用来对布局的质量进行评估和比较。另一方面,我们的新的标准是全局的,并且是可以传播的,更为重要的是与期望的失中数相关。并且由于这个标准是全局的又容易计算,它可以方便的与计算的框架进行集成而不向前者那样。最终,我们从一个一般的I/O模型开始,由此缓存已知和缓存未知标准进行了融合。COML是否用于计算缓存已知布局是不明显的,因为他基本上没有与缓存参数相作用。
7.4 局限性
虽然相比与COML有了多方面的改进,但是我们的方法还是有一些不足。我们的布局质量估计技术只考虑了网格的子块,并不一定对于非采样部分有指导意义。我们用于网格模型的贪婪的迭代的多层方法不可能找到一个真正的最优结果,且有可能并不能计算出一个比输入模型要好的结果布局。而且,我们的多层方法过于依赖于METIS图剖分算法,而此本身依存于假设。因此,剖分的结构可能远离于优化。例子就是对于统一格网的使用。此时,由METIS库产生的缓存未知的布局以及由我们的标准达到的60%的缓存失中的获取是由空间填充曲线,它是在某种情况下对这些格网剖分的。我们的布局对性能的提升主要是在运行时对数据访问占主要的方面的应用的提升。最终,我们需要一个特定的图来表达访问的特征。无论网格的连接结构可以用来定义这种图。某些特定的应用可能需要一些不同的节点集,弧和访问概率的设置而不是由我们的方法自动产生。
8. 结论以及后述工作
我们提出了新的缓存已知与缓存未知的标准来对非结构化的图和网格进行布局质量的评价。我们的标准是基于一个二级的I/O模型的。我们的缓存已知标准简化到计数弧段的节点跨在不同的块之间的数量。对于缓存未知的情况,基于不同的对缓存块大小用于缓存的假设,我们获取了两种不同的效果标准。当应用于所有可能相等的块大小时,我们的缓存未知标准简化到图理论标准到最小线性排序中上来。当仅考虑缓存的大小是2的幂时,我们的缓存未知标准是弧长对数的函数。或者说,这些标准相应于弧长均值的算术或几何均值。我们的测试发现,在我们的标准在两种不同的可视化应用的中与缓存失中数有着相当好的联系。而且我们提升了这些应用从5%-100%的性能。
我们的工作还有一些更深入的研究。在讨论我们方法的不足之处时,我们在进行网格的压缩架构以更进一步的降低昂贵的I/O访问时间。一个主要的问题是设计一个压缩方法同时可保持网格的布局和支持随机访问以致使得网格可以以一个相关的方式进行访问而不是预定义的访问顺序。另一个问题是扩展我们现有的方法来支持非静态网格连接的相关布局。如,动画、简化、精化。还有一些令人兴奋的空间进行我们的新的,简单的缓存未知问题的理论研究,如证明什么样的布局对2D或3D的网格有效,以及是否我们的标准产生类似于空间填充的优化布对非结构化的格网有效。最后,我们期望我们的标准可以在可视化以外的应用中起作用,如最短路径的加速和其它的图的计算。
本文的Word版本在文件中可下载
若有不足处请大家指正,可发至bopi@263.net
浙公网安备 33010602011771号