发布日期:2026-01-31 浏览次数:
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计算优化的备选维
S2、在S1的备选维度中选出最高维作为目标优化维度,判断该最高维是否对应于S1中
S3、根据异构众核结构中运算核心的数量和目标优化维度的循环迭代的次数,将目标
优化维度上的循环迭代以块分段的形式划分为若干段,使得每个运算核心分到一段连续的
S4、数据重定向模块设置两个指针,一个指针reuse用于指向一次迭代到下一次迭代以
后缓冲区中可以重用的数据起始地址,表示下次迭代将要使用数据的起始地址,另一个指
针noreuse用于指向一次迭代到下一次迭代以后缓冲区中不可以重用的数据起始地址,表
2.根据权利要求1所述的异构众核数据重用方法,其特征在于:在S3中,每个运算核心
分到的一段连续的迭代的迭代次数=目标优化维度上的总迭代次数/运算核心的数量。
程序的初始化、I/O、通信以及运算核心阵列的任务分配等工作,运算核心通常专职负责程
序热点区域的并行加速工作。每个运算核心通常配备有一块片上高速缓存SPM,它的访问速
度快,延迟低,加速核心段的关键数据只有通过DMA布局到片上高速缓存才能达到最佳加速
Stencil计算是科学计算中的一种常用的计算模式,其特点是存在类似[i‑1]、
[i]、[i+1]这种访问,在这种计算当中,当前i迭代的部分数据在执行i+1迭代(记为i’)时,
仍然能使用,[i]、[i+1]变成了[i’‑1]、[i’],如图1所示。
如图2所示,一个典型Stencil计算,现有的编译器处理方法是:对于最外层循环的
由上述可知,现有的处理Stencil计算数据布局的方法存在如下缺点:在处理第i+
1次迭代时,事实上AA[i][*]、AA[i+1][*]两组数据已经存在于局存之中,并不需要再次通
2,那么i的相邻两次迭代将会导致4组数据被重复传输到高速缓存中来,以此类推。
环最外层的一个迭代,如图1中PG电子官方网的程序,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的备选维度中选出最高维作为目标优化维度,判断该最高维是否对应于
S3、根据异构众核结构中运算核心的数量和目标优化维度的循环迭代的次数,将
目标优化维度上的循环迭代以块分段的形式划分为若干段,使得每个运算核心分到一段连
S4、数据重定向模块设置两个指针,一个指针reuse用于指向一次迭代到下一次迭
代以后缓冲区中可以重用的数据起始地址,表示下次迭代将要使用数据的起始地址,另一
个指针noreuse用于指向一次迭代到下一次迭代以后缓冲区中不可以重用的数据起始地
1 . 上述方案中,在S3中,每个运算核心分到的一段连续的迭代的迭代次数=目标
本发明异构众核数据重用方法,其通过编译器自动识别、分析程序中的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的备选维度中选出最高维作为目标优化维度,判断该最高维是否对应于
S3、根据异构众核结构中运算核心的数量和目标优化维度的循环迭代的次数,将
目标优化维度上的循环迭代以块分段的形式划分为若干段,使得每个运算核心分到一段连
S4、数据重定向模块设置两个指针,一个指针reuse用于指向一次迭代到下一次迭
代以后缓冲区中可以重用的数据起始地址,表示下次迭代将要使用数据的起始地址,另一
个指针noreuse用于指向一次迭代到下一次迭代以后缓冲区中不可以重用的数据起始地
在S3中,每个运算核心分到的一段连续的迭代的迭代次数=目标优化维度上的总
本发明主要基于Stencil计算识别、块分段任务调度、数据重定向三个模块,流程
Stencil计算识别模块:该模块完成Stencil计算的识别工作,通过扫描计算中涉
及的所有数组下标,识别出同一数组的同一维度(假设为i)上如果存在i‑a/i+a这样的下
标,且其他本维度下标都在[i‑a,i+a]范围之内,那么认为该维度存在Stencil计算,将该维
块分段任务调度:该模块主要完成当进行stencil优化的维度为循环最外层时,改
变任务划分调度的工作。此时,将任务划分变为块分段的PG电子官方网形式,即每个运算核心分到一段连
续的迭代,如图5所示。这样可以保证每个运算核心处理的相邻迭代之间存在数据交集,可
数据重定向:该模块完成数据重用的工作。数据的重定向通过两个指针完成,分别
指示一次迭代到下一次迭代以后缓冲区中可以重用的数据起始地址和不可以重用的数据
起始地址,前者实际可以表示下次迭代将要使用数据的起始地址,后者实际可以表示下次
编译器自动分析核心段,识别出Stencil计算,编译器自动根据需要改变核心段的
任务划分,以适应stencil数据重用的需要,自动的数据重定向机制实现stencil数据的重
一段连续的迭代,这样可以保证每个运算核心处理的相邻迭代之间存在数据交集,可以进
例,首次迭代时,三组数据在高速缓存中的存放方式如图6中的第i次迭代所示,在进行i+1
reuse指向缓存中AA[i][*]所在位置的起始地址,向noreuse指针指向的位置传入数据块AA
[i+2][*],这样计算所需的数据就可以通过reuse和noreuse两个指针表示出来,实现了对
Stencil计算区,挖掘计算中可以重复使用数据的机会,解决了主存与高速局存间数据重复
传输和任务调度方式不利于数据重用的问题,从而减少主存与高速缓存间的数据传输量,
士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明