发布日期:2026-04-12 浏览次数:
本发明公开一种面向异构融合众核架构的数据自动布局方法和装置,包括以下步骤:S1、编译器通过静态分析组件确定可以分布布局到计算核心阵列片上高速缓存的数组;S2、编译器使用代码插装组件对布局到片上高速缓存的数组的有关信息进行注册;S3、编译器根据动态分析组件获取的注册信息和循环索引变量,再根据关系表达式计算得到最佳tile值,并将获得的最佳tile值更新到内部数据库中;S4、编译器根据最佳tile值,对循环进行重新分块划分,并重新生成可执行的众核加速目标码;S5、执行编译生成的可执行的众核加速目标码
(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 CN 112948319 A (43)申请公布日 2021.06.11 (21)申请号 0.X (22)申请日 2019.12.10 (71)申请人 无锡江南计算技术研究所 地址 214083 江苏省无锡市滨湖区山水东 路699号 (72)发明人 张立博顾龙姜小成孙俊 尤洪涛毛兴权 (74)专利代理机构 苏州创元专利商标事务所有 限公司 32103 代理人 王健 (51)Int.Cl. G06F 15/177(2006.01) G06F 8/30(2018.01) G06F 8/41(2018.01) 权利要求书2页 说明书6页 附图2页 (54)发明名称 面向异构融合众核架构的数据自动布局方 法和装置 (57)摘要 本发明公开一种面向异构融合众核架构的 数据自动布局方法和装置,包括以下步骤:S1、编 译器通过静态分析组件确定可以分布布局到计 算核心阵列片上高速缓存的数组;S2、编译器使 用代码插装组件对布局到片上高速缓存的数组 的有关信息进行注册;S3、编译器根据动态分析 组件获取的注册信息和循环索引变量,再根据关 系表达式计算得到最佳tile值,并将获得的最佳 tile值更新到内部数据库中;S4、编译器根据最 佳tile值,对循环进行重新分块划分,并重新生 成可执行的众核加速目标码;S5、执行编译生成 A 的可执行的众核加速目标码,使数据布局达到最 9 优。本发明解决了用户需要对同一程序的不同规 1 3 8 模的算例手动调整tile值来控制关键数据布局 4 9 2 的问题,不需要用户手动干预,实现数据的自动 1 1 N 布局。 C CN 112948319 A 权利要求书 1/2页 1.一种面向异构融合众核架构的数据自动布局装置,其特征在于:包括以下组件: 配置于编译器上的静态分析组件,用于收集加速区域内所有的数组访问,并分析其数 据访问形式,如果数组的所有访问点的访问形式都满足A[a*i+b],其中A是数组名,a、b是常 数、i是并行循环变量,则该数组属于需要布局到片上高速缓存的关键数据,可分布布局到 片上高速缓存; 配置于编译器上的代码插装组件,用于将需要布局到片上高速缓存的数组信息、循环 上下界信息以及tile值信息的注册语句插装到众核程序的控制端代码,获得注册信息,以 供动态分析组件使用,其中,数组信息包括原数组维度信息和每维度所对应的循环索引变 量,众核程序由控制端代码和设备端代码组成; 配置于编译器上的动态分析组件,用于根据获取的注册信息和循环索引变量,获取数 组的动态维度信息,再通过运行时的片上高速缓存用量分析函数,获得片上高速缓存使用 量与tile值的关系表达式,在运行时根据关系表达式计算得到最佳tile值,并将获得的最 佳tile值更新到内部数据库中,使数据布局达到最优; 假定该核心段循环为n层嵌套的循环loop (i=1,n),其循环分块粒度tile值分别为t i i (i=1,n),各层循环迭代总次数分别为L (i=1,n),需要分布布局的数组有m个,分别为A (j i j =1,m),那么则有:循环分布数组的总大小 即为片上高速缓存使用 量与tile值的关系表达式,根据此表达式,通过编译器求解获得最佳tile值; 配置于编译器上的目标码自生成组件,用于根据获取自内部数据库的更新后的最佳 tile值,对循环进行分块划分,生成众核加速目标码,即可运行于所述异构融合众核处理器 上的可执行目标码; 独立于编译器的内部数据库组件,用于以特定的数据存储规范,存放编译器所获得的 编译优化信息,包括静态分析组件得到的关键数据的数据信息和动态分析组件得到的tile 值信息,并提供给编译器查询使用。 2.根据权利要求1所述的面向异构融合众核架构的数据自动布局装置,其特征在于:如 果同一数组变量的不同访问点其地址索引符合“ai+b”的形式(a、b是常量,i是循环索引变 量),则认为该数组变量可以布局到片上高速缓存。 3.一种基于权利要求1或2所述的面向异构融合众核架构的数据自动布局装置的数据 自动布局方法,其特征在于:包括以下步骤: S1、编译器通过静态分析组件确定可以分布布局到计算核心阵列片上高速缓存的数 组; S2、编译器根据静态分析组件的静态分析的结果,使用代码插装组件对布局到片上高 速缓存的数组的有关信息,包括原维度信息、各个维度对应的循环索引变量,以及循环的上 下界和tile值进行注册; S3、编译器运行时,根据动态分析组件获取的注册信息和循环索引变量,获取数组的动 态维度信息,再通过运行时的片上高速缓存用量分析函数,获得片上高速缓存使用量与 tile值的关系表达式,运行时根据关系表达式计算得到最佳tile值,并将获得的最佳tile 值更新到内部数据库中; 2 2 CN 112948319 A 权利要求书 2/2页 S4、编译器根据获取自内部数据库的最佳tile值,通过对中端的AST语法树操作对循环 进行重新分块划分,并重新生成可执行的众核加速目标码; S5、用户执行编译生成的可执行的众核加速目标码,使数据布局达到最优。 3 3 CN 112948319 A 说明书 1/6页 面向异构融合众核架构的数据自动布局方法和装置 技术领域 [0001] 本发明涉及一种面向异构融合众核架构的数据自动布局方法和装置,属于计算机 技术领域。 背景技术 [0002] 异构融合架构处理器通常是由控制核心单元和运算核心阵列组成,控制核心负责 程序的初始化、I/O、通信以及运算核心阵列的任务分配等工作,运算核心通常专职负责程 序热点区域的并行加速工作。每个运算核心通常配备有一块片上高速缓存SPM,它的访问速 度快,延迟低,加速核心段的关键数据只有通过DMA(Direct Memory Access)布局到片上高 速缓存才能达到最佳加速效果。 [0003] 异构众核处理器架构下,片上高速局存空间的容量是有限的,而实际应用课题的 数据规模会随着解算的数据不同会发生变化,以航空器外形模拟设计应用为例,程序中有 同样的数组A[x][y][z],假设在计算航空器1时,可以保证A数组的低两维数据全部放到片 上高速局存内,根据这种情况对程序进行了优化;当计算航空器2时,x、y、z的数值变大了, 使得数组A的低两维无法全部存放到片上高速局存中,通常情况下,需要用户结合数组和循 环大小,手动调整tile值,以调整整个程序的数据布局,较为繁琐。 发明内容 [0004] 本发明的目的是提供一种面向异构融合众核架构的数据自动布局方法和装置,该 面向异构融合众核架构的数据自动布局方法和装置可以解决用户需要对同一程序的不同 规模的算例手动调整tile值来控制关键数据布局的问题,不需要用户的手动干预,实现数 据的自动布局。 [0005] 为达到上述目的,本发明采用的技术方案是:一种面向异构融合众核架构的数据 自动布局装置,包括以下组件: [0006] 配置于编译器上的静态分析组件,用于收集加速区域内所有的数组访问,并分析 其数据访问形式,如果数组的所有访问点的访问形式都满足A[a*i+b],其中A是数组名,a、b 是常数、i是并行循环变量,则该数组属于需要布局到片上高速缓存的关键数PG电子官方网据,可分布布 局到片上高速缓存; [0007] 配置于编译器上的代码插装组件,用于将需要布局到片上高速缓存的数组信息、 循环上下界信息以及tile值信息的注册语句插装到众核程序的控制端代码,获得注册信 息,以供动态分析组件使用,其中,数组信息包括原数组维度信息和每维度所对应的循环索 引变量,众核程序由控制端代码和设备端代码组成; [0008] 配置于编译器上的动态分析组件,用于根据获取的注册信息和循环索引变量,获 取数组的动态维度信息,再通过运行时的片上高速缓存用量分析函数,获得片上高速缓存 使用量与tile值的关系表达式,在运行时根据关系表达式计算得到最佳tile值,并将获得 的最佳tile值更新到内部数据库中,使数据布局达到最优; 4 4 CN 112948319 A 说明书 2/6页 [0009] 假定该核心段循环为n层嵌套的循环loop (i=1,n),其循环分块粒度tile值分别 i 为t (i=1,n),各层循环迭代总次数分别为L (i=1,n),需要分布布局的数组有m个,分别为 i i A (j=1,m),那么则有:循环分布数组的总大小 j [0010] 即为片上高速缓存 使用量与tile值的关系表达式,根据此表达式,通过编译器求解获得最佳tile值; [0011] 配置于编译器上的目标码自生成组件,用于根据获取自内部数据库的更新后的最 佳tile值,对循环进行分块划分,生成众核加速目标码,即可运行于所述异构融合众核处理 器上的可执行目标码; [0012] 独立于编译器的内部数据库组件,用于以特定的数据存储规范,存放编译器所获 得的编译优化信息,包括静态分析组件得到的关键数据的数据信息和动态分析组件得到的 tile值信息,并提供给编译器查询使用。 [0013] 上述技术方案中进一步改进的方案如下: [0014] 1.上述方案中,如果同一数组变量的不同访问点其地址索引符合“ai+b”的形式 (a、b是常量,i是循环索引变量),则认为该数组变量可以布局到片上高速缓存。 [0015] 基于上述面向异构融合众核架构的数据自动布局装置,本发明还提供了一种数据 自动布局方法,包括以下步骤: [0016] S1、编译器通过静态分析组件确定可以分布布局到计算核心阵列片上高速缓存的 数组; [0017] S2、编译器根据静态分析组件的静态分析的结果,使用代码插装组件对布局到片 上高速缓存的数组的有关信息,包括原维度信息、各个维度对应的循环索引变量,以及循环 的上下界和tile值进行注册; [0018] S3、编译器运行时,根据动态分析组件获取的注册信息和循环索引变量,获取数组 的动态维度信息,再通过运行时的片上高速缓存用量分析函数,获得片上高速缓存使用量 与tile值的关系表达式,运行时根据关系表达式计算得到最佳tile值,并将获得的最佳 tile值更新到内部数据库中; [0019] S4、编译器根据获取自内部数据库的最佳tile值,通过对中端的AST语法树操作对 循环进行重新分块划分,并重新生成可执行的众核加速目标码; [0020] S5、用户执行编译生成的可执行的众核加速目标码,使数据布局达到最优。 [0021] 由于上述技术方案的运用,本发明与现有技术相比具有下列优点: [0022] 本发明面向异构融合众核架构的数据自动布局方法和装置,其可以解决用户需要 对同一程序的不同规模的算例手动调整tile值来控制关键数据布局的问题,还可以解决需 要布局哪些关键数据的问题,对用户透明,不需要用户的手动干预,通过编译器动静结合的 信息采集和分析,实现数据的自动布局。 附图说明 [0023] 附图1为本发明面向异构融合众核架构的数据自动布局方法原理示意图; [0024] 附图2为本发明面向异构融合众核架构的数据自动布局方法流程图。 5 5 CN 112948319 A 说明书 3/6页 具体实施方式 [0025] 实施例:一种面向异构融合众核架构的数据自动布局装置,包括以下组件: [0026] 配置于编译器上的静态分析组件,用于收集加速区域内所有的数组访问,并分析 其数据访问形式,如果数组的所有访问点的访问形式都满足A[a*i+b],其中A是数组名,a、b 是常数、i是并行循环变量,则该数组属于需要布局到片上高速缓存的关键数据,可分布布 局到片上高速缓存; [0027] 静态分析组件是编译器静态分析的一个功能模块,它主要是对加速区域内所访问 的数组变量进行分析,首先收集加速区域内所有的数组访问,分析其数据访问形式,如果所 有访问点的访问形式都满足A[a*i+b]的形式(A是数组名,a、b是常数、i是并行循环变量), 那么该数组就属于需要布局到片上高速缓存的关键数据之一,可以分布布局到片上高速缓 存,所谓分布布局就是编译器根据并行循环划分策略,只把当前运算核心计算所需的A数据 片段拷入到片上高速缓存,这样可以极大地缓解片上高速缓存容量紧张的问题; [0028] 配置于编译器上的代码插装组件,用于将需要布局到片上高速缓存的数组信息、 循环上下界信息以及tile值信息的注册语句插装到众核程序的控制端代码,获得注册信 息,以供动态分析组件使用,其中,数组信息包括原数组维度信息和每维度所对应的循环索 引变量,众核程序由控制端代码和设备端代码组成; [0029] 代码插装组件作用就是插装拷贝到片上高速缓存的数组信息(包括原数组维度信 息、每维所对应的循环索引变量)以及循环上下界及tile值的注册语句等,这些注册信息在 后续动态分析时需要用到; [0030] 以如下代码片段举例说明:经过静态分析组件分析,编译器分析出数组A即是需要 分布拷贝的关键数据,通过分析数组A的访问方式及声明语句,可得出A数组高维关联的循环 索引变量为i,低维关联的循环索引变量为j,同时可知道A数组的原维度为[1024][1024], 因此可将以上信息通过代码插装组件进行注册,示例代码片段如下: [0031] [0032] 配置于编译器上的动态分析组件,用于根据获取的注册信息和循环索引变量,获 取数组的动态维度信息,再通过运行时的片上高速缓存用量分析函数,获得片上高速缓存 使用量与tile值的关系表达式,在运行时根据关系表达式计算得到最佳tile值,并将获得 的最佳tile值更新到内部数据库中,使数据布局达到最优; [0033] 假定该核心段循环为n层嵌套的循环loop (i=1,n),其循环分块粒度tile值分别 i 为t (i=1,n),各层循环迭代总次数分别为L (i=1,n),需要分布布局的数组有m个,分别为 i i A (j=1,m),那么则有:循环分布数组的总大小 j 6 6 CN 112948319 A 说明书 4/6页 [0034] 即为片上高速缓存 使用量与tile值的关系表达式,根据此表达式,通过编译器求解获得最佳tile值; [0035] 编译器首先计算除可调数组外的其他变量占用的SPM空间fixup_space_size(这 部分空间是固定的,调整tile值并不会影响这部分空间的大小变换),然后可以得出loop_ array_size的最大值为MAX_SPM_SIZE–fixup_space_size(MAX_SPM_SIZE表示片上高速缓 存的最大可用空间),于是数据自动布局优化问题转变为在限定条件下(内层循环分块粒度 优先调增确保数据局部性)求t (i=1,n)最优解的问题; i [0036] 求解算法如下: [0037] step1.根据已知的循环分块值t (i=1,n)计算出loop_array_size; i [0038] step2.比较loop_array_size和MAX_SPM_SIZE-fixup_space_size的大小,如果 loop_array_sizeMAX_SPM_SIZE-fixup_space_size,那么执行step3;如果loop_array_ size=MAX_SPM_SIZE-fixup_space_size,那么执行step4; [0039] step3.按照循环的嵌套顺序,从外层循环开始查找第一个tile值不是1的循环,将 其tile值设置为1,然后执行step1; [0040] step4.计算MAX_SPM_SIZE-fixup_space_size和loop_array_size的比值,假设取 整后其值为α,如果α=1,找到最优解,结束,否则执行step5; [0041] step5.按照循环嵌套的顺序,从内层循环开始找到第一个显式设置tile值的循环 (其tile值为t),如果α×t 小于循环 的总迭代次数,那么将循环 的tile值设置为α× β β t ,如果α×t 大于循环 的总迭代次数,那么将该循环的tile值设置为0,表示该循环不进 β β 行循环分块,重新执行step1; [0042] 对于存在多个嵌套循环的情况,整个求解算法的思路与上面类似,不再详细阐述; [0043] 在求解出各层循环的tile值之后,我们认为已经找到了数据布局的最佳方式,编 译器可以根据此结果来生成并行加速代码; [0044] 配置于编译器上的目标码自生成组件,用于根据获取自内部数据库的更新后的最 佳tile值,对循环进行分块划分,生成众核加速目标码,即可运行于所述异构融合众核处理 器上的可执行目标码; [0045] tile值即是循环分块粒度,以上述示例代码片段说明:如果编译器经过动态分析 得到i层循环的tile值最优为4,那么编译器会将并行循环i分裂成两层循环如下: [0046] [0047] [0048] 编译器根据tile值来确立并行划分方式,外层循环用于任务在计算核心阵列上的 7 7 CN 112948319 A 说明书 5/6页 并行块划分(每块大小为tile值),内层循环即是块内的循环,这种并行循环方式即为典型 的循环块并行; [0049] 独立于编译器的内部数据库组件,用于以特定的数据存储规范,存放编译器所获 得的编译优化信息,包括静态分析组件得到的关键数据的数据信息和动态分析组件得到的 tile值信息,并提供给编译器查询使用。 [0050] 如果同一数组变量的不同访问点其地址索引符合“ai+b”的形式(a、b是常量,i是 循环索引变量),则认为该数组变量可以布局到片上高速缓存。 [0051] 一种基于上述面向异构融合众核架构的数据自动布局装置的数据自动布局方法, 包括以下步骤: [0052] S1、编译器通过静态分析组件确定可以分布布局到计算核心阵列片上高速缓存的 数组; [0053] S2、编译器根据静态分析组件的静态分析的结果,使用代码插装组件对布局到片 上高速缓存的数组的有关信息,包括原维度信息、各个维度对应的循环索引变量,以及循环 的上下界和tile值进行注册; [0054] S3、根据动态分析组件获取的注册信息和循环索引变量,获取数组的动态维度信 息,再通过运行时的片上高速缓存用量分析函数,获得片上高速缓存使用量与tile值的关 系表达式,在运行时根据关系表达式计算得到最佳tile值,并将获得的最佳tile值更新到 内部数据库中; [0055] S4、编译器根据获取自内部数据库的最佳tile值,通过对中端的AST语法书操作对 循环进行重新分块划分,并重新生成可执行的众核加速目标码; [0056] S5、执行编译生成的可执行的众核加速目标码,使数据布局达到最优。 [0057] 实施例进一步解释如下: [0058] 本发明主要由静态分析、代码插装、动态分析、目标码自生成和内部数据库等组件 组成。 [0059] 静态分析主要是编译器通过静态分析程序加速核心段的数据依赖和循环依赖关 系,确定需要布局到片上高速缓存的关键数据,减轻了用户工作量;如果同一数组变量的不 同访问点其地址索引符合“ai+b”的形式(a、b是常量,i是循环索引变量),则认为该数组变 量可以布局到片上高速缓存。该过程主要解决需要“布局什么数据”的问题。 [0060] 代码插装主要是编译器将静态分析阶段获取的需要布局到片上高速缓存的关键 数据进行数组维度信息与循环索引变量对应关系的注册,以供动态分析组件使用。 [0061] 动态分析主要是编译器通过代码插装阶段的信息注册工作使得程序在运行时可 以获取到数组的动态维度信息,之后再通过运行时的片上高速缓存用量分析函数得到片上 高速缓存使用量与tile值的关系表达式,根据该关系表达式可以在运行时计算得出最合适 的tile值,并将该tile值更新到内部数据库中,使得数据布局达到最优。该过程主要解决 “怎么布局数据”的问题。 [0062] 目标码自生成主要是编译器根据通过内部数据库读取到的最新tile值,重新对循 环进行分块划分,生成众核加速目标码。 [0063] 内部数据库主要是记录编译器静态分析得到的数据信息以及动态分析得到的 tile值信息,并提供给编译器查询使用,本构件也可以是具备同等功能的编译器内部数据 8 8 CN 112948319 A 说明书 6/6页 文件。 [0064] 为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释: [0065] 加速核心段:可以使用运算核心阵列并行加速的核心代码段。 [0066] tile:OpenACC语言中loop指示的一个子句,它控制循环的分块粒度。 [0067] 采用上述面向异构融合众核架构的数据自动布局方法和装置时,其可以解决用户 需要对同一程序的不同规模的算例手动调整tile值来控制关键数据布局的问题,还可以解 决需要布局哪些关键数据的问题,对用户透明,不需要用户的手动干预,通过编译器动静结 合的信息采集和分析,实现数据的自动布局。 [0068] 上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人 士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明 精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。 9 9 CN 112948319 A 说明书附图 1/2页 图1 10 10 CN 112948319 A 说明书附图 2/2页 图2 11 11
2、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问加。
3、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
4、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
2021年人力资源年终工作汇报 附2026年人力预算测算表 可直接套用.pptx
电视采访报道(中传大)中国大学MOOC慕课 章节测验期末考试答案.docx
农业区位因素及其变化课件2024-2025学年高一地理人教版(2019)必修二.pptx
原创力文档创建于2008年,本站为文档C2C交易模式,即用户上传的文档直接分享给其他用户(可下载、阅读),本站只是中间服务平台,本站所有文档下载所得的收益归上传人所有。原创力文档是网络服务平台方,若您的权利被侵害,请发链接和相关诉求至 电线) ,上传者