[发明专利]合并执行大规模并行线程的数据扩展优化方法有效
申请号: | 201210441329.2 | 申请日: | 2012-11-06 |
公开(公告)号: | CN102981839A | 公开(公告)日: | 2013-03-20 |
发明(设计)人: | 吴伟;卿鹏;文延华;王珊珊;何王全;刘勇;方燕飞;毛兴权 | 申请(专利权)人: | 无锡江南计算技术研究所 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/46 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 骆苏华 |
地址: | 214083 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 合并 执行 大规模 并行 线程 数据 扩展 优化 方法 | ||
技术领域
本发明涉及计算机领域,尤其涉及一种合并执行大规模并行线程的数据扩展优化方法。
背景技术
近年来,多核、众核体系结构迅猛发展,为应用开发人员提供了越来越强大的计算能力,商用软件的开发者热衷于利用市场上各种成熟的并行处理器来开发高并行度的应用软件。然而,一个拥有特定并行粒度和实现方式的应用程序并不能很好地适应各种并行处理平台,因此需要一个强大的并行编程模型和编译工具支持,以有效地利用各个并行处理器的特征和能力。许多研究工作基于此而展开,例如混合多核并行编程工具(HMPP,Hybrid MulticoreParallel Programming workbench)通过编译指导语句将C或Fortran程序翻译成计算统一设备架构(CUDA,Compute Unified Device Architecture)或开放计算语言(OpenCL,Open Computing Language)程序,S.-W.Liao等人将流程序设计语言(Brook)设计的流处理程序翻译到多核CPU上执行。而多核CUDA(MCUDA,Multicore-CUDA)及面向x86平台的CUDA C编译器(CUDA-X86)则致力于将CUDA程序移植到没有图形处理器(GPU,Graphics Processing Unit)的多核CPU系统上执行,希望由此推动CUDA架构在整个高性能并行处理领域的普及。
在CUDA、Opencl这样的编程模型中,允许用户使用数量庞大的线程,这是现在的多核CPU系统无法支持的,因此类似MCUDA以及CUDA-x86这样的实现方式必然要面对合并执行大规模并行线程的问题。为了保证原有程序的语义,以线程同步操作为基础,程序会被分割成多个循环体,每个循环体循环执行若干个并行线程,即将这些并行线程合并到一个核上串行执行。在这样的线程循环之间要保证原有线程私有数据的一致性,这需要将私有数据进行扩展,即标量变成数组,一维数组变为二维数组等等。如图1所示,将双精度浮点型的数据a扩展为双精度浮点型的数组a[THREAD_NUM],将整型的二维数组d[X][Y]扩展为整型三维数组d[THREAD_NUM][X][Y]等。扩展的大小为合并执行的线程数,即图中所示的THREAD_NUM,这样才能为每一个线程保留各自的数据,保证执行的正确性。
可以看出,数据扩展后会引起栈空间的剧烈膨胀,影响程序的执行效率。为了解决这个问题,常用的处理方式是通过分析变量的定值引用信息,找出生存周期局限于单个线程循环内的变量(即线程局部变量)。针对这类变量,可以不用进行数据扩展操作,该方法在MCUDA的相关文档中可以找到介绍。如图2中的循环变量a,其定值和引用均局限在一个线程循环内,即:for循环语句内。在合并执行后的线程循环中,每一个线程都会对该变量重新赋值和使用,因此不需要进行数据扩展。
然而,只使用这种优化方式仍然会遗留下许多需要数据扩展的变量,栈空间的剧烈膨胀问题并未得到有效缓解,给后期的程序优化带来了巨大挑战。因而如何减少不必要的线程私有数据扩展,提高程序的执行效率成为本领域技术人员亟待解决的技术难题。
在公布号为CN101937367A的中国专利申请中,披露了更多相关内容。
发明内容
本发明所要解决的技术问题是减少不必要的线程私有数据扩展,缓解栈空间的剧烈膨胀,提高程序的执行效率。
为了解决上述问题,本发明提供了一种合并执行大规模并行线程的数据扩展优化方法,包括:
在合并执行的并行线程中识别线程不变量;所述线程不变量在每个合并执行的并行线程中保持一致;
编译过程中,仅对非线程不变量,进行数据扩展。
可选的,所述识别线程不变量包括:
利用变量的定值引用信息、变量间的读写相关性及程序的结构化特征,构造完全图,自动识别线程不变量。
可选的,所述构造完全图,自动识别线程不变量包括:
建立线程相关变量信息表;
以函数为单位扫描语法树信息;若在扫描语法树过程中,所述线程相关变量信息表中有新增变量,则重新扫描所述语法树,直至所述线程相关变量信息表中的变量不再有变化;
不在所述线程相关变量信息表中的变量,即为所述线程不变量。
可选的,在所述以函数为单位扫描语法树信息之前,还包括:
对所述线程相关变量信息表进行初始化,将能够区分不同线程的变量添加进所述线程相关变量信息表中。
可选的,所述以函数为单位扫描语法树信息包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡江南计算技术研究所,未经无锡江南计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210441329.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种注塑模具快速变模温方法及其专用模具
- 下一篇:高精度铝件铣加工定位夹具