CN101833476A - 基于cmp的推测多线程机制下的独立栈函数调用方法 - Google Patents
基于cmp的推测多线程机制下的独立栈函数调用方法 Download PDFInfo
- Publication number
- CN101833476A CN101833476A CN 201010186162 CN201010186162A CN101833476A CN 101833476 A CN101833476 A CN 101833476A CN 201010186162 CN201010186162 CN 201010186162 CN 201010186162 A CN201010186162 A CN 201010186162A CN 101833476 A CN101833476 A CN 101833476A
- Authority
- CN
- China
- Prior art keywords
- stack
- processor unit
- register
- space
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了基于CMP的推测多线程机制下的独立栈函数调用方法,克服共享栈函数调用方法存在的栈加锁问题,以保证推测多线程下程序调用函数正确高效的进行。处理器在初始化的时候,在共享的内存空间中为每个处理器单元划分出一段私有的内存空间作为栈空间,并为每个处理器单元设置一个记录其对应栈空间栈顶的内部栈顶寄存器;函数栈桢的分配通过get指令的调用、栈指针的移动和update指令的调用来完成;函数栈桢的释放则通过处理器单元栈指针的恢复和update指令的调用来完成。
Description
技术领域
本发明属于计算机领域,涉及基于CMP的推测多线程技术,特别涉及基于CMP的推测多线程机制下的独立栈函数调用方法。
背景技术
CMP又称为单芯片多处理机,在CMP中每一个处理器芯片上集成了多个处理器核。为了充分利用CMP的多核计算资源,人们提出了推测多线程技术。推测多线程技术是程序自动并行化的一种有效方法,它在允许线程间存在数据依赖和控制依赖的前提下,通过将串行程序划分为多个可并行执行的线程来提高程序的运行效率,而程序串行语义的正确性则交由底层的硬件根据相应的执行模型来进行保证。正是由于推测多线程技术在线程划分自由度上的放开,那些原本因数据依赖,控制依赖无法被划分为多线程执行的程序现在也可以并行执行。由于线程之间潜在的数据依赖和控制依赖,推测多线程系统中线程的执行就隐含了数据推测和控制推测的思想,这也正是推测多线程技术这一概念的由来。
栈空间是程序运行时不可缺少的一部分内存空间,它主要用于保存程序中函数的局部变量以及函数调用过程中需要保存的各种寄存器内容。推测多线程机制下,函数调用栈的运行机制不同于传统方式的栈运行。
传统方式下,程序在某一时刻只有一个函数处在运行状态,因此函数之间的调用返回关系可以很容易地通过一个先进先出的栈结构进行维护。函数调用前,程序在栈空间上分配一段内存空间——压栈,存放被调函数中用到的临时变量以及相关需要保存的寄存器的当前值。函数调用结束的时候,根据相关的寄存器进行栈空间的释放——退栈,从而返回到调用者中。但是,在推测多线程机制下,系统中同时运行着多个线程,而每个线程中都有可能出现函数调用,同一时刻就会有多个函数的活动记录存在。传统的栈模型无法同时存放多个函数的活动记录并且也无法维护函数之间的调用返回关系。
目前的推测多线程机制下的函数调用方法采用了一种称为共享栈的函数调用方法。在这种调用方法中,所有的处理器单元共享同一个栈空间,不同的处理器单元在执行函数调用时,被调函数的活动记录被分配在这一共享的栈空间上。由于栈空间是共享的,而多个处理器单元不能同时对同一栈空间进行空间分配操作,因此这种函数调用方法就会存在栈操作同步开销问题。当一个处理器单元需要分配活动记录所需的空间时,它首先需要对共享的栈空间进行加锁,如果加锁成功,则进行正常的空间分配操作,空间分配完成后处理器单元再对栈空间进行解锁操作。如果加锁失败,则该处理器单元就等待,直到加锁成功。这种函数调用方法引入的同步限制了推测多线程中线程发起的数目,并最终影响了程序执行的加速比。另外从程序执行效率的角度来看,栈空间的调用操作也是一个很重要的问题,如果设计不当,就会产生不必要的线程间依赖或者影响线程的发起,并最终影响程序并行执行的加速比。
发明内容
本发明解决的技术问题在于克服共享栈函数调用方法存在的并发性问题,提供一种基于CMP的推测多线程机制下的独立栈函数调用方法,以保证推测多线程下程序中的函数调用能够正确、高效的进行。
本发明是通过以下技术方案来实现:
一种基于CMP的推测多线程机制下的独立栈函数调用方法,处理器在初始化的时候,从共享的内存空间上为每个处理器单元划分出一段私有的内存空间作为栈空间,每个处理器单元记录其对应栈空间的起始地址和结束地址;
每个处理器单元内部设置一个记录其对应栈空间栈顶的内部栈顶寄存器,处理器单元通过update(reg,immed)指令用reg寄存器的值更新内部栈顶寄存器INTERNAL_SP的值,处理器单元通过get(reg,immed)指令用内部栈顶寄存器INTERNAL_SP的值更新reg寄存器的值;其中立即数immed用于区分活动记录的分配和释放这两种情况;
当发生函数调用时,处理器首先执行get($sp,immed)指令以获取保存函数活动记录的栈桢的开始位置,然后通过移动当前处理器栈指针以分配保存函数活动记录所需的内存空间,再调用update$sp,0更新当前处理器单元的内部栈顶寄存器INTERNAL_SP,从而完成当前函数调用的活动记录空间的分配;
当函数调用返回时,编译器首先进行栈指针SP寄存器的恢复,然后调用update$sp,1更新当前处理器单元的内部栈顶寄存器INTERNAL_SP,完成当前函数调用活动记录空间的释放。
所述的处理器单元中设置两个寄存器:起始地址寄存器(stack_start)和结束地址寄存器(stack_end),分别用来记录栈空间的起始地址和结束地址。
所述的update(reg,immed)指令的语义包括如下三种情况:
1)当reg寄存器所指的内存单元在处理器的独立栈空间内,处理器单元用reg寄存器的值更新其内部栈顶寄存器INTERNAL_SP的值,即进行INTERNAL_SP=reg操作;
2)当reg寄存器所指的内存单元不在处理器的独立栈空间内并且immed为0,处理器单元的栈空间溢出,程序异常退出;
3)当reg寄存器所指的内存单元不在处理器的独立栈空间内并且immed不为0,处理器单元的内部栈顶寄存器INTERNAL_SP的值不变。
所述的get(reg,immed)指令的语义为:处理器单元用内部栈顶寄存器INTERNAL_SP的值更新reg寄存器,即进行reg=INTERNAL_SP的操作。
与现有技术相比,本发明具有以下有益的技术效果:
本发明通过将栈空间从逻辑上划分,为每个处理器单元划分出一个私有的内存空间作为独立栈空间,而当处理器单元进行函数调用时,函数栈桢的分配被限定在独立栈空间之内,这样使得多个处理器单元可以同时进行函数调用,而不用对现有的共享栈空间进行加锁和解锁的操作,避免了处理器单元的等待。
由于每个处理器单元的栈指针(SP)不仅可以指向自己的栈空间也可以指向其他处理器单元的栈空间,因此采用栈指针(SP)来记录处理器单元自身栈空间的使用情况是不可行的。必须对每个处理器单元设置自己的内部栈顶寄存器(INTERNAL_SP),用于记录处理器单元自身栈空间的使用情况,以便于函数活动记录空间的分配和释放。在程序的运行过程中,内部栈顶寄存器(INTERNAL_SP)一直指向当前处理器单元栈空间的栈顶,所有在当前栈空间上分配的空间本质上都是通过INTERNAL_SP的移动而实现的。
处理器单元在独立栈空间进行空间分配操作为:函数调用栈桢的分配(相当于传统函数调用方法中的压栈操作)通过get指令、栈指针的移动和update指令共同完成,update指令根据推测多线程执行的特点,充分考虑了各种情况下处理器单元栈指针的变化情况,并作出了相应的处理,其中也包括了栈空间溢出的检测;函数调用栈桢的释放(相当于传统函数调用方法中的退栈操作)通过栈指针的恢复和update指令共同完成,这样就完成了函数的调用。
逻辑上,推测多线程中的函数调用关系是一个复杂的树状链接关系,本发明则给出一个基于CMP的简单高效的实现方法,相比原本栈空间共享的函数调用方法,消除了共享栈函数调用方法中的栈加锁问题,使得线程发起的数目变多,从而提高了程序的并行加速比。
附图说明
图1为基于CMP的推测多线程机制的处理器和编译器的联系框架图;
图2为独立栈函数调用方法中函数活动记录空间分配的流程图;
图3为独立栈函数调用方法中函数活动记录空间释放的流程图;
图4为推测多线程机制下处理单元形成的栈布局和栈指针指向的示意图。
具体实施方式
下面结合附图对本发明作进一步详细说明。所述是对本发明的解释而不是限定。
一种基于CMP的推测多线程机制,程序源码通过编译阶段(包括SUIF编译器前端和编译器后端的处理)生成指令,然后经过汇编链接器处理,生成相应的二进制文件并通过处理器运行。处理器以推测多线程方式运行,得到结果后输出程序运行结果。
一种基于CMP的推测多线程机制(参见图1)下的独立栈函数调用方法,处理器在初始化的时候,从共享的内存空间上为每个处理器单元划分出一个私有的内存空间作为栈空间,每个处理器单元记录其对应的独立栈空间的起始地址和结束地址;
所述的处理器单元通过增设采用了起始地址寄存器(stack_start)和结束地址寄存器(stack_end)来记录相对应的栈空间的起始地址和结束地址;
并为每个处理器单元设置一个记录其对应独立栈空间的栈顶的内部栈顶寄存器(INTERNAL_SP),处理器单元通过update(reg,immed)指令用reg寄存器的值更新内部栈顶寄存器INTERNAL_SP的值,处理器单元通过get(reg,immed)指令用内部栈顶寄存器INTERNAL_SP的值更新reg寄存器的值。
所述的update(reg,immed)指令的语义包括如下三种情况:
1)当reg寄存器所指的内存单元在处理器的独立栈空间内,处理器单元用reg寄存器的值更新其内部栈顶寄存器INTERNAL_SP的值,即进行INTERNAL_SP=reg操作;
2)当reg寄存器所指的内存单元不在处理器的独立栈空间内并且immed为0,处理器单元的栈空间溢出,程序异常退出;
3)当reg寄存器所指的内存单元不在处理器的独立栈空间内并且immed不为0,处理器单元的内部栈顶寄存器INTERNAL_SP的值不变。
所述的get(reg,immed)指令的语义为:处理器单元用内部栈顶寄存器INTERNAL_SP的值更新reg寄存器,即进行reg=INTERNAL_SP的操作。
函数调用的完成涉及到函数活动记录空间的分配与释放两个部分,在当前处理器单元上发生的函数调用,其保存函数活动记录所需的空间是在当前的栈空间上分配的。其具体的分配为:
参见图2,保存函数活动记录的内存空间的分配流程为:
处理器单元首先执行get($sp,immed)指令以获取保存函数活动记录的内存的开始位置或者起始地址,然后通过移动当前处理器单元的栈指针(SP)以分配所需的内存空间,再调用update($sp,0)更新当前处理器单元的内部栈顶寄存器INTERNAL_SP,完成当前函数调用活动记录所需空间的分配;
编译器端进行代码生成时,采用如下的方法:
生成函数调用前代码序列时,如果要将函数参数保存到被调用函数的栈桢中时,首先生成get$SP,0指令,以便获得被调用函数栈桢的起始位置;
生成函数序言代码序列时,在生成了分配函数活动记录的相关指令后,生成update$SP,0指令更新当前处理器单元的内部栈顶寄存器,以便完成函数活动记录所需空间的分配。
参见图3,释放保存函数活动记录的内存空间的流程为:
函数返回时,处理器单元首先从函数的活动记录中恢复栈指针寄存器SP,然后调用update($sp,1)更新当前处理器单元的内部栈顶寄存器INTERNAL_SP,完成当前函数调用活动记录所需空间的释放。
生成函数结语代码序列时,在生成了恢复父函数的栈指针SP的指令后,还要生成update$SP,1指令更新当前处理器单元的内部栈顶寄存器,以便完成保存函数活动记录的内存空间的释放。
参见图4,推测多线程机制下,处理单元TU0与处理单元TU1在发生函数调用时不同情况下,由于各自处理单元对函数活动记录的内存空间的分配或释放而形成的栈布局和栈指针指向的示意:
1)推测线程的发起
假设处理器单元TU0在运行的时候碰到spawn指令(用于发起一个新的线程),并且线程成功发起到处理器单元TU1上,此时TU1将和TU0共享同一个活动记录,TU1自己的栈空间为空,没有任何活动记录,TU1对TU0的活动记录仅有读取权限;此时的栈空间布局如图4(a)所示。
2)推测线程执行函数调用和推测线程退出函数调用
当TU1执行中碰到函数调用的时候,它在自己的栈空间中分配相应大小的空间,继续函数的执行;此时的栈空间布局如图4(b)所示。
当TU1从函数调用中返回的时候,它将相应的活动记录释放,此时它的栈空间为空;情况退回到图4(a)所示的情况。
3)推测线程被验证
当推测线程被验证的时候,如果验证失败,那么推测线程被撤销,推测线程所在的处理器单元被释放,栈空间中的相应活动记录也被清空。如果验证正确,那么确定线程所在的处理器单元转为空闲状态,但是其栈空间中的相关活动记录此时还不能释放,此时推测线程转为以确定的方式执行,它同时在处理器单元TU0和TU1上拥有相应的活动记录;此时的栈空间如图4(c)所示。
4)发起新的推测线程
在TU1被验证正确后,TU1将以确定的方式执行程序的代码,此时如果TU1再此碰到spawn指令,并且线程成功发起到TU0所在的处理器单元上。当TU0以推测的方式执行函数调用时,此时函数的活动记录将在A活动记录之上进行分配;形成图4(d)所示的栈空间布局。
本发明具体采用了Olden基准测试程序对独立栈函数调用方法的性能进行了测试并与共享栈函数调用方法进行了对比。具体对比情况分别如表1、表2所示。
表1独立栈函数调用方法和共享栈函数调用方法在成功发起线程数目方面的对比
测试程序 | 模拟器4核共享栈下成功发起的线程数目 | 模拟器4核独立栈下成功发起的线程数目 | 模拟器8核共享栈下成功发起的线程数目 | 模拟器8核独立栈下成功发起的线程数目 |
mst | 477 | 478 | 485 | 486 |
bh | 115660 | 115949 | 115663 | 115952 |
power | 101126 | 101184 | 101126 | 101192 |
tsp | 135105 | 135105 | 135105 | 135105 |
em3d | 1762 | 2399 | 1829 | 2435 |
bisort | 9113 | 9593 | 9149 | 9629 |
voronoi | 102899 | 102900 | 102900 | 102901 |
health | 3761 | 3765 | 3843 | 3833 |
perimeter | 6605 | 6755 | 6607 | 6757 |
treeadd | 20481 | 20484 | 20484 | 20484 |
表1所示测试程序采用了Olden Benchmark基准测试程序。从以上实验测试数据,可以看出,相对于共享栈函数调用方法,独立栈函数调用方法在很大程度上增加了线程成功发起的数目。
表2独立栈函数调用方法相对于共享栈函数调用方法加速比提升情况
测试程序 | 4核加速比提升 | 8核加速比提升 |
mst | +7.9989% | +8.2432% |
bh | -0.9795% | -0.9804% |
power | -0.5656% | -0.5372% |
tsp | -1.1101% | -1.1101% |
em3d | -1.1921% | +16.7984% |
bisort | +3.4189% | +4.7980% |
voronoi | -1.0517% | -1.0518% |
health | +2.2612% | +2.0920% |
perimeter | +3.6824% | +3.6819% |
treeadd | +2.3972% | +2.3972% |
平均 | +1.0948% | +3.8559% |
表2所示的测试程序采用了Olden Benchmark基准测试程序。从以上的测试结果可以看出,采用独立栈函数调用方法后,大多数程序的加速比都有所提高。这主要是因为独立栈函数调用方法消除了共享栈函数调用方法中的栈加锁问题,使得线程发起的数目变多,从而提高了程序的并行加速比。但是由于程序的并行加速比不仅与成功发起的线程数目相关,而且与所发起的线程体的大小以及线程预计算片段相关,因此对于有些测试程序也出现了并行加速比降低的情况。
Claims (4)
1.一种基于CMP的推测多线程机制下的独立栈函数调用方法,其特征在于,处理器在初始化的时候,从共享的内存空间上为每个处理器单元划分出一段私有的内存空间作为栈空间,每个处理器单元记录其对应栈空间的起始地址和结束地址;
每个处理器单元内部设置一个记录其对应栈空间栈顶的内部栈顶寄存器,处理器单元通过update(reg,immed)指令用reg寄存器的值更新内部栈顶寄存器INTERNAL_SP的值,处理器单元通过get(reg,immed)指令用内部栈顶寄存器INTERNAL_SP的值更新reg寄存器的值;其中立即数immed用于区分活动记录的分配和释放这两种情况;
当发生函数调用时,处理器首先执行get($sp,immed)指令以获取保存函数活动记录的栈桢的开始位置,然后通过移动当前处理器栈指针以分配保存函数活动记录所需的内存空间,再调用update$sp,0更新当前处理器单元的内部栈顶寄存器INTERNAL_SP,从而完成当前函数调用活动记录空间的分配;
当函数调用返回时,编译器首先进行栈指针SP寄存器的恢复,然后调用update$sp,1更新当前处理器单元的内部栈顶寄存器INTERNAL_SP,完成当前函数调用活动记录空间的释放。
2.如权利要求1所述的基于CMP的推测多线程机制下的独立栈函数调用方法,其特征在于,所述的处理器单元中设置两个寄存器:起始地址寄存器(stack_start)和结束地址寄存器(stack_end),分别用来记录栈空间的起始地址和结束地址。
3.如权利要求1所述的基于CMP的推测多线程机制下的独立栈函数调用方法,所述的update(reg,immed)指令的语义包括如下三种情况:
1)当reg寄存器所指的内存单元在处理器的独立栈空间内,处理器单元用reg寄存器的值更新其内部栈顶寄存器INTERNAL_SP的值,即进行INTERNAL_SP=reg操作;
2)当reg寄存器所指的内存单元不在处理器的独立栈空间内并且immed为0,处理器单元的栈空间溢出,程序异常退出;
3)当reg寄存器所指的内存单元不在处理器的独立栈空间内并且immed不为0,处理器单元的内部栈顶寄存器INTERNAL_SP的值不变。
4.如权利要求1所述的基于CMP的推测多线程机制下的独立栈函数调用方法,所述的get(reg,immed)指令的语义为:处理器单元用内部栈顶寄存器INTERNAL_SP的值更新reg寄存器,即进行reg=INTERNAL_SP的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010186162 CN101833476B (zh) | 2010-05-28 | 2010-05-28 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010186162 CN101833476B (zh) | 2010-05-28 | 2010-05-28 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101833476A true CN101833476A (zh) | 2010-09-15 |
CN101833476B CN101833476B (zh) | 2013-08-14 |
Family
ID=42717553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010186162 Expired - Fee Related CN101833476B (zh) | 2010-05-28 | 2010-05-28 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101833476B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138309A (zh) * | 2015-07-09 | 2015-12-09 | 西安交通大学 | 基于cmp的推测多线程机制下的多推测路径线程划分方法 |
CN105930219A (zh) * | 2016-04-22 | 2016-09-07 | 浙江工业大学 | 一种自定义的多线程管控的通信方法 |
US9489405B2 (en) | 2011-06-25 | 2016-11-08 | International Business Machines Corporation | Geometric array data structure |
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107870780A (zh) * | 2016-09-28 | 2018-04-03 | 华为技术有限公司 | 数据处理装置和方法 |
CN108932137A (zh) * | 2018-07-17 | 2018-12-04 | 西安航空学院 | 一种基于推测多线程的汇编级过程间指针分析方法 |
CN109614220A (zh) * | 2018-10-26 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
CN112948000A (zh) * | 2021-03-17 | 2021-06-11 | 星汉智能科技股份有限公司 | 栈空间统计方法、装置及介质 |
CN113608843A (zh) * | 2021-07-08 | 2021-11-05 | 广东开放大学(广东理工职业学院) | 协程实现方法和系统 |
CN114035847A (zh) * | 2021-11-08 | 2022-02-11 | 海飞科(南京)信息技术有限公司 | 用于并行执行核心程序的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1749966A (zh) * | 2005-08-26 | 2006-03-22 | 北京中星微电子有限公司 | 一种含指针参数的函数在不同运行平台间调用的方法 |
JP2007287126A (ja) * | 2006-04-14 | 2007-11-01 | Padauk Technology Co Ltd | マルチマイクロコントローラーシステム、及び、制御方法 |
CN101650688A (zh) * | 2009-08-31 | 2010-02-17 | 中兴通讯股份有限公司 | 一种访问vm_io地址空间的方法和用户态调试器 |
CN101673223A (zh) * | 2009-10-22 | 2010-03-17 | 同济大学 | 基于片上多处理器的线程调度实现方法 |
-
2010
- 2010-05-28 CN CN 201010186162 patent/CN101833476B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1749966A (zh) * | 2005-08-26 | 2006-03-22 | 北京中星微电子有限公司 | 一种含指针参数的函数在不同运行平台间调用的方法 |
JP2007287126A (ja) * | 2006-04-14 | 2007-11-01 | Padauk Technology Co Ltd | マルチマイクロコントローラーシステム、及び、制御方法 |
CN101650688A (zh) * | 2009-08-31 | 2010-02-17 | 中兴通讯股份有限公司 | 一种访问vm_io地址空间的方法和用户态调试器 |
CN101673223A (zh) * | 2009-10-22 | 2010-03-17 | 同济大学 | 基于片上多处理器的线程调度实现方法 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9489405B2 (en) | 2011-06-25 | 2016-11-08 | International Business Machines Corporation | Geometric array data structure |
US9535937B2 (en) | 2011-06-25 | 2017-01-03 | International Business Machines Corporation | Geometric array data structure |
CN105138309B (zh) * | 2015-07-09 | 2018-07-17 | 西安交通大学 | 基于cmp的推测多线程机制下的多推测路径线程划分方法 |
CN105138309A (zh) * | 2015-07-09 | 2015-12-09 | 西安交通大学 | 基于cmp的推测多线程机制下的多推测路径线程划分方法 |
CN107015904B (zh) * | 2016-01-28 | 2022-04-19 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN105930219A (zh) * | 2016-04-22 | 2016-09-07 | 浙江工业大学 | 一种自定义的多线程管控的通信方法 |
CN105930219B (zh) * | 2016-04-22 | 2019-02-05 | 浙江工业大学 | 一种自定义的多线程管控的通信方法 |
CN107870780A (zh) * | 2016-09-28 | 2018-04-03 | 华为技术有限公司 | 数据处理装置和方法 |
WO2018059337A1 (zh) * | 2016-09-28 | 2018-04-05 | 华为技术有限公司 | 数据处理装置和方法 |
CN107870780B (zh) * | 2016-09-28 | 2020-04-28 | 华为技术有限公司 | 数据处理装置和方法 |
CN108932137A (zh) * | 2018-07-17 | 2018-12-04 | 西安航空学院 | 一种基于推测多线程的汇编级过程间指针分析方法 |
CN109614220A (zh) * | 2018-10-26 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
US11106795B2 (en) | 2018-10-26 | 2021-08-31 | Advanced New Technologies Co., Ltd. | Method and apparatus for updating shared data in a multi-core processor environment |
CN109614220B (zh) * | 2018-10-26 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
CN112948000A (zh) * | 2021-03-17 | 2021-06-11 | 星汉智能科技股份有限公司 | 栈空间统计方法、装置及介质 |
CN112948000B (zh) * | 2021-03-17 | 2023-03-03 | 星汉智能科技股份有限公司 | 栈空间统计方法、装置及介质 |
CN113608843A (zh) * | 2021-07-08 | 2021-11-05 | 广东开放大学(广东理工职业学院) | 协程实现方法和系统 |
CN113608843B (zh) * | 2021-07-08 | 2023-08-25 | 广东开放大学(广东理工职业学院) | 协程实现方法和系统 |
CN114035847A (zh) * | 2021-11-08 | 2022-02-11 | 海飞科(南京)信息技术有限公司 | 用于并行执行核心程序的方法和装置 |
CN114035847B (zh) * | 2021-11-08 | 2023-08-29 | 海飞科(南京)信息技术有限公司 | 用于并行执行核心程序的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101833476B (zh) | 2013-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101833476B (zh) | 基于cmp的推测多线程机制下的独立栈函数调用方法 | |
CN100587670C (zh) | 用于受控运行时环境的利用锁膨胀进行线程同步的方法和装置 | |
US8375175B2 (en) | Fast and efficient reacquisition of locks for transactional memory systems | |
US8677331B2 (en) | Lock-clustering compilation for software transactional memory | |
Wang et al. | Concurrent analytical query processing with GPUs | |
CN106598731B (zh) | 基于异构多核架构的运行时系统及其控制方法 | |
CN100538642C (zh) | 用于受管运行时环境的线程同步方法和装置 | |
US8561046B2 (en) | Pipelined parallelization with localized self-helper threading | |
US20090288075A1 (en) | Parallelizing non-countable loops with hardware transactional memory | |
US8726251B2 (en) | Pipelined loop parallelization with pre-computations | |
US8528001B2 (en) | Controlling and dynamically varying automatic parallelization | |
Kim et al. | Automatic speculative doall for clusters | |
CN101681294B (zh) | 用于存储器事务分组的方法和系统 | |
US8001548B2 (en) | Transaction processing for side-effecting actions in transactional memory | |
US20100058344A1 (en) | Accelerating a quiescence process of transactional memory | |
US20100070730A1 (en) | Minimizing memory access conflicts of process communication channels | |
US20100057740A1 (en) | Accelerating a quiescence process of transactional memory | |
Giorgi et al. | An introduction to DF-Threads and their execution model | |
CN101631328A (zh) | 一种对共享资源互斥访问的同步方法、装置和网络设备 | |
US9086911B2 (en) | Multiprocessing transaction recovery manager | |
US8973009B2 (en) | Allocation and control unit for controlling parallel execution of threads on auxiliary processing units | |
CN102521007B (zh) | 一种基于事务调度的网管系统对象并发编辑的方法 | |
Harmanci et al. | Atomic boxes: Coordinated exception handling with transactional memory | |
Wenzel | Shared-memory multiprocessing for interactive theorem proving | |
Jacob et al. | Compiling for the active memory cube |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130814 Termination date: 20160528 |