面向SPM存储层次的数据缓存实现方法技术

技术编号:27527862 阅读:25 留言:0更新日期:2021-03-03 10:58
本发明专利技术公开一种面向SPM存储层次的数据缓存实现方法,包括以下步骤:S1、建立数据缓存的编程描述;S2、编译器分析编译指示,确定循环分块参数LoopBlockKey;S3、编译器根据S2中获得的循环分块参数,计算每一个循环块的计算、访存开销与数据传送开销的比值,得到并行隐藏参数Hkey;S4、根据S3得到的并行隐藏参数,反馈修正,得到最终的循环分块参数;S5、根据循环分块参数和并行隐藏参数,选择循环重构策略进行循环重构。本发明专利技术有效提升了编译器的上下文分析精确度和应用的访存效率,且可以做到计算与不同存储层次间的数据传送并行进行,有效利用处理器的各个存储层次,更进一步提升程序性能。更进一步提升程序性能。更进一步提升程序性能。

【技术实现步骤摘要】
面向SPM存储层次的数据缓存实现方法


[0001]本专利技术涉及一种面向SPM存储层次的数据缓存实现方法,属于计算机


技术介绍

[0002]随着微处理器架构的发展,多核和众核成为微处理器设计的主要方向。受到面积和功耗的限制,众核处理器倾向于将片上SRAM组织成SPM这种软件管理的非cache结构。这种需要软件管理存储层次的特点给用户编程带来了很大的挑战,用户在编写应用时,不仅需要进行多级多层次的并行规划,还需要考虑数据在不同存储层次的布局、缓冲和传送。
[0003]众核处理器支持多级多层次并行,存储架构复杂,编程困难,为了解决众核处理器的编程问题,学术界和业界都展开了大量深入的研究,提出了多种解决方案。主要包括:1)以OpenCL语言为代表的支持显式异构编程的并行语言。OpenCL提供了丰富的语言扩展,支持多种存储层次上的数据,支持不同存储层次间显式的数据传送。OpenCL丰富的语言支持是编制灵活高效应用的利器,也是制约OpenCL用户的主要因素。作为提供丰富API支持显式并行的语言,OpenCL应用性能的获得主要依靠用户显式说明的数据布局和数据传送,以及用户确定的并行方式。这就要求OpenCL用户不仅需要具备丰富的专业应用知识,而且对众核处理器的体系结构有深入的了解。2)以OpenMP、OpenAcc语言为代表的支持隐式并行的编程语言。使用这一类语言编程,用户不需要进行显示的存储管理,只需要用编译指示指明并行区间和并行方式。这一类应用的性能在很大程度上依赖于编译系统的优化。编译系统编译优化的前提是保证应用的正确性。以此为据,编译系统在上下文无法明确的情况下只能进行保守处理,无法进行激进的性能优化,这势必会影响应用程序的效率。
[0004]武汉科技大学于2012年11月申请了专利(CN102890658A,一种嵌入式系统中基于SPM的输入输出缓冲实现方法),主要用于提高嵌入式系统输入输出处理速度和降低输入输出处理过程的存储访问功耗。其特点是在SPM空间中划分出多个输入输出请求区域用作输入输出缓冲,缓冲溢出后,才将数据从SPM空间导入内存空间。该专利利用SPM空间访问延迟小、访问带宽高的特点,通过将内存空间的输入输出缓冲到SPM空间从而提高访存性能。然而,以上专利解决的是输入输出的缓冲处理问题,利用SPM空间提高访存性能,与如何实现循环中数据访问的缓冲以及运算与数据传送的并行,以达到提高访存性能的目的相去甚远。
[0005]还有许多科研机构也在面向SPM存储层次的众核处理器编程和编译优化设计方面做了尝试,目前主要的处理方法有两大类,第一类从挖掘机器性能的角度出发,提供详细的API接口,将应用的并行设计和数据的布局、导入导出全部交给用户处理,最大化提高应用性能。这类方法的缺点是对用户要求太高。第二类从减轻用户负担的角度出发,用户只需要进行并行策略的制定,数据的布局和导入导出全部交给编译器自动处理。该类方法的缺点是应用性能严重依赖于编译器的优化设计,在某些编译器无法进行精细优化的情况下,应用性能势必受到很大影响。所以,如何在这两类方法之间进行权衡,寻找一种用户指导编译器进行数据布局和数据导入导出处理的方法,就成为面向SPM存储层次的众核处理器编程
和编译优化设计的难题。

技术实现思路

[0006]本专利技术的目的是提供一种面向SPM存储层次的数据缓存实现方法,该面向SPM存储层次的数据缓存实现方法有效提升了编译器的上下文分析精确度和应用的访存效率,且可以做到计算与不同存储层次间的数据传送并行进行,有效利用处理器的各个存储层次,更进一步提升程序性能。
[0007]为达到上述目的,本专利技术采用的技术方案是:一种面向SPM存储层次的数据缓存实现方法,包括以下步骤:S1、建立数据缓存的编程描述:即在循环前,添加编译指示,用于说明循环中需要进行访存优化的数据集和用于访存优化的SPM缓存区的信息;S2、编译器分析S1中的编译指示,确定循环分块参数LoopBlockKey:即解析S1中的编译指示,得到SPM缓存区的总大小和需要进行访存优化的数据集,确定每一次批量传送的数据量,根据该数据量确定可以确保数据访问均集中在SPM缓冲中的循环迭代次数,将该循环迭代次数作为循环分块参数LoopBlockKey;S3、编译器根据S2中获得的循环分块参数LoopBlockKey,计算每一个循环块的计算、访存开销与数据传送开销的比值,得到并行隐藏参数Hkey,具体步骤如下:S31、根据循环分块参数LoopBlockKey,获得循环分块后每一个循环块包含的迭代次数It,It=LoopBlockKey;S32、计算每一次迭代的计算开销Tc;扫描循环中的所有语句,获取每一条语句中每一次计算的计算类型,根据计算类型得到该次计算的计算开销值,将循环中所有计算的计算开销值累加,得到每一次迭代的计算开销Tc;S33、计算每一次迭代的访存开销Tm;扫描循环中的所有访存操作,根据S2中确定的需要访存优化的数据集判断该次访存操作是否可以进行访存优化,如果可以,则每一次迭代该访存操作的访存开销为访问SPM缓冲空间的开销,否则,该访存操作的访存开销为相应的存储层次的访存开销,将循环中所有访存操作的访存开销累加,得到每一次迭代的访存开销Tm;S34、计算每一个循环块的数据传送开销Tt;根据S1中的编译指示说明的可以进行访存优化的数据集,获得需要进行数据传送的次数n,通过循环分块参数LoopBlockKey得到第i次数据传送的数据量Tsizei=LoopBlockKey*TypeSizei,其中,TypeSizei是第i次数据传送的数组变量的类型,数据传送开销Tt可以通过以下算式得到,Tt=∑(Tstart+Tsizei/Tbandwidth),i=1,n,其中,Tstart为数据传送的启动开销,Tbandwidth为数据传送的带宽;S35、计算每一个循环块的并行隐藏参数Hkey;Hkey=(It*Tc+It*Tm)/Tt;S4、根据S3计算出的并行隐藏参数Hkey,确定分块循环的最终循环分块参数;如果Hkey大于或等于1,说明计算、访存开销大于或等于数据传送开销,数据在不同存储层次间的传送可以被计算、访存操作隐藏,即在进行本次循环块运算时,可以并行进行下一个循环块所需数据的批量传送,在这种情况下,SPM缓冲需要分成两份,一份用于本循环块的运算,另一份用于下一个循环块所需数据的预先传送,因此将循环分块参数LoopBlockKey减半;如果Hkey小于1,则不做计算、访存与数据传送的并行,循环分块参数LoopBlockKey保持不变;
S5、根据S4中得到的循环分块参数LoopBlockKey,选择循环重构策略进行循环重构;当S3计算出的并行隐藏参数小于1时,计算、访存开销无法隐藏数据传送开销,采用顺序执行模式的循环重构,即运算和不同存储层次间的数据传送顺序进行,在此过程中,编译器将多个连续的访问主存操作转换为使用SPM和主存之间的数据传送引擎完成的批量数据传送和对SPM缓冲空间的多个访问,进行访存优化;当并行隐藏参数大于或等于1时,采用并行执行模式的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向SPM存储层次的数据缓存实现方法,其特征在于:包括以下步骤:S1、建立数据缓存的编程描述:即在循环前,添加编译指示,用于说明循环中需要进行访存优化的数据集和用于访存优化的SPM缓存区的信息;S2、编译器分析S1中的编译指示,确定循环分块参数LoopBlockKey:即解析S1中的编译指示,得到SPM缓存区的总大小和需要进行访存优化的数据集,确定每一次批量传送的数据量,根据该数据量确定可以确保数据访问均集中在SPM缓冲中的循环迭代次数,将该循环迭代次数作为循环分块参数LoopBlockKey;S3、编译器根据S2中获得的循环分块参数LoopBlockKey,计算每一个循环块的计算、访存开销与数据传送开销的比值,得到并行隐藏参数Hkey,具体步骤如下:S31、根据循环分块参数LoopBlockKey,获得循环分块后每一个循环块包含的迭代次数It,It=LoopBlockKey;S32、计算每一次迭代的计算开销Tc;扫描循环中的所有语句,获取每一条语句中每一次计算的计算类型,根据计算类型得到该次计算的计算开销值,将循环中所有计算的计算开销值累加,得到每一次迭代的计算开销Tc;S33、计算每一次迭代的访存开销Tm;扫描循环中的所有访存操作,根据S2中确定的需要访存优化的数据集判断该次访存操作是否可以进行访存优化,如果可以,则每一次迭代该访存操作的访存开销为访问SPM缓冲空间的开销,否则,该访存操作的访存开销为相应的存储层次的访存开销,将循环中所有访存操作的访存开销累加,得到每一次迭代的访存开销Tm;S34、计算每一个循环块的数据传送开销Tt;根据S1中的编译指示说明的可以进行访存优化的数据集,获得需要进行数据传送的次数n,通过循环分块参数LoopBlockKey得到第i次数据传送的数据量Tsizei=LoopBlockKey*TypeSizei,其中,TypeSizei是第i次数据传送的数...

【专利技术属性】
技术研发人员:方燕飞文延华李雁冰杨小川王敬宇何王全
申请(专利权)人:无锡江南计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利