CN112579089A - 异构众核数据重用方法 - Google Patents
异构众核数据重用方法 Download PDFInfo
- Publication number
- CN112579089A CN112579089A CN201910927232.4A CN201910927232A CN112579089A CN 112579089 A CN112579089 A CN 112579089A CN 201910927232 A CN201910927232 A CN 201910927232A CN 112579089 A CN112579089 A CN 112579089A
- Authority
- CN
- China
- Prior art keywords
- dimension
- data
- iteration
- calculation
- stencil
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种异构众核数据重用方法,包括Stencil计算识别模块、块分段任务调度模块和数据重定向模块,所述Stencil计算识别模块完成Stencil计算的识别工作,所述块分段任务调度模块完成当进行stencil优化的维度为循环最外层时,改变任务划分调度的工作,所述数据重定向模块完成数据重用的工作;包括以下步骤:S1、假设同一数组的同一维度为i,由Stencil计算识别模块通过扫描计算中涉及的所有数组下标,识别出同一数组的同一维度是否存在i‑a/i+a这样的下标,且其他本维度下标都在[i‑a,i+a]范围之内,如果是,则认为该维度存在Stencil计算,将该维度作为stencil优化的备选维度,执行下一步。本发明减少主存与高速缓存间的数据传输量,提升程序性能。
Description
技术领域
本发明属于并行编译和优化技术领域,尤其涉及一种异构众核数据重用方法。
背景技术
异构融合架构处理器通常是由控制核心单元和运算核心阵列组成,控制核心负责程序的初始化、I/O、通信以及运算核心阵列的任务分配等工作,运算核心通常专职负责程序热点区域的并行加速工作。每个运算核心通常配备有一块片上高速缓存SPM,它的访问速度快,延迟低,加速核心段的关键数据只有通过DMA布局到片上高速缓存才能达到最佳加速效果。
Stencil计算是科学计算中的一种常用的计算模式,其特点是存在类似[i-1]、[i]、[i+1]这种访问,在这种计算当中,当前i迭代的部分数据在执行i+1迭代(记为i’)时,仍然能使用,[i]、[i+1]变成了[i’-1]、[i’],如图1所示。
如图2所示,一个典型Stencil计算,现有的编译器处理方法是:对于最外层循环的第i次迭代,AA[i-1][*]、AA[i][*]、AA[i+1][*]三组数据将会通过DMA布局到片上高速缓存以完成计算,到第i+1次迭代时,AA[i][*]、AA[i+1][*]、AA[i+2][*]三组数据将会被布局到片上高速缓存。
由上述可知,现有的处理Stencil计算数据布局的方法存在如下缺点:在处理第i+1次迭代时,事实上AA[i][*]、AA[i+1][*]两组数据已经存在于局存之中,并不需要再次通过DMA传输到高速缓存中来,同理如果Stencil计算的跨度更大,涉及到i-2/i-1/i/i+1/i+2,那么i的相邻两次迭代将会导致4组数据被重复传输到高速缓存中来,以此类推。
此外,异构众核结构中,运算核心的任务调度方式往往是按照核心号依次分配循环最外层的一个迭代,如图1中的程序,0号运算核心分配i=1的迭代,1号运算核心分配i=2的迭代,以此类推,如果总共有64个运算核心,那么0号运算核心处理的下一次迭代将是i=64,如图3所示。显然,这种形式的任务划分调度方法不利于stencil重用优化的进行,因为同一个运算核心所处理的相邻两次迭代将不会有数据交集。
发明内容
本发明目的在于提供一种异构众核数据重用方法,该异构众核数据重用编译优化方法解决了数据重复传输和任务调度方式不利于数据重用的问题,从而减少主存与高速缓存间的数据传输量,提升程序性能。
为达到上述目的,本发明采用的技术方案是:一种异构众核数据重用方法,基于Stencil计算识别模块、块分段任务调度模块和数据重定向模块,所述Stencil计算识别模块用于完成Stencil计算的识别工作,所述块分段任务调度模块用于当进行Stencil计算优化的维度为循环最外层时,完成改变任务划分调度的工作,所述数据重定向模块用于完成数据重用的工作;
所述数据重用方法包括以下步骤:
S1、假设i为某多层循环迭代中的某一层,采用Stencil计算识别模块对计算中涉及的所有数组下标进行扫描,识别出同一数组的i维度的下标是否都在[i-a,i+a]范围之内,且下标中包含[i-a,i+a]范围内的所有i-b和i+b,其中,a为任意非零正整数,b为任意正整数,且b<=a,如果是,则认为该维度存在Stencil计算,将该维度作为Stencil计算优化的备选维度,如果不是,则认为该维度不是Stencil计算,扫描下一个维度;
S2、在S1的备选维度中选出最高维作为目标优化维度,判断该最高维是否对应于S1中多层循环迭代的最外层,如果是,执行S3,否则,执行S4;
S3、根据异构众核结构中运算核心的数量和目标优化维度的循环迭代的次数,将目标优化维度上的循环迭代以块分段的形式划分为若干段,使得每个运算核心分到一段连续的迭代,保证每个运算核心处理的相邻迭代之间存在数据交集,执行下一步;
S4、数据重定向模块设置两个指针,一个指针reuse用于指向一次迭代到下一次迭代以后缓冲区中可以重用的数据起始地址,表示下次迭代将要使用数据的起始地址,另一个指针noreuse用于指向一次迭代到下一次迭代以后缓冲区中不可以重用的数据起始地址,表示下次迭代需要新拷入的数据所要存放的起始地址。
上述技术方案中进一步改进的技术方案如下:
1. 上述方案中,在S3中,每个运算核心分到的一段连续的迭代的迭代次数=目标优化维度上的总迭代次数/运算核心的数量。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明异构众核数据重用方法,其通过编译器自动识别、分析程序中的Stencil计算区,挖掘计算中可以重复使用数据的机会,解决了主存与高速局存间数据重复传输和任务调度方式不利于数据重用的问题,从而减少主存与高速缓存间的数据传输量,提高程序性能,整个过程对用户透明,方便、高效。
附图说明
附图1为本发明背景技术中Stencil计算示意图;
附图2为本发明背景技术中Stencil计算程序示意图;
附图3为本发明背景技术中运算核心的任务调度方式示意图;
附图4为本发明异构众核数据重用编译优化方法流程示意图;
附图5为本发明块分段任务调度模块的示例图;
附图6为本发明数据重定向模块的示例图。
具体实施方式
下面结合实施例对本发明作进一步描述:
实施例:一种异构众核数据重用方法,基于Stencil计算识别模块、块分段任务调度模块和数据重定向模块,所述Stencil计算识别模块用于完成Stencil计算的识别工作,所述块分段任务调度模块用于当进行Stencil计算优化的维度为循环最外层时,完成改变任务划分调度的工作,所述数据重定向模块用于完成数据重用的工作;
所述数据重用方法包括以下步骤:
S1、假设i为某多层循环迭代中的某一层,采用Stencil计算识别模块对计算中涉及的所有数组下标进行扫描,识别出同一数组的i维度的下标是否都在[i-a,i+a]范围之内,且下标中包含[i-a,i+a]范围内的所有i-b和i+b,其中,a为任意非零正整数,b为任意正整数,且b<=a,如果是,则认为该维度存在Stencil计算,将该维度作为Stencil计算优化的备选维度,如果不是,则认为该维度不是Stencil计算,扫描下一个维度;
S2、在S1的备选维度中选出最高维作为目标优化维度,判断该最高维是否对应于S1中多层循环迭代的最外层,如果是,执行S3,否则,执行S4;
S3、根据异构众核结构中运算核心的数量和目标优化维度的循环迭代的次数,将目标优化维度上的循环迭代以块分段的形式划分为若干段,使得每个运算核心分到一段连续的迭代,保证每个运算核心处理的相邻迭代之间存在数据交集,执行下一步;
S4、数据重定向模块设置两个指针,一个指针reuse用于指向一次迭代到下一次迭代以后缓冲区中可以重用的数据起始地址,表示下次迭代将要使用数据的起始地址,另一个指针noreuse用于指向一次迭代到下一次迭代以后缓冲区中不可以重用的数据起始地址,表示下次迭代需要新拷入的数据所要存放的起始地址。
在S3中,每个运算核心分到的一段连续的迭代的迭代次数=目标优化维度上的总迭代次数/运算核心的数量。
本发明上述内容进一步解释如下:
在异构众核平台上,计算数据最终都要通过DMA从主存导入高速缓存中。
本发明主要基于Stencil计算识别、块分段任务调度、数据重定向三个模块,流程如图4所示。
Stencil计算识别模块:该模块完成Stencil计算的识别工作,通过扫描计算中涉及的所有数组下标,识别出同一数组的同一维度(假设为i)上如果存在i-a/i+a这样的下标,且其他本维度下标都在[i-a,i+a]范围之内,那么认为该维度存在Stencil计算,将该维度作为stencil优化的备选维度。
块分段任务调度:该模块主要完成当进行stencil优化的维度为循环最外层时,改变任务划分调度的工作。此时,将任务划分变为块分段的形式,即每个运算核心分到一段连续的迭代,如图5所示。这样可以保证每个运算核心处理的相邻迭代之间存在数据交集,可以进行数据重用优化。
数据重定向:该模块完成数据重用的工作。数据的重定向通过两个指针完成,分别指示一次迭代到下一次迭代以后缓冲区中可以重用的数据起始地址和不可以重用的数据起始地址,前者实际可以表示下次迭代将要使用数据的起始地址,后者实际可以表示下次迭代需要新拷入的数据所要存放的位置。
编译器自动分析核心段,识别出Stencil计算,编译器自动根据需要改变核心段的任务划分,以适应stencil数据重用的需要,自动的数据重定向机制实现stencil数据的重用,且对源程序改动幅度小,以最小的代价实现了减少数据传输的目的。
图5为块分段任务调度模块将任务划分变为块分段的形式,即每个运算核心分到一段连续的迭代,这样可以保证每个运算核心处理的相邻迭代之间存在数据交集,可以进行数据重用优化。
如图6所示,以含有三组数据AA[i-1][*]、AA[i][*]、AA[i+1][*]的Stencil计算为例,首次迭代时,三组数据在高速缓存中的存放方式如图6中的第i次迭代所示,在进行i+1次迭代时,计算所需使用的数据为AA[i][*]、AA[i+1][*]、AA[i+2][*],此时如图中所示,将reuse指向缓存中AA[i][*]所在位置的起始地址,向noreuse指针指向的位置传入数据块AA[i+2][*],这样计算所需的数据就可以通过reuse和noreuse两个指针表示出来,实现了对缓存中原有的AA[i][*]、AA[i+1][*]两块数据的重用。计算结束后,再改变reuse和noreuse指针的值使之分别指向下一次可重用与不可重用的数据的起始地址,以此类推。
采用上述异构众核数据重用方法时,其通过编译器自动识别、分析程序中的Stencil计算区,挖掘计算中可以重复使用数据的机会,解决了主存与高速局存间数据重复传输和任务调度方式不利于数据重用的问题,从而减少主存与高速缓存间的数据传输量,提高程序性能,整个过程对用户透明,方便、高效。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (2)
1.一种异构众核数据重用方法,其特征在于:基于Stencil计算识别模块、块分段任务调度模块和数据重定向模块,所述Stencil计算识别模块用于完成Stencil计算的识别工作,所述块分段任务调度模块用于当进行Stencil计算优化的维度为循环最外层时,完成改变任务划分调度的工作,所述数据重定向模块用于完成数据重用的工作;
所述数据重用方法包括以下步骤:
S1、假设i为某多层循环迭代中的某一层,采用Stencil计算识别模块对计算中涉及的所有数组下标进行扫描,识别出同一数组的i维度的下标是否都在[i-a,i+a]范围之内,且下标中包含[i-a,i+a]范围内的所有i-b和i+b,其中,a为任意非零正整数,b为任意正整数,且b<=a,如果是,则认为该维度存在Stencil计算,将该维度作为Stencil计算优化的备选维度,如果不是,则认为该维度不是Stencil计算,扫描下一个维度;
S2、在S1的备选维度中选出最高维作为目标优化维度,判断该最高维是否对应于S1中多层循环迭代的最外层,如果是,执行S3,否则,执行S4;
S3、根据异构众核结构中运算核心的数量和目标优化维度的循环迭代的次数,将目标优化维度上的循环迭代以块分段的形式划分为若干段,使得每个运算核心分到一段连续的迭代,保证每个运算核心处理的相邻迭代之间存在数据交集,执行下一步;
S4、数据重定向模块设置两个指针,一个指针reuse用于指向一次迭代到下一次迭代以后缓冲区中可以重用的数据起始地址,表示下次迭代将要使用数据的起始地址,另一个指针noreuse用于指向一次迭代到下一次迭代以后缓冲区中不可以重用的数据起始地址,表示下次迭代需要新拷入的数据所要存放的起始地址。
2.根据权利要求1所述的异构众核数据重用方法,其特征在于:在S3中,每个运算核心分到的一段连续的迭代的迭代次数=目标优化维度上的总迭代次数/运算核心的数量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910927232.4A CN112579089B (zh) | 2019-09-27 | 2019-09-27 | 异构众核数据重用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910927232.4A CN112579089B (zh) | 2019-09-27 | 2019-09-27 | 异构众核数据重用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579089A true CN112579089A (zh) | 2021-03-30 |
CN112579089B CN112579089B (zh) | 2022-11-15 |
Family
ID=75110162
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910927232.4A Active CN112579089B (zh) | 2019-09-27 | 2019-09-27 | 异构众核数据重用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112579089B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185937A (zh) * | 2022-11-29 | 2023-05-30 | 之江实验室 | 基于众核处理器多层互联架构的二元运算访存优化方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103226487A (zh) * | 2013-04-25 | 2013-07-31 | 中国人民解放军信息工程大学 | 面向异构众核多级存储结构的数据分布与局部性优化方法 |
US20150277877A1 (en) * | 2014-03-25 | 2015-10-01 | Nec Laboratories America, Inc. | Compiler optimization for many integrated core processors |
-
2019
- 2019-09-27 CN CN201910927232.4A patent/CN112579089B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103226487A (zh) * | 2013-04-25 | 2013-07-31 | 中国人民解放军信息工程大学 | 面向异构众核多级存储结构的数据分布与局部性优化方法 |
US20150277877A1 (en) * | 2014-03-25 | 2015-10-01 | Nec Laboratories America, Inc. | Compiler optimization for many integrated core processors |
Non-Patent Citations (2)
Title |
---|
WEN-JING MA 等: "《Highly Optimized Code Generation for Stencil Codes with Computation Reuse for GPUs》", 《JOURNAL OF COMPUTER SCIENCE AND TECHNOLOGY》 * |
许瑾晨 等: "《面向异构众核从核的数学函数库访存优化方法》", 《计算机科学》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185937A (zh) * | 2022-11-29 | 2023-05-30 | 之江实验室 | 基于众核处理器多层互联架构的二元运算访存优化方法及装置 |
CN116185937B (zh) * | 2022-11-29 | 2023-11-21 | 之江实验室 | 基于众核处理器多层互联架构的二元运算访存优化方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112579089B (zh) | 2022-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Meng et al. | Training deeper models by GPU memory optimization on TensorFlow | |
US7926046B2 (en) | Compiler method for extracting and accelerator template program | |
CN108509270B (zh) | 一种国产申威26010众核处理器上K-means算法的高性能并行实现方法 | |
CN109146072B (zh) | 基于卷积神经网络加速器的数据重用方法 | |
CN109002659B (zh) | 一种基于超级计算机的流体机械仿真程序优化方法 | |
CN103970602B (zh) | 一种面向x86多核处理器的数据流程序调度方法 | |
CN102981807B (zh) | 一种基于cuda并行环境的gpu程序优化方法 | |
CN114995823B (zh) | 一种面向cnn专用加速器的深度学习编译器优化方法 | |
CN102750131B (zh) | 一种面向gpu的双调归并排序方法 | |
CN114995822B (zh) | 专用于cnn加速器的深度学习编译器优化方法 | |
CN101593132B (zh) | 基于线程构造模块的多核并行模拟退火方法 | |
CN110032450A (zh) | 一种基于固态盘扩展内存的大规模深度学习方法及系统 | |
CN104778077A (zh) | 基于随机和连续磁盘访问的高速核外图处理方法及系统 | |
CN112579089B (zh) | 异构众核数据重用方法 | |
CN101539867B (zh) | 动态二进制翻译系统中可重定向的寄存器分配方法 | |
CN112527393A (zh) | 面向主从融合架构处理器的指令调度优化装置和方法 | |
JPWO2016024508A1 (ja) | マルチプロセッサ装置 | |
CN113391932B (zh) | 面向异构众核架构的并行特征线法输运扫描方法及装置 | |
CN111653317B (zh) | 基因比对加速装置、方法及系统 | |
CN112527304B (zh) | 基于异构平台的自适应节点融合编译优化方法 | |
Shang et al. | LACS: A high-computational-efficiency accelerator for CNNs | |
CN102799414B (zh) | 改进推测多线程的方法及装置 | |
CN112765088A (zh) | 利用数据标签提高多计算单元平台上数据共享的方法 | |
CN101546271B (zh) | 动态二进制翻译系统中超级块的寄存器分配方法 | |
Kim et al. | WCET-aware function-level dynamic code management on scratchpad memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |