一种软硬协同的线程私有数据访问优化方法[发明专利]

(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 202011144938.2
(22)申请日 2020.10.23
(71)申请人 无锡江南计算技术研究所
地址 214038 江苏省无锡市滨湖区山水东
路699号
(72)发明人 黄亮明 姜军 高秀武 白书敬 
谢汶兵 羊瑞 
(74)专利代理机构 苏州创元专利商标事务所有
限公司 32103
代理人 王健
(51)Int.Cl.
G06F  9/54(2006.01)
(54)发明名称一种软硬协同的线程私有数据访问优化方法(57)摘要本发明公开一种软硬协同的线程私有数据访问优化方法,包括以下步骤:S1:编译器前端为线程私有变量节点生成带有标记的中间表达式;S2:编译器后端的代码生成模块判断线程私有变量节点所携带的标记值是否为TRUE,若为TRUE,则
通过后端指令生成模板使用读线程号指令替换系统调用指令,并将读线程号指令返回值写入函数返回值专用寄存器$r0;S3:编译器根据读线程号指令返回值与线程私有数据空间地址关系在后端代码生成模块中添加线程私有数据基址计算相关指令;S4:根据S3中获取的线程私有数据基址与线程私有变量偏移,计算线程私有变量地址。本发明可以克服原始线程私有数据访问效率低下的问题,显著提升线程私有数据访问的性
能。权利要求书1页  说明书3页  附图2页CN 112199217 A 2021.01.08
C N  112199217
A
1.一种软硬协同的线程私有数据访问优化方法,其特征在于,包括以下步骤:
S1:编译器前端识别程序中线程私有数据访问行为,为线程私有变量节点生成带有标记的中间表达式;
S2:编译器后端的代码生成模块根据S1中生成的带有标记的中间表达式,判断中间表达式中线程私有变量节点所携带的标记值是否为TRUE,若为TRUE,则通过后端指令生成模板使用读线程号指令替换系统调用指令,并将读线程号指令返回值写入函数返回值专用寄存器$r0,否则,按非私有数据访问进行代码生成;
S3:编译器根据读线程号指令返回值与线程私有数据空间地址关系在后端代码生成模块中添加线程私有数据基址计算相关指令,用于获取线程私有数据基址;
S4:根据S3中获取的线程私有数据基址与通过线程私有变量索引计算获得的线程私有变量地址偏移,计算线程私有变量地址,实现对线程私有变量的访问。
2.根据权利要求1所述的一种软硬协同的线程私有数据访问优化方法,其特征在于:S1中编译器前端根据词法、语法分析识别程序中线程私有数据访问行为,生成带有线程私有数据标记的中间表达式。
3.根据权利要求1所述的一种软硬协同的线程私有数据访问优化方法,其特征在于:S2中编译器后端根据中间表达式线程私有变量标记值自动匹配后端模板,生成读线程号指令。
4.根据权利要求1所述的一种软硬协同的线程私有数据访问优化方法,其特征在于,S3中编译器根据寻址模式生成相应的线程私有数据基址计算指令。
权 利 要 求 书1/1页CN 112199217 A
一种软硬协同的线程私有数据访问优化方法
技术领域
[0001]本发明涉及内存访问和编译器优化技术领域,特别是一种软硬协同的线程私有数据访问优化方法。
背景技术
[0002]在单线程程序中,我们经常要用到“全局变量”以实现多个函数间共享数据。在多线程环境下,进程内所有线程共享进程的数据空间,全局变量或静态变量为所有线程共有。如果线程调用的函数使用全局变量或静态变量,则很可能引起编程错误。因为这些函数使用的全局变量和静态变量无法为不同的线程保存各自的值,当同一进程内的不同线程几乎同时调用这样的函数时就无法保证程序的正确性。而解决这一问题的一种方式就是使用线程私有数据(Thread-specific data, TSD),线程私有数据在线程内可以被所有函数访问,但对其他线程是屏蔽的,比如我们常见的返回标准错误码变量errno,就是一个线程私有数据。《UNIX高级编程环境》中阐述线程私有数据是一种存储和查询与某个线程相关数据的机制,采用一种被称为一键多值的技术,即一个键对应多个数值。使用线程私有数据时,首先要为每个线程数据创建一个相关联的键;在每个线程内部,都使用这个公用的键来指代线程数据,在不同的线程中,这个键关联不同的数据。因此每个线程都可以独立地访问自己的私有数据,不用担心与其他线程的同步访问问题。
[0003]编译器是计算机系统不可或缺的底层软件,它的核心思想是把同样的逻辑结构和思想从高级语言
转化为机器语言,最终成为硬件执行的物理信号。编译器是实现软件从设计到能在硬件上运行的桥梁,几乎所有的可执行代码都是通过编译器编译后产生的。编译器的编译过程分为前端、中端和后端。前端主要通过词法分析、语法分析将各种源语言解析为一种通用的抽象语法树—GENERIC树;中端将GENERIC树转化为GIMPLE三地址中间代码,最后转换成为基于底层的RTL语言;后端在RTL语言上执行一系列的优化遍,进行代码生成、寄存器分配等优化工作。
[0004]线程私有数据访问原始实现为编译器根据程序特征生成系统调用指令,程序执行时,线程访问私有数据执行系统调用,从用户态切换到内核态;然后通过特权装入指令获取线程私有数据基址;最后,退出系统调用,从内核态切换到用户态,计算线程私有数据地址并进行访问,具体流程见附图1。然而,现有技术中的线程私有数据访问效率较低。
发明内容
[0005]本发明的目的是提供一种软硬协同的线程私有数据访问优化方法,该一种软硬协同的线程私有数据访问优化方法可以克服原始线程私有数据访问效率低下的问题,显著提升线程私有数据访问的性能,在一定范围内提升多核环境下的多线程应用性能。
[0006]为达到上述目的,本发明采用的技术方案是:一种软硬协同的线程私有数据访问优化方法,包括以下步骤:
S1:编译器前端识别程序中线程私有数据访问行为,为线程私有变量节点生成带有标
记的中间表达式;
S2:编译器后端的代码生成模块根据S1中生成的带有标记的中间表达式,判断中间表达式中线程私有变量节点所携带的标记值是否为TRUE,若为TRUE,则通过后端指令生成模板使用读线程号指令替换系统调用指令,并将读线程号指令返回值写入函数返回值专用寄存器$r0,否则,按非私有数据访问进行代码生成;
S3:编译器根据读线程号指令返回值与线程私有数据空间地址关系在后端代码生成模块中添加线程私有数据基址计算相关指令,用于获取线程私有数据基址;
S4:根据S3中获取的线程私有数据基址与通过线程私有变量索引计算获得的线程私有变量地址偏移,计算线程私有变量地址,实现对线程私有变量的访问。
[0007]上述技术方案中进一步改进的方案如下:
1. 上述方案S1中编译器前端根据词法、语法分析识别程序中线程私有数据访问行为,生成带有线程私有数据标记的中间表达式。
[0008]  2. 上述方案S2中编译器后端根据中间表达式线程私有变量标记值自动匹配后端模板,生成读线程号指令。
[0009]  3. 上述方案S3中编译器根据寻址模式生成相应的线程私有数据基址计算指令。[0010]由于上述技术方案的运用,本发明与现有技术相比具有下列优点:本发明一种软硬协同的线程私有数据访问优化方法,其使用用户级指令实现线程私有数据访问,可以克服原始线程私有数据访问进入操作系统实现带来系统调用与特权指令开销而导致效率低下的问题,显著提升线程私有数据访问的性能,在一定范围内提升多核环境下的多线程应用性能;另外,通过编译器自动进行线程私有数据识别与指令生成优化实现,对用户透明,不需增加额外操作,进一步提升线程私有数据访问的性能。
附图说明
[0011]附图1为现有技术中线程私有数据访问进入操作系统实现示意图;
附图2为本发明基于软硬协同的线程私有数据访问实现示意图。
具体实施方式
[0012]实施例:如图2所示,本发明一种软硬协同的线程私有数据访问优化方法,包括以下步骤:
步骤1、编译器前端根据词法、语法分析,识别程序中线程私有数据访问行为,为线程私有变量节点生成带有线程私有数据标记的中间表达式;
步骤2、编译器后端的代码生成模块根据步骤1中生成的带有标记的中间表达式,首先判断中间表达式中变量节点所携带的标记值是否为TRUE,如果为TRUE,则通过后端指令生成模板使用读线程号指令替换系统调用指令,并将读线程号指令返回值写入函数返回值专用寄存器$r0,否则,按非私有数据访问进行代码生成;
步骤3、编译器根据读线程号指令返回值与线程私有数据空间地址关系在后端代码生成模块中添加线程私有数据基址计算相关指令,用于获取线程私有数据基址;
步骤4、根据步骤3中获取的线程私有数据基址与通过线程私有变量索引计算获得的线程私有变量地址偏移,计算线程私有变量地址,实现对线程私有变量的访问。
[0013]采用上述软硬协同的线程私有数据访问优化方法时,其使用用户级指令实现线程私有数据访问,可以克服原始线程私有数据访问进入操作系统实现带来系统调用与特权指令开销而导致效率低下的问题,显著提升线程私有数据访问的性能,在一定范围内提升多核环境下的多线程应用性能;
另外,通过编译器自动进行线程私有数据识别与指令生成优化实现,对用户透明,不需增加额外操作,进一步提升线程私有数据访问的性能。
[0014]上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

本文发布于:2024-09-22 22:36:37,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/424552.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   数据   访问   指令   变量   编译器   技术   优化
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议