一种CT切片数据可视化重构的八叉树并行构造方法与流程

文档序号:12675670阅读:388来源:国知局
一种CT切片数据可视化重构的八叉树并行构造方法与流程
本发明涉及并行计算应用
技术领域
和高性能科学计算领域,特别是涉及一种具备TB级数据处理规模的CT切片数据可视化重构的八叉树并行构造方法。
背景技术
:在图形图像处理应用领域中,三维可视化技术是描绘和理解三维模型的一种重要工具,而八叉树是一种用于描述三维空间的树状数据结构,其数据结构是三维可视化技术广泛应用的重要数据结构之一。科学计算领域中常用的并行编程框架包括MPI(消息传递接口)、OpenMP、CUDA等。MPI主要用于实现多进程协作的并行程序设计。由于不同进程具有独立的地址空间和资源,因此需要采用MPI提供的消息传递接口来实现进程间的相互通信。在使用MPI实现八叉树并行构造算法时,通常会对计算网格进行区域划分,不同的进程负责不同区域的计算,完成计算之后将数据存储至自定义文件中。OpenMP是一种用于共享内存的并行系统的多处理器程序设计的编译处理方案。在OpenMP的程序中,多个线程协同工作来完成计算任务,线程之间共享所在进程的内存空间,因此,线程间不需要额外的通信来交换数据。但是OpenMP不能实现跨节点并行,而且,在线程数目很大的情况下,不能实现良好的并行效率。随着数据处理规模的迅速激增,和处理时效性需求不断增加,三维可视化技术已经越来越多地利用高性能计算应用技术和并行计算应用技术来解决面临的例如单机无法处理,或处理时间无法接受,或处理效果不好等问题和挑战。八叉树构造算法是一个非常重要的应用基础算法,针对其优势和特点,结合目前数据规模逐渐达到TB级、甚至PB级,应用时效性要求高的实际情况,研究八叉树的并行构造方法有重要的实际意义和迫切的应用需求。技术实现要素:为了解决现有技术的不足,本发明提供了一种基于MPI+OpenMP并行编程模型的CT切片数据可视化重构的八叉树并行构造方法。该方法利用原始体数据网格剖分、八叉树节点数据没有依赖性等特点,基于“按需构造-BranchonneedOctrees,BONOs”方案,根据体数据的实际三维尺寸进行八叉树并行构造,一方面减少构造过程中对计算资源、存储资源的浪费和I/O开销,另一方面通过并行计算的方式实现对TB级CT切片数据的快速八叉树数据结构构造,MPI+OpenMP并行编程技术满足TB级CT切片数据在不同分辨率要求下的八叉树数据结构体快速构造,该方法具备较好的并行加速比和并行效率。本发明的技术方案是:一种CT切片数据可视化重构的八叉树并行构造方法,其具备TB级数据规模处理能力,其包括以下步骤:(1)根据CT切片数据组合而成的原始体数据尺寸X、Y和Z,将八叉树的叶子节点和中间节点设定尺寸为x、y和z,计算获得X方向、Y方向和Z方向的剖分网格数目NX、NY和NZ,得到体数据的剖分网格数目N=NX*NY*NZ,按照该数目构造一份线性满八叉树的索引列表,剖分网格即代表八叉树的叶子节点;其中索引列表内包括以下信息:1)体数据三维尺寸:拟处理体数据的实际三维大小X、Y和Z;2)节点三维尺寸:BONOs树节点表示的体数据三维大小x、y和z;3)实际节点数:当前BONOs树的节点个数,包括根节点、中间节点和叶子节点;4)八叉树深度:当前BONOs树的深度;5)是否BONO树:标识当前八叉树是否为BONO树;6)是否压缩:标识当前八叉树存储前是否经过压缩;7)线性八叉树地址向量,满线性八叉树,包括:①节点标识:根据BONOs算法,若该树节点实际存在,则为真,否则为假;②树节点坐标:树节点的三维坐标x,y和z;③节点Morton编码:节点的Morton编码;④节点实际内存地址:节点数据所在的实际内存地址;⑤节点邻域索引:标识出子节点相邻的其余体数据索引下标,包括面邻域、边邻域和角邻域,共27个;⑥文件存储绝对路径:表示当前节点的文件存储路径。(2)完成索引列表字段填充,包括八叉树属性字段和节点属性字段,按照“按需构造-BONOs”原则,根据实际存在的体数据进行划分,不保留扩充的“伪数据”:若节点内包含实际存在的体数据,则该节点被标识为存在;若节点只包含扩充的伪数据,则该节点被标识为不存在,减少转换和构造过程中对计算资源、存储资源的浪费和消耗。(3)根据原始体数据尺寸X、Y和Z,以及拟定的节点尺寸x、y和z,进行数据预取操作,将Z方向的z个CT切片数据文件预取至所有计算节点内存中,减少转换过程中对数据文件的重复数据I/O开销,提高数据复用效果。1)按照节点尺寸x、y和z,以及切片数据大小,申请动态内存空间,等待数据缓存至内存;2)按照OZ坐标轴方向将z个切片数据读取至节点内存;3)根据体数据尺寸Z和节点尺寸z,计算迭代次数K,其中K表示该数据预取过程将持续K次,K=┌Z/z┐。(4)将预取至内存的体数据子块,即三维尺寸为X、Y和z的体数据子块在XOY平面进行X和Y方向进行等分,X方向划分,Y方向划分,将该体数据块划分为(X/x)*(Y/y)个叶子节点。1)按照MPI并行规模PN,对本次叶子节点网格数N进行平均划分;2)每一个进程P,确定拟处理的叶子节点个数和节点编号,确保所有节点能够被处理;3)根据拟处理叶子节点数目,申请动态内存空间,分配待处理数据缓存区域。(5)基于MPI+OpenMP编程模型,执行叶子节点数据并行转换操作,由PN个MPI进程将N个叶子节点进行数据转换,每个进程内部启动OpenMP多线程完成数据排列,使得CT切片数据格式快速并行转换为八叉树叶子节点数据格式,并存储为自定义二进制文件,将该过程迭代执行次,完成整个体数据由CT切片数据格式向叶子节点二进制数据格式的转换操作。1)按照叶子节点尺寸和编码,读取体数据子块的对应区域至缓存区域;2)依次按照OX、OY和OZ三个方向,将切片数据顺序排列为树节点数据;3)将完成数据填充的叶子节点存储为自定义二进制文件;4)如此迭代执行K次,完成整个体数据由CT切片数据格式向八叉树叶子节点二进制数据格式的转换过程,其中。(6)根据线性满八叉树索引列表属性信息和MPI+OpenMP并行编程模型,从八叉树的叶子节点所在层位开始进行自底向上进行合并构造,逐层向上合并构造树的中间节点,并将构造结果存储为自定义二进制文件,存储路径保存至索引列表中。a)按照MPI并行规模PN,对当前拟合并的中间节点数目进行平均划分,确保该层所有节点能够被处理;b)每一个进程P,按照父子节点定位算法,确定拟处理的中间节点的子节点在索引列表中的索引编号范围,线性满八叉树索引列表具备如下特性:i.设一子节点索引号为ID’,其对应的父节点索引号为ID;ii.ID’=ID*8+i,i={1,2,3,4,5,6,7,8};iii.ID’-1=ID*8+i’,i’={0,1,2,3,4,5,6,7};iv.(ID’-1)/8=(ID*8+i’)/8=ID,i’={0,1,2,3,4,5,6,7};v.ID=(ID’-1)/8c)即根据子节点索引编号ID’,可以直接计算得到父节点索引编号ID,同样父节点也能够直接计算获得八个子节点的索引编号,计算时间复杂度为O(1);d)对上述a)-c)步骤重复迭代执行,直至完成对树的根节点Root数据合并操作。(7)完成整棵八叉树构造,获得线性满八叉树索引列表和八叉树节点数据文件,满足体数据三维可视化重构目的。本发明的有益效果是,一种CT切片数据可视化重构的八叉树并行构造方法,相比已有的八叉树构造方案,该并行构造方案有以下方面的突破:1)设计并实现了线性满八叉树索引列表数据结构,利用线性满八叉树的特性和领域寻找算法,对于八叉树的父子节点、相邻节点定位能够在时间复杂度内完成,提高了八叉树节点编号定位效率;2)设计并实现了针对TB级CT切片数据自底向上八叉树构造算法,通过MPI+OpenMP并行编程模型,在节点之间采用MPI多进程并行,在节点内部采用OpneMP共享内存并行,完成对TB级规模的CT切片数据进行八叉树数据结构并行构造,使得TB级的CT切片数据能够快速完成八叉树数据结构构造,实现指定分辨率的快速三维可视化重构;3)以“按需构造-BONOs”思路和自底向上逐层合并算法框架设计实现八叉树并行构造方法,能够根据体数据尺寸和八叉树节点尺寸完成八叉树自底向上按需构造,构造过程中根据节点是否真实存在进行内存申请,无需对不规则体数据进行三维尺寸补全,减少无效数据对内存、磁盘I/O的消耗,提高八叉树结构体的并行处理效率,在可接受时间内满足对TB级CT切片数据的可视化重构需求,一方面实现数据规模越来越大的CT切片数据可视化重构要求,另一方面通过自底向上重构方法,探索获得一种适用于并行计算的八叉树并行构造算法框架。4)该方法可以实现对TB级CT切片体数据进行快速八叉树并行重构。根据重构之后的八叉树数据结构体,能够快速进行不同设定分辨率下的数据可视化查看,方法具备对TB级数据处理能力,具备良好的并行加速比和并行效率,可靠性、可扩展性良好,能够有效提升三维数据可视化重构的应用水平。附图说明图1是本申请索引列表数据结构示意图。图2是本申请体数据子块中数据预取示意图。图3是本申请叶子节点网络并行划分示意图。图4是本申请叶子节点数据转换示意图。图5是本申请中八叉树中间节点合并构造示意图。具体实施方式下面结合附图、附表和具体实施例对本发明作进一步详细说明。一种CT切片数据可视化重构的八叉树并行构造方法,其具备TB级数据规模处理能力,其包括以下步骤:(1)根据CT切片数据组合而成的原始体数据尺寸X、Y和Z,将八叉树的叶子节点和中间节点设定尺寸为x、y和z,计算获得X方向、Y方向和Z方向的剖分网格数目NX、NY和NZ,得到体数据的剖分网格数目N=NX*NY*NZ,按照该数目构造一份线性满八叉树的索引列表,剖分网格即代表八叉树的叶子节点;如图1所示,其中索引列表内包括以下信息:1)体数据三维尺寸:拟处理体数据的实际三维大小X、Y和Z;2)节点三维尺寸:BONOs树节点表示的体数据三维大小x、y和z;3)实际节点数:当前BONOs树的节点个数,包括根节点、中间节点和叶子节点;4)八叉树深度:当前BONOs树的深度;5)是否BONO树:标识当前八叉树是否为BONO树;6)是否压缩:标识当前八叉树存储前是否经过压缩;7)线性八叉树地址向量,满线性八叉树,包括:①节点标识:根据BONOs算法,若该树节点实际存在,则为真,否则为假;②树节点坐标:树节点的三维坐标x,y和z;③节点Morton编码:节点的Morton编码;④节点实际内存地址:节点数据所在的实际内存地址;⑤节点邻域索引:标识出子节点相邻的其余体数据索引下标,包括面邻域、边邻域和角邻域,共27个;⑥文件存储绝对路径:表示当前节点的文件存储路径。(2)完成索引列表字段填充,包括八叉树属性字段和节点属性字段,按照“按需构造-BONOs”原则,根据实际存在的体数据进行划分,不保留扩充的“伪数据”:若节点内包含实际存在的体数据,则该节点被标识为存在;若节点只包含扩充的伪数据,则该节点被标识为不存在,减少转换和构造过程中对计算资源、存储资源的浪费和消耗。(3)根据原始体数据尺寸X、Y和Z,以及拟定的节点尺寸x、y和z,进行数据预取操作,将Z方向的z个CT切片数据文件预取至所有计算节点内存中,减少转换过程中对数据文件的重复数据I/O开销,提高数据复用效果。如图2所示:1)按照节点尺寸x、y和z,以及切片数据大小,申请动态内存空间,等待数据缓存至内存;2)按照OZ坐标轴方向将z个切片数据读取至节点内存;3)根据体数据尺寸Z和节点尺寸z,计算迭代次数K,其中K表示该数据预取过程将持续K次,K=┌Z/z┐。(4)将预取至内存的体数据子块,即三维尺寸为X、Y和z的体数据子块在XOY平面进行X和Y方向进行等分,X方向划分,Y方向划分,将该体数据块划分为(X/x)*(Y/y)个叶子节点,如图3所示:1)按照MPI并行规模PN,对本次叶子节点网格数N进行平均划分;2)每一个进程P,确定拟处理的叶子节点个数和节点编号,确保所有节点能够被处理;3)根据拟处理叶子节点数目,申请动态内存空间,分配待处理数据缓存区域。(5)基于MPI+OpenMP编程模型,执行叶子节点数据并行转换操作,由PN个MPI进程将N个叶子节点进行数据转换,每个进程内部启动OpenMP多线程完成数据排列,使得CT切片数据格式快速并行转换为八叉树叶子节点数据格式,并存储为自定义二进制文件,将该过程迭代执行次,完成整个体数据由CT切片数据格式向叶子节点二进制数据格式的转换操作,如图4所示:1)按照叶子节点尺寸和编码,读取体数据子块的对应区域至缓存区域;2)按依次按照OX、OY和OZ三个方向,将切片数据顺序排列为树节点数据,如图4虚线框部分;3)将完成数据填充的叶子节点存储为自定义二进制文件;4)如此迭代执行K次,完成整个体数据由CT切片数据格式向八叉树叶子节点二进制数据格式的转换过程,其中。(6)根据线性满八叉树索引列表属性信息和MPI+OpenMP并行编程模型,从八叉树的叶子节点所在层位开始进行自底向上进行合并构造,逐层向上合并构造树的中间节点,并将构造结果存储为自定义二进制文件,存储路径保存至索引列表中,如图5所示:按照MPI并行规模PN,对当前拟合并的中间节点数目进行平均划分,确保该层所有节点能够被处理;a)每一个进程P,按照父子节点定位算法,确定拟处理的中间节点的子节点在索引列表中的索引编号范围,线性满八叉树索引列表具备如下特性:i.设一子节点索引号为ID’,其对应的父节点索引号为ID;ii.ID’=ID*8+i,i={1,2,3,4,5,6,7,8};iii.ID’-1=ID*8+i’,i’={0,1,2,3,4,5,6,7};iv.(ID’-1)/8=(ID*8+i’)/8=ID,i’={0,1,2,3,4,5,6,7};v.ID=(ID’-1)/8b)即根据子节点索引编号ID’,可以直接计算得到父节点索引编号ID,同样父节点也能够直接计算获得八个子节点的索引编号,计算时间复杂度为O(1);c)对上述a)-c)步骤重复迭代执行,直至完成对树的根节点Root数据合并操作。(7)完成整棵八叉树构造,获得线性满八叉树索引列表和八叉树节点数据文件,满足体数据三维可视化重构目的。本发明的测试环境为:TH-1A系统,2CPU/节点,6核/CPU,2.90GHz,24GB内存,网络通信点对点80GB/s,基于Lustre文件系统提供存储。本发明的测试数据为:脑切片CT数据,TIFF格式,包括600MB、17GB和1.8TB三种数据规模,其体数据尺寸如表1所示:表1体数据尺寸数据大小X维度Y维度Z维度600MB5684222110717GB28420111031071.8TB284201110314000本发明的测试方案,根据体数据尺寸设定树节点尺寸为表2所示:表2树节点尺寸设定数据大小树节点X维度树节点Y维度树节点Z维度600MB2561283217GB256128141.8TB51225664测试结果包括600MB数据、17GB数据和1.8TB数据的并行执行时间,考虑到数据规模较大、单节点内存配置有限,测试方案没有对传统八叉树构造方案进行时间开销测试统计。600MB数据测试统计表为表3所示:表3600MB数据测试统计表从表3可以看出,2个进程即可在20S内完成对600MB的CT切片数据格式向八叉树结构格式转换。17GB数据测试统计表为表4所示:表417GB数据测试统计表从表4可以看出,17GB的CT切片数据在8个进程并行执行下能够在8分钟以内完成格式转换,获得八叉树结构。同时,由4个进程线性增加到8个进程时,加速比为1.51,并行效率为75.7%,具备较好的可扩展性。1.8TB数据测试统计表如表5所示:表51.8TB数据测试统计表从表5可以看出,1.8TB的CT切片数据在16进程并行规模下能够在6个小时内完成数据格式转换,快速实现TB级数据可视化重构需求。测试结果分析:从上述表可知,600MB数据的2进程并行时间开销在20秒以内,17GB数据的8进程时间开销在8分钟以内,1.8TB数据的16进程时间开销在6小时以内。本发明方法一方面实现数据规模越来越大的CT切片数据可视化重构要求,另一方面通过自底向上重构方法,探索获得一种新的适用于并行计算的八叉树并行构造算法框架。以上仅是本申请的优选实施方式,本申请的保护范围并不局限于上述实施例。凡属于本申请思路下的技术方案均属于本申请的保护范围。应当指出,对于本
技术领域
的普通技术人员来讲,在不脱离本申请的原理前提下的若干改进和润饰,都应视为本申请的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1