凤来凰科技网

供技术支持一种基于sort-last架构的非结构网格并行体可视化算法每日互

凤来凰科技网 0

一种基于sort-last架构的非结构网格并行体可视化算法

范良1, 张晓蓉1, 吴亚东2, 陈呈3,4, 王昉3,4

1 西南科技学计算机科学与技术学院,四川 绵阳 621010

2 四川轻化工学计算机科学与工程学院,四川 自贡 643002

3 空气动力学重点实验室,四川 绵阳 621000

4 空气动力研究与发展中心计算空气动力研究所,四川 绵阳 621000

摘要体绘制是非结构网格数据体可视化的重要途径之一。然而,现有的串行非结构网格体绘制算法效率较低,难以满足规模数据体可视化需求。因此,并行体绘制算法研究是高性能体可视化程序设计的趋势。提出一种基于sort-last架构的非结构网格并行体绘制算法。首先,设计了基于KD树的并行体数据分割算法;其次,每个进程使用独立的可视化管线计算体绘制图像,根据树合成策略合成最终结果;最后,采用两层LOD模型技术优化交互体验。实验结果表明,提出的算法能被很好地应用于规模非结构网格数据体可视化中,所有交互时延在毫秒级别,满足了实时交互需求。

关键词非结构网格;体可视化;并行体绘制;实时交互

论文引用格式:

范良, 张晓蓉, 吴亚东, 等. 一种基于sort-last架构的非结构网格并行体可视化算法[J]. 数据, 2021, 7(4): 117-129.

FAN L, ZHANG X R, WU Y D, et al. A sort-last architecture based parallel volume visualization algorithm for unstructured grid[J]. Big Data Research, 2021, 7(4): 117-129.

1 引言

体可视化是科学可视化中的重要研究方向,被广泛应用于医学影像、计算流体力学(computational fluid dynamics, CFD)、气象气候学等领域,体绘制算法是体可视化领域的重要研究内容。体绘制直接从三维的体数据中生成半透明的二维屏幕图像,空间表现能力强,因此,也被称为直接体绘制。科学家可以通过体绘制结果看穿数据体,探索数据内结构,获取有用信息。与面绘制相比,体绘制结果多了一个维度的信息,因此,可视化结果不仅更加精确,而且更能体现数据本身的特点。

体数据是体绘制算法的输入,分为结构网格和非结构网格。其中,结构网格具有规则的几何结构和拓扑结构,相反,非结构网格的几何结构和拓扑结构不规则,网格单元可以是任意形状。在三维数据场变化剧烈的区域可以用体积较小的网格单元表示,变化比较平滑的区域则使用体积较的网格单元表示,对于同一个数据场,可以用更少的非结构网格单元进行描述,有效节了存储空间。因此,非结构网格数据在科学计算与仿真领域的应用更加广泛。然而,由于非结构网格的几何结构和拓扑结构不规则,相对于结构网格,非结构网格的体绘制算法设计比较困难,涉及复杂的计算与庞的存储量。目前,非结构网格体绘制算法可以通过基于图像空间、基于对象空间和两者混合的技术实现。光线投射算法是十分具代表性的基于图像空间实现的体绘制技术。然而,对于非结构网格数据而言,无法根据几何结构和拓扑结构计算光线离开当前网格单元后即将进入的下一个网格单元,采用或全搜索下一个网格单元需要极的开销。Weiler M等人将沿着光线的采样点限制在单元面上,同时,采用预积分技术,将预积分的颜色和透明度值存入一张纹理图,并且将光线进入和离开单元点的标量值以及光线在网格单元内穿过的长度作为参数查询纹理图。此外,他们还精心设计了纹理数据结构,将体数据以纹理的形式载入显存,通过硬件技术加速算法。投影四面体算法是十分著名的基于对象空间实现的体绘制技术,首先,计算所有网格单元的可见性顺序;然后,根据可见性顺序将四面体单元在图像平面上的投影拆分为一系列三角形;最后,将三角形的顶点数据载入显存,通过GPU光栅化并合成最终结果。此外,Wylie B等人利用可编程的顶点着色器,设计了基于硬件加速的投影四面体算法,不需要额外的数据结构与数据预处理。HAVS (hardware-assisted visibility svrting)算法是最具代表性的基于图像/对象空间混合技术实现的非结构网格体绘制算法,在对象空间,对网格单元执行排序,并生成一个近似有序的网格单元片段列表;在图像空间,使用固定深度的排序网络对片段列表执行升序排序。其中,对象空间计算在CPU上进行,图像空间计算在GPU上进行。HAVS算法在简化CPU的处理运算的同时,将量排序计算交给GPU执行,进一步提升了算法性能。

由于各种科学计算与模拟仿真的精度越来越高,非结构网格数据规模呈爆炸式增长。体绘制包含数据重构、传递函数映射和绘制合成,涉及量的浮点运算,串行的算法难以满足需求。随着技术发展,量的并行计算软件和硬件出现,这为科学研究提供了更加强劲的计算能力,基于进程并行的体绘制算法研究成为规模非结构网格数据体可视化设计的趋势。Fogal T等人实现了基于集群的并行体可视化算法,使用KD树组织数据,进程之间采用信息传递接口(massage passing interface,MPI)通信,可高效绘制规模标量场数据集。Chen J H等人设计了分布式的并行体绘制算法,并对规模燃烧模拟数据的多个变量同时进行体绘制,允许用户实时交互体绘制结果。本文在现有研究成果的基础上,研究并实现了一种基于sort-last架构的非结构网格并行体绘制算法,并集成到国产自主可控科学可视化软件拓视(TopViz)中,主要贡献如下。

● 实现了基于KD树的并行体数据分割算法和可见性排序算法。首先,使用预处理程序确保每个进程读取的网格数量致相等;其次,以每个进程上的数据为输入,构造KD树;然后,将所有进程上的KD树合成为全KD树;最后,通过相机位置和分割平面计算全KD树叶子节点的可见性顺序。

● 实现了基于二叉树的并行图像合成算法。根据可见性顺序对所有进程上的图片两两配对并合成中间结果,不断重复配对与合成的过程,直到合成最终结果。

● 实现了两层LOD交互模型。首先,同步所有进程的数据边界信息;然后,在主进程上渲染数据边框模型。当处于交互状态时,渲染边框模型;停止交互时,渲染体绘制模型。

● 设计实验验证,并分析了算法性能。实验结果显示,本文的并行体数据分割算法具有良好的性能和负载均衡能力;并行体绘制算法可以被很好地应用于规模非结构网格数据体可视化,且交互时延在毫秒级别,满足实时交互的需求。

2 基于进程并行的非结构网格体绘制算法

非结构网格数据的体绘制算法涉及庞的计算量与存储量,串行算法效率较低,难以满足规模非结构网格数据体可视化实时交互的需求。因此,基于进程并行的体绘制算法是规模非结构网格数据体可视化十分有效的解决方案。本节将详细描述基于进程并行的非结构网格体绘制算法流程,算法包含数据分割、绘制和图片合成3个阶段,如图1所示。在数据分割阶段,首先,每个进程读取数量致相等的网格单元;然后,将每个进程上的体数据作为输入,构造KD树;最后,通过MPI将所有进程上的KD树合成为全KD树。在绘制阶段,每个进程使用独立的体绘制管线计算图像。在图片合成阶段,按照可见性顺序配对所有进程上的图片,并合成中间结果,不断重复配对和合成过程,直到合成最终结果。

图1 基于进程并行的非结构网格体绘制算法流程

2.1 数据分割

并行体绘制算法的第一步是将规模的网格数据拆分为若干个规模较小的网格。由于绘制过程的性能取决于绘制最慢的进程效率,因此,负载均衡是数据分割算法设计首要考虑的问题。本节将详细描述基于KD树的并行体数据分割算法的设计,为了确保负载均衡,最终分割结果中KD树叶子节点之间的数据量应基本相同。

2.1.1 KD树构造

KD树是一种分割K维空间的高效数据结构,属于二叉空间分割树的特殊情况,被广泛应用于各种数据分割和搜索程序中。其中,KD树的叶子节点表示K维空间中的点,非叶子节点表示将K维空间一分为二的超平面或超立方体。如果要将KD树算法应用于体数据分割,则需要赋予节点新的意义,其中,叶子节点表示非结构网格单元集合,非叶子节点则表示将空间一分为二的超平面。体数据是三维的,因此,使用与坐标轴平行的分割平面可以最限度地简化数据分割的运算过程。

算法1给出了KD树的构造过程。对于一个非叶子节点,首先,计算所有网格单元的质心坐标;其次,计算分割平面的方向,为了确保与分割平面相交的网格单元最少和避免数据分割后被拉长,选择数据边界跨度最长的坐标轴方向作为分割平面方向;然后,计算所有网格单元沿着分割平面方向的质心坐标中位数,为了确保左右子树的网格单元数量致相等,将质心坐标的中位数作为分割平面的位置坐标;最后,沿着分割平面将数据一分为二,对于与分割平面相交的网格单元,复制一份并划分到分割平面两侧。KD树构造是一个递归的过程,不断拆分非叶子节点,直到生成指定数目的叶子节点。

算法1 KD树构造

输入:非结构网格数据

输出:KD树根节点指针

步骤1:计算所有网格单元的质心坐标;

步骤2:根据网格数据边界值计算分割平面方向;

步骤3:计算质心坐标的中位数,将中位数质心坐标作为分割面的位置坐标;

步骤4:沿着分割面将网格数据一分为二;

步骤5:递归执行步骤2~4,直到生成指定数目的叶子节点。

通常,一个规模的网格数据在超级计算机上使用多个并行程序模拟计算生成,以多块(multi-block)数据的形式写入磁盘,最好也用并行读取的方法处理。虽然单块数据的规模不,但是单块数据之间的网格规模可能差距很。因此,本文首先使用一个预处理程序统计规模网格数据中每一块数据的网格单元数量,并保存到一个列表中;然后,根据列表网格数量信息计算每个进程应读取的单块数据编号,确保每个进程读取的网格单元数量致相等;最后,每个进程根据单块数据的编号并行读取体数据。

在每个进程上使用KD树算法分割体数据,这个过程被称为KD树的构造。预处理过程确保了每个进程上读取的网格单元数量致相等,因此,KD树构造算法是负载均衡的。每个进程上的KD树具有相同的非叶子节点,即分割平面相同,所有的树节点同步生成。因此,首先构造一个非叶子节点,同步所有进程上该节点对应的体数据边界信息,根据边界范围选择分割平面的方向;然后,并行计算所有进程上该节点对应的体数据网格单元沿着分割平面方向质心坐标的中位数,将中位数的坐标作为分割平面的位置坐标;最后,沿着分割平面将该节点一分为二。递归构造每一个非叶子节点,直到生成指定数目的叶子节点。为了最化地确保KD树平衡,以及便于后续设计并行图像合成算法,本文构造的KD树均为满二叉树,即叶子节点数量为2的正整数幂。如果叶子节点数量为N,则KD树的高度为lbN。

2.1.2 全KD树合成

全KD树与KD树具有相同的非叶子节点,不同的是,每个进程只存储全KD树中一个叶子节点的数据,这些叶子节点的数据为最终分割结果。进程之间的KD树对应的叶子节点数据交换过程被称为全KD树的合成。数据分割需要保证每个进程上都有数据,因此,进程数量应该等于KD树的叶子节点数量,即2的正整数幂。

对于KD树,只有其中一个叶子节点的数据属于当前进程,因此,需要进行N对N的数据交换操作。首先,给所有KD树的叶子节点编号(从0开始);然后,通过MPI,根据进程秩将属于其他进程的叶子节点数据发送至对应的进程;最后,将每个进程上的数据合并为完整的网格。2.1.3 基于KD树的可见性排序算法

对于与分割平面相交的网格单元(也被称为ghost单元),本文采取的处理方式是复制一份,然后将其划分到分割平面两侧。该处理方式可以确保分割平面两侧的网格数据具有严格的可见性顺序,不存在相互遮挡的情况。其中,可见性顺序用于描述空间中两个对象的遮挡情况,在给定视线方向的情况下,如果对象a遮挡了对象b,则可见性顺序Oab;反之,则可见性顺序Oa>Ob。对于KD树的非叶子节点的左右孩子节点,以分割平面为界,定义与相机位置处于同一侧的孩子节点为近点,另一侧为远点。近点的可见性顺序明显小于远点的可见性顺序,因此,通过相机位置和分割平面可以计算KD树中所有叶子节点的可见性顺序。

算法2给出了基于KD树的可见性顺序计算过程。将全KD树作为输入,从根节点开始,根据相机位置确定近点与远点;按照“先近点,后远点”的顺序计算每个非叶子节点的可见性顺序;如果遇到叶子节点,则将叶子节点对应的进程秩添加到可见性顺序列表。递归处理每个节点,直到所有叶子节点的可见性顺序计算完毕。

算法2 可见性顺序计算

输入:全KD树

输出:可见性顺序列表list

步骤1:如果当前节点为叶子节点,将该节点的进程秩添加到list;

步骤2:如果当前节点为非叶子节点,根据相机位置确定近点与远点:

· 计算近点可见性顺序;

· 计算远点可见性顺序;

步骤3:递归执行步骤1~2,直到所有叶子节点的可见性顺序计算完毕。

2.2 绘制

并行体绘制算法的第二个阶段(绘制)以第2.1节中KD树算法的分割结果为输入,在每个进程上执行独立的可视化管线,从而计算体绘制图像。本文采用体绘制管线技术,如图2所示,整个体绘制管线分为数据处理、体绘制算法、体绘制参数和渲染4个分,其中,管线中每个阶段的输出作为下一个阶段的输入。在数据处理分,使用Reader加载KD树算法的分割结果,如果需要对体数据进行裁剪和四面体化等操作,可以通过Filter完成;在体绘制算法分,使用高效的线程并行投影四面体算法计算图元信息;在体绘制参数分,建立体数据标量值与颜色/透明度之间的映射关系;在最后的渲染分,使用OpenGL API函数将体绘制图元数据与传递函数参数载入显存,通过GPU光栅化并合成最终的体绘制图像。体绘制管线技术具有高度的可扩展性与灵活性,管线每个分只提供通用的接口,实现体绘制管线则需要提供所有通用接口的具体实现。如果要研究不同的体绘制算法性能,只需要提供新算法的Mapper即可。

图2 体绘制管线

2.3 图片合成

如图3所示,基于sort-last架构的并行体绘制算法最后需要将所有进程上的体绘制图片合成最终结果。由于体绘制结果是半透明的二维图片,因此,需要根据可见性顺序按照从前向后的顺序进行合成。可以使用over运算将两张体绘制图片合成一张图片,其中,over运算不满足交换律,但是满足结合律。因此,在不改变合成顺序的前提下,可以对所有进程上的体绘制图片任意分组,采取分组合成策略。over运算的性质为并行图像合成算法设计提供了条件。

图3 图片合成

本文采用基于二叉树的图像合成算法,首先,根据第2.1.3节中的方法计算所有进程体绘制图片的可见性顺序列表;然后,根据可见性顺序列表对体绘制图片进行两两配对;最后,通过MPI将图片发送至其配对进程,并使用over运算合成中间结果。不断重复配对与合成的过程,直到所有中间结果都被合成为最终图片。与串行的图像合成算法相比,虽然基于树的合成算法增加了通信次数和合成次数,但是它将时间重叠利用,减少了资源闲置,算法并行粒度更高,效率优势更明显。

以4个进程为例,二叉树图像合成算法流程如图4所示。假设4个进程上的体绘制图片可见性顺序为O

图4 二叉树图像合成算法过程(4个进程)

2.4 两层LOD模型

体绘制算法涉及量的距离运算、求交运算和插值运算,同时,图片合成与进程之间的通信开销不可忽略。对于规模非结构网格数据体可视化,难以满足实时交互的需求,因此,本文采用层次细节(level of detail,LOD)技术优化用户交互体验。如图5所示,一共设计了两层LOD模型,首先,所有从进程将数据边界信息发送至主进程(0号进程),在主进程上同步边界信息,并渲染一个刚好能包围住体数据的边框模型。当处于交互状态(按下鼠标)时,渲染边框模型;当交互状态结束(释放鼠标)时,开始渲染体绘制模型;当体绘制模型渲染完成后,替换边框模型。使用两层LOD模型,用户在交互时可以根据边框模型判断当前体数据的位置和角度,同时,边框模型的渲染在主进程上进行,只需要极小的开销,并且不需要图片合成,因此,可以满足实时交互的需求。

图5 两层LOD模型

3 实验分析

为了研究算法的性能,本文设计了节点内并行实验和跨节点并行实验。节点内并行实验配置为高性能Intel服务器,其中,CPU为4个20核心的Intel(R) Xeon(R) E5-2698 v4@ 2.20 GHz,内存小为500 GB。跨节点并行实验配置为国产高性能服务器,其中, CPU为飞腾处理器,内存小为120 GB。所有的算法均使用C/C++语言实现,并行框架采用MPI,编译器的版本为gcc/g++ 8.3,操作系统为64位Ubuntu 16.04。所有的算法执行时间通过C语言API函数ftime()获取。同时,为了避免偶然性,所有的结果均通过多次重复实验计算平均值得出。

3.1 数据分割算法性能

为了研究数据分割算法性能,采用节点内并行实验配置,从数据分割开销、负载均衡测试和VTK(visualization toolkit)算法对比3个方面设计实验。首先,在不同进程数量下研究数据分割后的网格数量增加情况;然后,对数据分割算法的负载均衡能力进行测试;最后,对比了本文算法与VTK算法的性能。

3.1.1 数据分割开销

在构造KD树时,与分割平面相交的单元会被复制一份,并被划分到分割平面的两侧。因此,数据分割后,网格单元总数会增加。表1给出了使用不同数量的进程分割数据后的网格规模。与预期相符,数据分割后,网格规模增;并且,随着进程数量增加,更多的网格单元与分割平面相交,产生了更多的ghost单元,因此,网格规模随之增。ghost单元是数据分割开销的重要分,直接影响后续并行体绘制算法的效率。

3.1.2 负载均衡测试

一个好的数据分割算法应该具有良好的负载均衡能力。本节将最多网格进程与最少网格进程的网格单元数量差值作为衡量标准,该值越小,说明算法负载均衡能力越好。表2给出了不同进程数量下的网格单元数量差值,结果显示,所有的差值均在4 000以内,全KD树叶子节点之间的网格单元数量致相等,本文数据分割算法的负载均衡能力较好。

3.1.3 VTK算法对比

为了研究本文中的数据分割算法性能,将开源可视化框架VTK中的D3(vtkDistributedDataFilter)类作为对比,在不同进程数量下进行实验,结果如图6所示。对于VTK算法,当进程数量在2个和8个之间时,算法执行时间有所下降;但是,当进程数量超过8个时,算法执行时间反而随着进程数量的增加而增加。本文算法则是随着进程数量的增加,执行时间降低。出现该结果的原因是,VTK算法以块数据为单位并行读取数据,为了确保每个进程上的网格数量致相等,需要在数据读取完毕后进行一次同步操作;而本文算法使用预处理程序统计每个数据块的网格数量,确保了每个进程上读取的网格数量致相等,不需要同步。随着进程数量增加,VTK算法的同步操作需要更的通信开销,算法执行时间因此增加;与VTK算法相比,本文算法少一次数据同步开销,随着进程数量增加,KD树构造时间下降,算法执行时间随之下降,性能优势更加明显。

图6 数据分割算法性能对比

3.2 并行体绘制算法性能

为了研究本文的并行体绘制算法性能,首先,使用节点内并行实验配置,测试算法在不同进程数量下的算法执行时间和加速比;然后,使用跨节点并行实验配置,测试算法在规模网格体绘制下的性能,并结合实验数据分析了算法的效率和瓶颈。

3.2.1 算法性能

由于本文使用的实验数据均是曲面网格,经过四面体化处理后,网格规模将会幅度增加,分别为DATASET1(113 920 117)、DATASET2(46 412 858)、DATASET3 (25 984 608)。所有的并行体绘制图片分辨率均为1 000×800。表3给出了本文算法在不同进程数量下的交互时间和绘制时间,结果显示,随着进程数量增加,算法执行时间缩短,使用64个进程并行绘制时获得最佳性能。由于使用了两层LOD交互模型,交互开销非常低,均为毫秒级别,并且基本不受进程数量影响,可以满足实时交互需求。其中,在64个进程下,飞行器数据DATASET3周围的流场体绘制结果如图7所示。

图7 飞行器DATASET3周围的流场体绘制结果(64个进程)

3.2.2 加速比

为了进一步研究算法性能和瓶颈,统计了本文算法相对于串行算法的加速比。如图8所示,当进程数量在8个以内时,增加进程数量,算法性能提升不明显;当进程数量于8个时,算法加速比开始明显提升;当进程数量为64个时,获得最平均加速比,为37.6。这是因为,进程数量在8个以内时,单个进程需要处理的网格单元数量较,绘制阶段占据整个算法执行时间的绝分;进程数量于8个后,当进程数量翻番时,单个进程需要处理的网格数量减半,绘制阶段占据整个算法执行时间的比例明显下降,加速比随之明显提升。

图8 并行体绘制算法加速比

3.2.3 跨节点性能

由于单个计算节点性能有限,为了研究规模网格体绘制性能,本节实验采用了32个计算节点。其中,使用的3个非结构网格数据规模为10亿级别,分别为yA31(12.1亿)、DATASET4(29.5亿)、DATASET5(46.5亿),所有的并行体绘制图片分辨率均为1 000×800。表4给出了实验结果,其中,“-”表示进程数量太少,不足以计算体绘制结果。根据实验结果可知,在不同进程数量下,交互开销基本一致,并且都在毫秒级别,满足了实时交互需求。其中,行星yA31撞击地球海面模拟数据的并行体绘制结果如图9所示。

图9 行星yA31撞击地球海面模拟数据的并行体绘制结果

4 结束语

本文提出了一种基于sort-last架构的非结构网格并行体绘制算法。整个算法分为数据分割、绘制和图片合成3个阶段。在数据分割阶段,设计了基于KD树的并行体数据分割算法,首先,使用预处理程序确保每个进程读取的网格数量致相等;然后,在每个进程上同步构造KD树;最后,使用MPI API函数进行数据交换并合成全KD树。此外,还根据相机位置和分割平面计算了全KD树叶子节点的可见性顺序。在绘制阶段,在每个进程上建立可视化管线,使用高效的线程并行投影四面体算法计算体绘制图片。在图片合成阶段,设计了基于二叉树的图像合成算法,根据可见性顺序对体绘制图片分组合成。为了提升用户的交互体验,本文还设计了两层LOD模型,处于交互状态时,渲染开销较低的边框模型;停止交互后,再渲染开销较的体绘制模型。

在Intel服务器和国产服务器上 测试了本文的数据分割算法和并行体绘制算法。对于数据分割算法,首先,研究了不同进程数量下的网格规模增加情况;然后,测试了数据分割算法的负载均衡能力;最后,对比了本文算法与VTK算法的性能。实验结果显示,本文算法在不同进程数量下可保持良好的负载均衡能力;同时,与VTK算法相比,本文算法更具性能优势。对于并行体绘制算法,设计了节点内并行实验和跨节点并行实验,首先,测试了在节点内并行实验配置下算法的执行时间,并计算了本文算法相对于串行体绘制算法的加速比;然后,测试了在32个计算节点并行实验配置下算法的执行时间。实验结果显示,本文算法在64个进程下可以获得的最平均加速比为37.6,由于采用了两层LOD模型,交互时间均控制在毫秒级别,本文算法可以很好地应用于规模非结构网格体可视化,满足实时交互的需求。

本文实现了基于sort-last架构的并行体可视化原型系统,但是,还存在一些需要继续优化的地方。在数据分割算法中,并行计算分割平面的方向和位置是一个耗时的过程,下一阶段的研究工作可以考虑保存这些KD树分割平面信息,避免同一个数据被再次分割时重复计算分割平面。在图片合成算法中,使用over运算逐像素串行地合成两张图片,下一阶段的研究工作可以考虑使用线程并行的方法优化over运算。在用户交互体验优化方面,由于体绘制模型渲染需要极的开销,下一阶段的研究工作可以考虑过滤无效的鼠标事件,避免造成无效的体绘制更新。

作者简介

范良(1995-),男,西南科技学计算机科学与技术学院硕士生,主要研究方向为科学可视化与并行计算。

张晓蓉(1976-),女,西南科技学计算机科学与技术学院讲师,主要研究方向为数据可视化、可视分析与人机交互。

吴亚东(1979-),男,博士,四川轻化工学计算机科学与工程学院教授、博士生导师,主要研究方向为科学可视化、信息可视化和可视分析。

陈呈(1988-),男,博士,空气动力研究与发展中心计算空气动力研究所高级工程师,主要研究方向为并行计算。

王昉(1976-),男,博士,空气动力研究与发展中心计算空气动力研究所高级工程师,主要研究方向为科学可视化。

联系我们:

数据期刊

《数据(Big Data Research,BDR)》双月刊是由工业和信息化主管,邮电出版社主办,计算机学会数据专员会学术指导,北京信通传媒有限责任公司出版的期刊,已成功入选科技核心期刊、计算机学会会刊、计算机学会推荐中文科技期刊,并被评为2018年、2019年哲学社会科学文献中心学术期刊数据库“综合性人文社会科学”学科最受欢迎期刊。

关注《数据》期刊微信公众号,获取更多内容

富士相机屏幕对焦变暗怎么回事

微软笔记本怎么调启动顺序

华为平板matepad电脑模式怎么取消

热水器为什么是圆通的

以往的电子照片怎么储存

拍照地图什么关闭

和平精英摄像机视角怎么弄

网站排名seo教程有哪些

标签:可视化 算法 架构