[发明专利]缓解假共享问题的编译器支持方法在审
申请号: | 202110348948.6 | 申请日: | 2021-03-31 |
公开(公告)号: | CN114217937A | 公开(公告)日: | 2022-03-22 |
发明(设计)人: | 王飞;杨涛;吴伟;钱宏;管茂林;朱琪;樊行健 | 申请(专利权)人: | 无锡江南计算技术研究所 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F8/41 |
代理公司: | 苏州创元专利商标事务所有限公司 32103 | 代理人: | 王健 |
地址: | 214038 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 缓解 共享 问题 编译器 支持 方法 | ||
本发明公开一种缓解假共享问题的编译器支持方法,包括以下步骤:S1、用户在程序中,对多线程Cache之间可能存在假共享的变量声明分别使用__attribute__((cacheline))接口;S2、编译器将声明树节点的基类tree_decl_common结构体中的标志位cacheline置为1,将align设置为Cache Line大小,并将tree_decl_common的基类tree_base结构体中的user_align置为1。本发明解决了某些Cache结构不保证横向一致性带来的假共享问题。
技术领域
本发明涉及一种缓解假共享问题的编译器支持方法,属于高性能计算技术领域。
背景技术
计算机系统中为了解决主存与CPU运行速度的差距,在CPU与主存之间添加了一级或者多级高速缓冲存储器(Cache),Cache Line 是Cache与主存之间传输数据的最小单元。当一个Cache Line被从主存里拷入Cache里,Cache会在Cache里为该Cache Line创建一个条目,这个条目既包含了内存数据,又包含了这行数据在内存中的位置信息。
Cache行是CPU缓存的基本单位,当我们访问一个数据时,其所在的整个Cache行都会被缓存进Cache。在多核或众核芯片中,每个核可能都有自己的Cache,因此同一个变量或者同一个Cache行的变量可能存在于多个Cache中。在多个线程修改自己的变量时,表面上是不同的变量,但是实际上却处于同一个Cache行,若Cache不保证一致性就会带来假共享问题。
在多核多线程并发场景下,多线程要操作的不同变量处于同一个Cache行,就会出现假共享问题。当某个线程修改缓存中的数据并写回主存后,其他线程将自己Cache写回主存时候就要保证只有自己确实修改过的才写回,以避免新数据覆盖旧数据,一定程度降低程序效率。
GCC提供了__cacheline_aligned,但是该接口仅进行了首地址的Cache行对界,使用了此接口的变量还是有可能与普通变量处于同一个Cache行,导致假共享。
发明内容
本发明的目的是提供一种缓解假共享问题的编译器支持方法,解决某些Cache结构不保证横向一致性带来的假共享问题。
为达到上述目的,本发明采用的技术方案是:提供一种缓解假共享问题的编译器支持方法,包括以下步骤:
基于配置的__attribute__((cacheline))接口,该__attribute__((cacheline))接口用于可能存在假共享的变量;
包括以下步骤:
S1、用户在程序中,对多线程Cache之间可能存在假共享的变量声明分别使用__attribute__((cacheline))接口;
S2、编译器将声明树节点的基类tree_decl_common结构体中的标志位cacheline置为1,将align设置为Cache Line大小,并将tree_decl_common的基类tree_base结构体中的user_align置为1;
S3、编译器在生成变量的汇编码时,对tree_decl_common.cacheline标志进行判定,若该标志为0,则跳过,若为1,则将变量的size进行向上取整到Cache Line的倍数;
S4、最后生成目标码时,依据变量的size大小分配空间,依据align大小分配地址,使得使用该接口的变量分别处于不同Cache Line;
S5、将Cache中的数据写回主存时,整行写回。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明设计一个__attribute__((cacheline))用户接口,可分别用于不同的数据声明,在编译器生成变量汇编码的时候,对其起始位置Cache行对界,并对数据进行垫塞,增大间隔,使其处于不同的Cache行,减少可能存在的假共享问题,提升主存写回效率。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡江南计算技术研究所,未经无锡江南计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110348948.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种基于握手协议的多核间缓存刷新方法
- 下一篇:动态内存管理方法