CN103003791B - 分配共享堆栈的部分的系统和方法 - Google Patents
分配共享堆栈的部分的系统和方法 Download PDFInfo
- Publication number
- CN103003791B CN103003791B CN201180034701.1A CN201180034701A CN103003791B CN 103003791 B CN103003791 B CN 103003791B CN 201180034701 A CN201180034701 A CN 201180034701A CN 103003791 B CN103003791 B CN 103003791B
- Authority
- CN
- China
- Prior art keywords
- thread
- storehouse
- shared
- entry
- pointer
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 72
- 230000004044 response Effects 0.000 claims description 10
- 238000004804 winding Methods 0.000 claims description 6
- 230000015572 biosynthetic process Effects 0.000 claims 1
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 15
- 230000006870 function Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种管理由处理器的多个线程共享的堆栈的系统和方法包含将共享堆栈的第一部分分配给第一线程,以及将所述共享堆栈的第二部分分配给第二线程。
Description
技术领域
本发明大体涉及数据处理,且更特定来说涉及存储器堆栈操作。
背景技术
技术的进步已产生可用于执行各种任务的更强大的计算装置。计算装置通常包含至少一个处理器。为改进计算装置内的指令的处理,处理器有时使用分支预测来预期程序代码内的分支形成。微处理器可使用返回地址堆栈(RAS)来预测程序执行期间遇到的呼叫/返回类型分支的返回地址。RAS可为堆栈(后进先出(LIFO)数据结构)的特殊实施方案。呼叫指令可致使将返回地址推送到RAS上。返回指令可致使从堆栈弹出位于RAS顶部的地址且用于预测返回地址。当分支预测成功时,从RAS顶部弹出的地址可用于重定向处理器的指令提取单元。当分支预测不成功时,可计算正确的返回地址以便正确地重定向指令提取单元。
多线程处理器的每一线程可使用其自身的专门RAS,且每一RAS可具有固定大小。每一线程可依据正由每一线程执行的指令流而使用其固定大小RAS的不同数目的条目。然而,多个返回地址堆栈的使用增加了系统的成本。
发明内容
一特定实施例可允许对共享堆栈的多线程存取。对共享堆栈的存取可依据每一线程的当前需要而动态分配给多个线程。共享堆栈的条目可由线程经由线程指针的操纵来指派和覆写。因为移动线程指针而非移动堆栈地址条目,所以可减少处理和功率需求。共享堆栈可包含比常规静态多线程返回地址堆栈少的条目,因为共享堆栈的条目可在线程之间更有效地分布。较少堆栈条目可转化为裸片上的较小空间需求以及增加的性能。
在一特定实施例中,揭示一种设备,其包含共享堆栈。所述设备进一步包含控制器,所述控制器可操作以选择性地将共享堆栈的第一部分分配给第一线程,且选择性地将共享堆栈的第二部分分配给第二线程。
在另一特定实施例中,一种管理由处理器的多个线程共享的堆栈的方法包含将共享堆栈的第一部分分配给第一线程,以及将共享堆栈的第二部分分配给第二线程。
在另一特定实施例中,一种计算机可读有形媒体存储计算机可执行的指令。所述指令包含可由计算机执行以将共享堆栈的第一部分分配给第一线程且将共享堆栈的第二部分分配给第二线程的指令。
所揭示的实施例中的至少一者提供的特定优点可源自共享堆栈经配置以用于由多个线程进行共享存取。共享堆栈可包含比每一线程存取单独堆栈的系统常规上所需要的数目少的总条目。较小的条目总数可产生裸片上的较小空间需求以及减小的复杂性和功率需求。所揭示的实施例中的一者或一者以上促成的减小的堆栈大小和其它优点可进一步改进存储器分布和堆栈存取效率。
在检视整个申请案后,将明白本发明的其它方面、优点和特征,申请案包含以下部分:附图说明、具体实施方式和权利要求书。
附图说明
图1是经配置以协调对共享堆栈的多线程存取的系统的特定说明性实施例的框图;
图2是包含经配置以存取共享堆栈的经激活线程的系统的特定说明性实施例的框图;
图3是经配置以使线程能够动态存取共享堆栈的条目的系统的特定说明性实施例的框图;
图4是经配置以当第二线程变为作用中且存取共享堆栈时协调对共享堆栈的多线程存取的系统的特定说明性实施例的框图;
图5是经配置以当第二线程获取共享堆栈的条目且准备覆写第一线程的条目时协调对共享堆栈的多线程存取的系统的特定说明性实施例的框图;
图6是经配置以当第二线程覆写第一线程的条目时协调对共享堆栈的多线程存取的系统的特定说明性实施例的框图;
图7是管理由处理器的多个线程共享的堆栈的方法的特定说明性实施例的流程图;
图8是实现对共享堆栈的多线程存取的方法的特定说明性实施例的流程图;以及
图9是包含多个线程上的共享堆栈存取的便携式装置的框图。
具体实施方式
本发明揭示一种系统,其包含由多线程处理器的多个线程共享的存储器堆栈。共享堆栈的条目可由堆栈控制器动态分配给给定线程。利用此分配,共享堆栈的每一线程的所分配部分经设定大小以实现有效堆栈利用率且考虑到公平策略。共享堆栈可包含比各自专用于不同线程的单独堆栈将使用的数目少的堆栈条目。
参看图1,描绘在多个线程之间共享堆栈的系统的特定实施例,且其大体表示为100。系统100包含耦合到存储器104的控制器102。控制器102响应于多线程处理器160。存储器104包含共享堆栈105。控制器102响应于来自多线程处理器160的堆栈操作请求以向多线程处理器160的个别线程分配和解除分配共享堆栈105的部分,且执行用于发出请求的线程的共享堆栈105的堆栈操作。
多线程处理器160可包含可执行一个或一个以上线程的一个或一个以上多线程处理器核心106。举例来说,多线程处理器160可执行第一线程108(线程0)、第二线程110(线程1)、第三线程112(线程2)和第n线程114(线程(n-1))。多线程处理器160可向控制器102发送针对线程108-114中的一者或一者以上的堆栈操作请求。举例来说,多线程处理器160可向控制器102发送推送请求138,其识别产生推送请求138的线程且进一步识别待推送到共享堆栈105的发出请求的线程的部分上的数据。作为另一实例,多线程处理器160可向控制器102发送弹出请求136。弹出请求136可识别多个线程108-114中的发出请求的线程,且请求最近添加到共享堆栈105的发出请求的线程的部分的数据的返回。
控制器102操作以选择性地将共享堆栈105的部分分配给个别线程。举例来说,控制器102可选择性地将共享堆栈105的第一部分116分配给第一线程108,将共享堆栈105的第二部分118分配给第二线程110,将共享堆栈105的第三部分120分配给第三线程112,且将共享堆栈105的第n部分122分配给第n线程114。在特定实施例中,共享堆栈105可包含硬件堆栈。或者,共享堆栈105可实施在例如随机存取存储器(RAM)等其它存储器中。
控制器102响应于服从公平策略140的线程请求而分配共享堆栈105的部分116-122,且经由堆栈指针142维持指示经分配部分116-122的分配和使用的数据。举例来说,公平策略140可指示在线程之间同等地、以用于每一线程的固定大小部分、以用于每一执行中线程的固定大小部分、以用于每一线程的可变大小部分、以用于每一执行中线程的可变大小部分、以相对于堆栈未中的数目的经加权平均大小部分或以某一其它方式分配共享堆栈105。堆栈指针142包含对应于第一线程108的指针162、对应于第二线程110的指针164、对应于第三线程112的指针166和对应于第n线程114的指针168。举例来说,线程指针162-168中的每一者可包含顶部条目指针、堆栈顶部指针、堆栈底部指针、底部条目指针,以及一个或一个以上额外状态位,如参看图2-6所描述。控制器102使用指针162-168来维持使用循环缓冲器分配给每一线程的单独堆栈。
第一部分116可经分配用于对应于第一线程108的堆栈操作。第一部分116可包含可存储第一线程108的一个或一个以上数据元素124的一个或一个以上堆栈条目(未图示)。第二部分118可经分配用于第二线程110的堆栈操作,且可包含可存储第二线程110的一个或一个以上数据元素126的一个或一个以上堆栈条目。第三部分120可经分配用于对应于第三线程112的堆栈操作,且可包含可存储第三线程112的一个或一个以上数据元素128的一个或一个以上堆栈条目。第n部分122可经分配用于对应于第n线程114的堆栈操作,且可包含可存储第n线程114的一个或一个以上数据元素130的一个或一个以上堆栈条目。
在操作期间,多线程处理器160的一个或一个以上线程可产生堆栈操作请求,例如推送请求138。控制器102可接收推送请求138且确定发出请求的线程(例如,第一线程108)是否在其经分配部分(例如,第一部分116)中具有足够空间来容纳数据的添加(例如,到第一线程108的数据元素124)。如果第一部分116不包含足够空间,那么控制器102可根据公平策略140确定是否将额外空间动态分配给第一线程108。举例来说,当其它线程110-114不在使用共享堆栈105的剩余部分时,控制器102可将额外存储器动态分配给第一部分116以容纳对应于第一线程108的额外推送请求。
或者,当多个线程110-114正主动使用共享堆栈105时,控制器102可防止向第一线程108分配多于如公平策略140所确定的共享堆栈105的公平共享份额。共享堆栈的每一部分可使用循环缓冲器来实施。当控制器102确定可满足推送请求138时,控制器102起始存储器操作150,所述存储器操作150可包含将针对推送请求138的所接收数据写入到第一部分116内的第一线程108的数据元素124中的一者。控制器102还可更新第一线程指针162以指示当第一部分已重新设定大小时堆栈的顶部条目的改变。
控制器102还可经配置以从线程中的任一者(例如,从第一线程108)接收弹出请求136。响应于弹出请求136,控制器102经配置以起始存储器操作150,以从第一线程108的数据元素124读取最近添加的数据元素且响应于弹出请求136将数据134返回到多线程处理器160。举例来说,当共享堆栈105实施为函数返回地址堆栈(RAS)时,返回数据134包含对应于所请求线程(例如,第一线程108)的函数返回地址。另外,控制器102可更新第一线程指针162以指示堆栈顶部已弹出且响应于满足弹出请求136而减少第一部分116内的堆栈空间使用的分配。
在控制器102经由第一指令预测函数返回地址的特定实施例中,来自共享堆栈105的误预测函数返回地址导致随后返回经校正的函数返回地址。举例来说,多线程处理器160可接收待执行的指令(例如,返回指令)的形式的弹出请求136。返回执行可花费多个循环来完成。在返回指令的执行开始时,返回地址可从共享堆栈105弹出。此弹出的返回地址可为用于重定向指令提取的推测性地址。随着返回指令继续执行(例如,通过多线程处理器160的管线),多线程处理器160可计算“实际”(例如,非推测性)返回地址。当返回指令已完成执行时,可将推测性与非推测性返回地址进行比较。当返回地址不匹配(例如,已发生分支误预测)时,可使用“实际”返回地址来提取指令。可清除“不正确”提取的指令。
由于控制器102实施公平策略140以响应于推送操作请求138动态分配共享堆栈105的部分,所以共享堆栈105可由多个线程108-114使用和动态分配,使得向每一线程108-114提供共享堆栈105的不同部分,其作为个别堆栈操作以实现共享堆栈105内的总堆栈条目的有效利用。个别线程108-114之间共享堆栈105的部分116-122的分配和解除分配可经由控制器102的操作和对堆栈指针142的控制来执行,使得无需在共享堆栈105内移动数据元素124-130。而是,可在数据元素124-130周围“移动”共享堆栈105的经分配部分116-122。因此,共享堆栈105可被有效使用且可容纳来自多个线程108-114的堆栈操作,并可使用比针对每一线程108-114包含单独专门堆栈的系统少的总堆栈条目。
尽管图1中展示四个线程和四个部分,但共享堆栈105可包含供两个或两个以上线程使用的两个或两个以上部分。并且,虽然存储器104、控制器102和处理器160展示为单独组件,但应了解,此类组件中的两者或两者以上可集成在单一装置上。
参看图2,描绘说明经配置以存取共享堆栈的多个线程中的一者的执行的系统的特定说明性实施例的框图,且其大体表示为200。更特定来说,线程112可变为脱离复位状态而在作用中且可被分配得到共享堆栈105的条目222。图2的线程108、110和112可与图1的线程108、110和112相同,且图2的共享堆栈105可与图1的共享堆栈105相同。线程112可经由使用其指针252、254、256和258而获取共享堆栈105的条目222的所有权。
线程112(例如,线程2)可包含线程112可写入到的顶部条目指针(TEP)252。顶部条目指针252可指向共享堆栈105内的最顶部条目。线程112还可包含堆栈顶部指针(TSP)254。堆栈顶部指针254可指向与线程112相关联的共享堆栈105内的顶部或最近写入的条目。最近写入的条目可包含将在堆栈弹出操作后即刻返回的数据。线程112内包含的堆栈底部指针(BSP)256可指向与线程112相关联的共享堆栈105内的最老有效条目。线程112可进一步包含底部条目指针(BEP)258。底部条目指针258可指向线程112可写入到的共享堆栈105的最底部条目。线程112可进一步包含线程作用中状态位(TASB)260。线程作用中状态位260可指示线程112是否正在执行过程。如果线程112不在执行过程,那么可不向线程112分配共享堆栈105的条目。
线程112进一步包含缠绕堆栈位(WSB)264。缠绕堆栈位264可指示共享堆栈105是否响应于堆栈顶部指针254和/或堆栈底部指针256前进以指向共同条目而已缠绕。举例来说,缠绕堆栈位264可设定为逻辑1值以指示堆栈顶部指针254已缠绕而到达堆栈底部指针256。在缠绕堆栈位264设定为逻辑1值的情况下,后续推送可致使堆栈底部指针256和堆栈顶部指针254两者递增。推送操作可额外致使覆写共享堆栈中的最老条目(由堆栈底部指针256指向)。在线程的缠绕堆栈位264具有逻辑1值的同时发生从共享堆栈105的弹出操作的情况下,缠绕堆栈位264可变换为0值。
线程112还包含空/满位(EFB)262。空/满位262可经配置以指示是否使用共享堆栈105的与线程112相关联的条目。举例来说,当线程112的数据存在于共享堆栈105中时,空/满位262可包含逻辑1值。相反,当线程112无数据存储在共享堆栈105内时,空/满位262可包含逻辑0值。在空/满位262为逻辑0值且进行推送操作的情况下,空/满位262可变换为逻辑1值。在堆栈顶部指针254和堆栈底部指针256两者指向同一条目的同时以及缠绕堆栈位264等于逻辑0值的同时发生弹出操作的情况下,空/满位262可变换为逻辑0值。
一般来说,线程可被分配得到或者“拥有”其顶部条目指针及其底部条目指针所限定的共享堆栈105的条目。线程可将数据写入到此类“所拥有”条目。另外,线程可被认为“利用”其堆栈顶部指针与其堆栈底部指针之间的条目。因此,共享堆栈105的条目可由特定线程拥有,由特定线程拥有和利用,或既不由特定线程拥有也不由特定线程利用。
类似于线程112,线程110(即,线程1)可包含顶部条目指针238和堆栈顶部指针240。线程110可进一步包含堆栈底部指针242和底部条目指针244。线程作用中状态位246、空/满位246和缠绕堆栈位250也可包含在线程110内。
线程108(即,线程0)可包含顶部条目指针224和堆栈顶部指针226。线程108可进一步包含堆栈底部指针228和底部条目指针230。线程作用中状态位232、空/满位234和缠绕堆栈位236也可包含在线程108内。
共享堆栈105可包含存储指令的存储器地址的条目210、212、214、216、218、220和222。条目210、212、214、216、218、220和222可经配置以由线程108、110和112共享。在单一线程操作期间,线程112可变为在作用中(即,开始执行过程)。顶部条目指针252、堆栈顶部指针254、堆栈底部指针256和底部条目指针258可设定为指向条目222,如虚线266所指示。线程112可被认为“拥有”条目222(例如,线程112可将数据写入到条目222)。
空/满位262和缠绕堆栈位264位可设定为指示空条件(例如,逻辑0值),且线程作用中状态位260可设定为指示作用中条件(例如,逻辑1值)。当在线程112上执行的过程进行呼叫时,可将地址在共享堆栈105上推送到由堆栈顶部指针254指示的条目222中。所述地址可指示返回地址。
在线程112上执行的过程进行后续呼叫的情况下,可将另一地址推送到共享堆栈105上进入由堆栈顶部指针254指示的条目222上方的条目220中。所述推送可致使顶部条目指针252和堆栈顶部指针254动态递增以指向新写入的条目220。所述递增可因此向线程112分配共享堆栈105的一个或一个以上额外条目。在线程112上执行的过程指示返回的情况下,可发生从共享堆栈105的弹出操作以检索返回预测地址。弹出操作可致使线程112的堆栈顶部指针254递减,但顶部条目指针252可不递减。
分支误预测可由从共享堆栈105弹出的不准确返回地址引起。作为响应,存储在堆栈105中且与误预测线程相关联的所有数据可被丢弃,且可重新开始线程的堆栈构建。举例来说,当线程112误预测时,可通过将堆栈顶部指针254设定为等于堆栈底部指针256,将空/满位262的状态设定为指示空状态且将缠绕堆栈位264设定为指示无缠绕来起始线程112的重建。当空/满位262等于0值时可避免弹出请求,这可节省处理功率。
图2描绘相对于单一线程的操作。举例来说,线程112可变为脱离复位状态而在作用中。线程112的线程指针可初始指向共享堆栈105的单一条目(例如,条目222)。线程112可因此被认为在变为脱离复位状态而在作用中后即刻已将其自身“锚定”在共享堆栈105的条目222处。当正由线程112执行的过程进行呼叫时,可更新线程指针(例如,“增长”共享堆栈105的线程112的所分配部分),同时存储在共享堆栈105内的地址可不移位。更新线程指针而非移位共享堆栈内的地址可减小功率消耗、硬件需求和总体复杂性。
图3说明处于与图2中所描绘不同的处理状态的系统200的框图,包含作用中线程112执行过程且动态存取共享堆栈105的多个条目216、218、220和222。线程108和110不在作用中。线程112除了条目222外还已被分配得到共享堆栈105的条目216、218和220。条目272可未使用。
顶部条目指针252可指向条目216,如虚线270所指示。如虚线268所指示,堆栈顶部指针254可指向条目220。堆栈底部指针256和底部条目指针258两者指向条目222,如虚线266所指示。如此,线程112可被分配得到或“拥有”条目216、218、220和222,如线270(逻辑上从顶部条目指针252指出)和线266(逻辑上从底部条目指针258指出)所限定。
图3说明将来自共享堆栈105的条目动态分配给线程112。所述分配可通过重新指派线程指针而非移位共享堆栈105中的条目而发生,这可促进改进的存储器分布、改进的功率效率和减少的硬件需求。
图4是系统200的特定说明性实施例的框图,其中线程110(即,线程1)已变为在作用中且已被分配并将其自身锚定在共享堆栈105的未使用条目272内。条目272可位于线程112(即,线程2)所要求的第一条目群组210、212、214和274与第二条目群组216、218、220和222之间。
在变为在作用中(例如,有效执行过程)后,线程110可即刻将其自身锚定在共享堆栈105的条目272内。线程110可将数据元素推送到共享堆栈105中在条目272内。在特定实施例中,条目272可能先前未分配给另一线程或未由另一线程要求。在另一特定实施例中,用于锚定线程的条目可能先前已分配给另一线程。如图4的虚线276所指示,顶部条目指针238、堆栈顶部指针240、堆栈底部指针242和底部条目指针244指向条目272。
线程110可要求另一条目且将额外数据元素推送到共享堆栈105的所要求条目上而进入条目274中。
图4说明动态存取共享堆栈105的多个作用中线程。共享堆栈105的条目可通过修改作用中线程的线程指针而在作用中线程之间动态分配。作用中线程可根据其当前需求而被分配得到共享堆栈105的条目,这可促进有效的堆栈利用。
参看图5,描绘系统200的特定说明性实施例,包含共享堆栈105和处于与图4中所描绘不同的处理状态的三个线程108、110和112。线程110和线程112在作用中且存取共享堆栈105。举例来说,线程110已要求额外条目且正准备覆写线程112的条目。
线程112可拥有共享堆栈105的条目,从虚线270(逻辑上从顶部条目指针252指出)指示的214到虚线266(逻辑上从底部条目指针258指出)指示的条目220。
类似地,线程110可拥有共享堆栈105的条目,由条目222(由逻辑上从顶部条目指针238指出的线276指示)限定且缠绕在堆栈105周围以包含条目210和212(由逻辑上从底部条目指针244指出的线286指示)。线程110可被认为缠绕在共享堆栈105内,因为堆栈底部指针242在堆栈顶部指针240上方。线程110因此拥有条目210、212和222。共享堆栈105的由线程110拥有的部分因此与线程112邻接,且对于线程110不存在将响应于推送而要求的自由条目。
在线程110执行到共享堆栈105上的推送且堆栈顶部指针240正指向与顶部条目指针238相同的条目的情况下,数据可被推送到两个位置中的一者。举例来说,线程110可递增堆栈顶部指针240和顶部条目指针238两者,借此要求新条目和更多堆栈空间来存储新推送的数据,如图6中描述。或者,线程110可缠绕在堆栈顶部指针240周围(将顶部条目指针238留在适当位置)且将数据写入到由其底部条目指针244指向的条目中。选择哪个过程可取决于是否已要求在顶部条目指针238之后的后续条目以及线程110是否已在使用其共享堆栈105的公平共享份额。
在未要求由顶部条目指针238指向的条目222上方的条目220的情况下,线程110可通过更新顶部条目指针238而要求条目220。线程110可进一步将堆栈顶部指针240设定为指向同一条目220。
在另一线程要求由顶部条目指针238指向的条目222上方的条目220且线程110已拥有至少其堆栈105的公平共享份额的情况下,后续推送可不允许线程110要求额外堆栈条目220。而是,堆栈顶部指针240可从顶部条目指针238向底部条目指针244缠绕。
在另一线程要求由顶部条目指针238指向的条目222上方的条目220且线程110尚未拥有其共享堆栈105的公平共享份额的情况下,可允许推送以要求来自另一线程112的条目220。可通过更新线程112的底部条目指针258且更新线程110的顶部条目指针238来要求条目220。线程112的指针也可经更新以反映条目220的“损失”,如参看图6描述。线程110可继续以此方式要求条目直到达到其共享堆栈105的公平共享份额为止。
图5说明多个线程之间的共享堆栈存取。如图5中说明,因为线程112在其共享堆栈105的自身部分内缠绕(即,其堆栈顶部指针268在其堆栈底部指针280下方),所以线程110可要求来自由线程112利用的堆栈条目中部的条目而不是来自由线程112利用的堆栈条目底部的条目。这可导致线程112损失位于其堆栈中部的堆栈条目220而不是来自其堆栈底部的堆栈条目。因此,线程112的堆栈可在条目218下方损坏。因此,堆栈底部指针256可移动到条目218,如图6中说明。因此,线程可根据其需求动态存取共享堆栈105,只要存在足够的条目。在条目变得缺乏的情况下,线程可放弃条目以实现公平堆栈利用(例如,根据公平策略)。
如图5中说明,线程112可“拥有”条目214-220且可“利用”条目216-220和条目214-274。因此,当线程110要求条目220时,条目220由线程112“拥有”且“利用”。
参看图6,描绘系统200的另一特定说明性实施例,包含共享堆栈105以及处于与图5中所描绘不同的处理状态的三个线程108、110和112。举例来说,线程110已要求并覆写线程112的条目。
线程112可拥有共享堆栈105的条目,从虚线270(逻辑上从顶部条目指针252指出)限定的214到虚线280(逻辑上从底部条目指针258指出)限定的条目218。线程112可能已将条目220丢失到线程110。因此,在图6中说明的特定实施例中,线程112可从其共享堆栈105的“经利用”部分的中部丢失条目220。线程112的堆栈底部指针256可已经从指向274(例如,如图5中说明)更新为指向新底部条目218。
类似地,线程110可拥有共享堆栈105的条目,由条目220(由逻辑上从顶部条目指针238指出的线276指示)限定且缠绕在堆栈105周围以包含条目210和212(由逻辑上从底部条目指针244指出的线286指示)。线程110因此拥有条目210、212、220和222。线程112已将条目220丢失到线程110。
根据特定实施例,丢失有效条目220(例如,位于堆栈底部指针256与堆栈顶部指针254之间的条目)的线程112可使比丢失的条目220老的任何条目无效。为此,线程112可将其堆栈底部指针256设定为指向与新递增的底部条目指针258相同的条目。
图6说明共享堆栈105由多个线程存取,在此期间一个线程可要求并覆写另一线程所拥有的条目。可通过修改线程指针而不移动共享堆栈105内的条目来要求所述条目。共享堆栈105可根据线程的当前需求在线程之间动态分配,这可促进有效的堆栈利用。
图7说明管理处理器的多个线程共享的堆栈的方法700的特定说明性实施例的流程图。如本文所描述,说明性方法700可由图1的系统100或图2的系统200执行。
在702处,可将共享堆栈的第一部分分配给第一线程。举例来说,图1的共享堆栈105的第一部分116可分配给第一线程108。为进一步说明,第一线程108可执行需要共享堆栈105的额外空间的过程。第一线程108的指针162可指向共享堆栈105的第一部分116(例如,额外条目)以获得对第一部分116的控制。
在704处,可将共享堆栈的第二部分分配给第二线程。举例来说,可将图1的共享堆栈105的第二部分118分配给第二线程110。为进一步说明,第二线程110可执行需要共享堆栈105的额外空间的过程。第二线程110的指针164可指向共享堆栈105的第二部分118以获得对第二部分118的控制。
在706处,可将共享堆栈的第三部分分配给第三线程。举例来说,可将图1的共享堆栈105的第三部分120分配给第三线程112。为进一步说明,第三线程112可执行需要共享堆栈105的额外空间的过程。第三线程112的指针166可指向共享堆栈105的第三部分120以获得对第三部分120的控制。
在708处,可使用共享堆栈来预测返回地址。举例来说,可使用图1的共享堆栈105来预测包含在返回数据134中的函数返回地址。
应注意,尽管图7的方法700描绘在对共享堆栈的任何使用之前将共享堆栈的部分分配给多个线程,但此排序是仅出于说明性目的且不应认为具有限定性。被分配得到共享堆栈的一部分的任何线程可开始使用其所分配部分而不管何时其它线程被分配得到共享堆栈的其它部分。
图7因此展示管理由处理器的多个线程共享的堆栈的方法700。根据特定实施例,可根据线程请求动态分配共享堆栈的条目。所述动态分配可以转化为增加的堆栈效率、裸片上的较小空间需求以及改进的性能的方式促进分支预测。
图8说明实现对共享堆栈的多线程存取的方法800的特定说明性实施例的流程图。如本文所描述,说明性方法800可由图1的系统100或图2的系统200执行。
在802处,可在存储器的一部分内形成共享堆栈。举例来说,可在存储器104内形成图1的共享堆栈105。
在804处,可动态分配共享堆栈的第一部分和第二部分。举例来说,可将图1的共享堆栈105的第一部分116动态分配给第一线程108。为进一步说明,第一线程108可执行需要共享堆栈105的额外空间的过程。第一线程108的指针162可指向共享堆栈105的第一部分116(例如,额外条目)以获得对第一部分116的控制。类似地,可将图1的共享堆栈105的第二部分118分配给第二线程110。为进一步说明,第二线程110可执行需要共享堆栈105的额外空间的过程。第二线程110的指针164可指向共享堆栈105的第二部分118以获得对第二部分118的控制。
在806处,可调整第一部分或第二部分或两者的大小。举例来说,可根据第一线程108的请求动态调整第一部分116的大小。第一线程108的指针162可指向第一部分116的条目以缩减或增长第一部分116从而满足所述请求。类似地,可根据第二线程110的请求动态调整第二部分118的大小。第二线程110的指针164可指向第二部分118的条目以缩减或增长第二部分118从而满足所述请求。
或者,在808处,可固定第一部分、第二部分或两者的大小。举例来说,可固定图1的第一部分116、第二部分118或两者的大小。为进一步说明,可将线程108、110、112和114中的一者或一者以上的指针162-168(例如,顶部条目指针和底部条目指针)设定为特定固定值。所述固定值可经选择使得共享堆栈105在线程108、110、112和114之间同等分割。
在810处,可根据公平策略限制分配给第一线程的第一部分的大小。举例来说,可根据图1的公平策略140限制分配给第一线程108的第一部分116的大小。为进一步说明,可基于与第一部分116相关联的条目的最大数目和共享堆栈105的使用百分比中的至少一者来限制第一部分116的大小。举例来说,当第一线程108已满足或超过公平共享份额阈值时,公平策略140可限制第一部分116的大小和第一线程106可存取的相关联条目数目。可通过将共享堆栈105中的条目总数除以当前作用中线程108、110、112和114的数目来确定公平共享份额阈值。
在812处,可利用处理器执行第一线程和第二线程。举例来说,多线程处理器核心106中的一者可执行第一线程108和第二线程110。
在814处,可允许第一线程相对于共享堆栈的第一部分的元素推送或弹出返回地址。举例来说,可允许第一线程108在第一部分116的数据元素124中的一者处执行返回地址的弹出136或推送138。
在816处,可允许第二线程相对于共享堆栈的第二部分的元素执行返回地址的推送或弹出。举例来说,可允许第二线程110在第二部分118的第二数据元素126处执行返回地址的弹出136或推送138。
在818处,可使用第一线程覆写第二部分内的数据元素。举例来说,可使用第一线程108覆写第二部分118的第二数据元素126。为了说明,第一线程108可执行推送138,推送138致使覆写第二部分118中的最老条目。
图8因此说明在多个线程上共享堆栈存取的方法800。所述方法包含根据每一线程的当前请求动态分配对共享堆栈的存取。可由线程通过操纵属于线程的指针来获取和覆写共享堆栈的条目。因为更新线程指针而不是移动存储在共享堆栈内的地址条目,所以可减少处理和功率消耗。并且,实现等效性能所需的较少堆栈条目数目可进一步促进裸片上的较小空间需求。改进的存储器分布可进一步增加堆栈性能。
参看图9,描绘包含实施共享堆栈964的多线程存取的逻辑的电子装置的特定说明性实施例的框图,且其一般表示为900。装置900包含处理器,例如多线程处理器910,其耦合到存储器932。多线程处理器910包含可由多个线程存取的共享堆栈964,例如返回堆栈。在说明性实例中,多线程处理器910包含图1-6中的一者或一者以上中描绘的系统,且可执行图7和8的方法中的一者或一者以上,或其任何组合。应注意,尽管图9中说明的实施例描绘便携式电子装置,但如本文揭示的共享堆栈部分的分配可在包含处理器的任何装置处实施。举例来说,装置900或其某一部分可改为集成到机顶盒、音乐播放器、视频播放器、娱乐单元、导航装置、通信装置、个人数字助理(PDA)、固定位置数据单元、计算机、服务器,或具有拥有返回地址堆栈的至少一个处理器的任何其它装置中。
存储器932可为存储指令950的计算机可读有形媒体,指令950由计算机的执行导致共享堆栈的第一部分向第一线程的分配。举例来说,指令950可由多线程处理器910执行,从而致使将共享堆栈964的第一部分分配给第一线程。指令950可进一步经执行从而致使将共享堆栈964的第二部分分配给第二线程。
图9还展示耦合到多线程处理器910且耦合到显示器928的显示器控制器926。编码器/解码器(CODEC)934也可耦合到多线程处理器910。扬声器936和麦克风938可耦合到CODEC934。
图9还指示无线控制器940可耦合到多线程处理器910且耦合到无线天线942。在特定实施例中,多线程处理器910、显示器控制器926、存储器932、CODEC934和无线控制器940包含在系统级封装或芯片上系统装置922中。在一特定实施例中,输入装置930和电源944耦合到芯片上系统装置922。此外,在特定实施例中,如图9中所说明,显示器928、输入装置930、扬声器936、麦克风938、无线天线942及电源944在芯片上系统装置922外部。然而,显示器928、输入装置930、扬声器936、麦克风938、无线天线942及电源944中的每一者可耦合到芯片上系统装置922的组件,例如接口或控制器。
所属领域的技术人员将进一步了解,可将结合本文所揭示的实施例而描述的各种说明性逻辑块、配置、模块、电路和算法实施为电子硬件、计算机软件或两者的组合。上文已大体依据其功能性描述各种说明性组件、块、配置、模块、电路和算法。所述功能性是实施为硬件还是软件取决于特定应用及施加于整个系统的设计约束。所属领域的技术人员可针对每一特定应用以不同方式实施所描述功能性,但所述实施决策不应被解释为导致偏离本发明的范围。
结合本文中所揭示的实施例描述的方法或算法的指针可直接体现于硬件中、体现于由处理器执行的软件模块中或体现于两者的组合中。软件模块可驻留在随机存取存储器(RAM)、快闪存储器、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、寄存器、硬盘、可装卸式盘、压缩光盘只读存储器(CD-ROM),或此项技术中已知的其它形式的存储媒体中。示范性存储媒体耦合到处理器使得处理器可从存储媒体读取信息和将信息写入到存储媒体。在替代方案中,存储媒体可与处理器成一体式。处理器及存储媒体可驻留在专用集成电路(ASIC)中。ASIC可驻留在计算装置或用户终端中。在替代方案中,处理器及存储媒体可作为离散组件驻留在计算装置或用户终端中。
提供对所揭示实施例的先前描述以使所属领域的技术人员能够制作或使用所揭示的实施例。所属领域的技术人员将容易了解对这些实施例的各种修改,且本文界定的原理可在不脱离本发明的范围的情况下应用于其它实施例。因此,本发明无意限于本文中所展示的实施例,而是将赋予本发明与如由所附权利要求书界定的原理和新颖特征一致的可能的最广范围。
Claims (28)
1.一种经配置以管理由处理器的多个线程共享的堆栈的设备,所述设备包括:
包括条目的共享堆栈;以及
控制器,其可操作以选择性地将所述共享堆栈的第一部分分配给第一线程、选择性地将所述共享堆栈的第二部分分配给第二线程、动态地调整所述第一部分以及所述第二部分的大小以允许所述第一线程要求在所述调整之前在所述第二部分内的最老条目,所述调整是基于所述第一线程对所述第一部分的使用、所述第二线程对所述第二部分的使用以及公平策略的。
2.根据权利要求1所述的设备,其中所述第一部分不与所述第二部分邻接。
3.根据权利要求1所述的设备,其中所述第一部分与所述第二部分邻接。
4.根据权利要求1所述的设备,其中所述共享堆栈选自由硬件堆栈和随机存取存储器RAM组成的群组。
5.根据权利要求1所述的设备,其进一步包括处理器,所述处理器包含经配置以产生与所述共享堆栈相关联的堆栈操作请求的多线程处理器核心。
6.根据权利要求1所述的设备,其中所述控制器操作以响应于堆栈操作请求。
7.根据权利要求6所述的设备,其中所述堆栈操作请求包含推送和弹出中的至少一者。
8.根据权利要求6所述的设备,其中所述堆栈操作请求包含函数返回地址。
9.根据权利要求1所述的设备,其中所述控制器经配置以将所述第一线程以及所述第二线程与各自的指针组相关联,并且其中所述控制器经配置以通过更新所述各自的指针组来调整所述第一部分和所述第二部分的大小,以允许所述第一线程要求在所述调整之前在所述第二部分内的最老条目。
10.根据权利要求1所述的设备,其中所述第一部分和所述第二部分是基于所述公平策略动态分配的。
11.根据权利要求1所述的设备,其中所述控制器包含:
底部条目指针,其经配置以指向所述第一线程经配置以写入到的所述共享堆栈的最底部条目;
顶部条目指针,其经配置以指向所述第一线程经配置以写入到的所述共享堆栈的最顶部条目;
堆栈顶部指针,其经配置以指向与每一线程相关联的所述共享堆栈的最近写入的条目;以及
堆栈底部指针,其经配置以指向与所述第一线程相关联的所述共享堆栈的最老有效条目。
12.根据权利要求1所述的设备,其中所述控制器包含经配置以指示所述第一线程是否正执行过程的线程作用中状态位。
13.根据权利要求1所述的设备,其中所述控制器包含经配置以指示是否使用与所述第一线程相关联的所述共享堆栈的条目的空位。
14.根据权利要求1所述的设备,其中所述控制器包含经配置以指示所述第一线程已在所述共享堆栈内缠绕的缠绕堆栈位。
15.根据权利要求1所述的设备,其中所述控制器经配置以预测函数返回地址,其中第一指令确定所述返回地址,且其中共享堆栈未中提示第二指令确定所述函数返回地址。
16.根据权利要求1所述的设备,其进一步包括选自由机顶盒、音乐播放器、视频播放器、娱乐单元、导航装置、通信装置、个人数字助理PDA、固定位置数据单元和计算机组成的群组的装置,所述控制器和存储器中的至少一者集成到所述装置中。
17.一种管理由处理器的多个线程共享的堆栈的方法,所述方法包括:
将共享堆栈的第一部分分配给第一线程;以及
将所述共享堆栈的第二部分分配给第二线程;以及
动态地调整所述第一部分以及所述第二部分的大小以允许所述第一线程要求在所述调整之前在所述第二部分内的最老条目,所述调整是基于所述第一线程对所述第一部分的使用、所述第二线程对所述第二部分的使用以及公平策略的。
18.根据权利要求17所述的方法,其进一步包括使用所述第一线程覆写所述第二部分内的数据元素。
19.根据权利要求17所述的方法,其进一步包括允许所述第一线程相对于所述共享堆栈的所述第一部分的元素进行推送和弹出返回地址这两个操作中的至少一者。
20.根据权利要求19所述的方法,其进一步包括允许所述第二线程相对于所述共享堆栈的所述第二部分的元素进行推送和弹出返回地址这两个操作中的至少一者。
21.根据权利要求17所述的方法,其进一步包括在存储器的一部分内形成所述共享堆栈。
22.根据权利要求17所述的方法,其进一步包括使用所述共享堆栈来预测返回地址。
23.根据权利要求17所述的方法,其进一步包括动态分配所述第一部分和所述第二部分。
24.根据权利要求17所述的方法,其进一步包括调整所述第一部分和所述第二部分中的至少一者的大小。
25.根据权利要求17所述的方法,其进一步包括固定所述第一部分和所述第二部分中的至少一者的大小。
26.根据权利要求17所述的方法,其进一步包括根据所述公平策略限制分配给所述第一线程的所述第一部分的大小。
27.根据权利要求26所述的方法,其中根据所述公平策略限制所述第一部分的所述大小包括:基于与所述第一线程相关联的最大条目数目和所述共享堆栈的使用百分比中的至少一者限制所述第一部分的所述大小。
28.一种经配置以管理由处理器的多个线程共享的堆栈的设备,所述设备包括:
用于将共享堆栈的第一部分分配给第一线程的装置;以及
用于将所述共享堆栈的第二部分分配给第二线程的装置;以及
用于动态地调整所述第一部分以及所述第二部分的大小以允许所述第一线程要求在所述调整之前在所述第二部分内的最老条目的装置,所述调整是基于所述第一线程对所述第一部分的使用、所述第二线程对所述第二部分的使用以及公平策略的。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/837,572 US20120017214A1 (en) | 2010-07-16 | 2010-07-16 | System and method to allocate portions of a shared stack |
US12/837,572 | 2010-07-16 | ||
PCT/US2011/044092 WO2012009587A1 (en) | 2010-07-16 | 2011-07-15 | System and method to allocate portions of a shared stack |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103003791A CN103003791A (zh) | 2013-03-27 |
CN103003791B true CN103003791B (zh) | 2016-04-20 |
Family
ID=44583742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180034701.1A Expired - Fee Related CN103003791B (zh) | 2010-07-16 | 2011-07-15 | 分配共享堆栈的部分的系统和方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20120017214A1 (zh) |
EP (1) | EP2593861B1 (zh) |
JP (1) | JP5841142B2 (zh) |
KR (1) | KR101378390B1 (zh) |
CN (1) | CN103003791B (zh) |
WO (1) | WO2012009587A1 (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9213551B2 (en) * | 2011-03-11 | 2015-12-15 | Oracle International Corporation | Return address prediction in multithreaded processors |
US9354886B2 (en) | 2011-11-28 | 2016-05-31 | Apple Inc. | Maintaining the integrity of an execution return address stack |
US9405544B2 (en) * | 2013-05-14 | 2016-08-02 | Apple Inc. | Next fetch predictor return address stack |
CN104424032A (zh) * | 2013-08-29 | 2015-03-18 | 华为技术有限公司 | 多线程处理器中分支预测资源的调度方法、设备和系统 |
CN105094750B (zh) * | 2014-04-25 | 2018-08-21 | 华为技术有限公司 | 一种多线程处理器的返回地址预测方法和装置 |
CN104572448A (zh) * | 2014-12-23 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种线程堆栈的使用情况的实现方法和装置 |
US10108423B2 (en) * | 2015-03-25 | 2018-10-23 | International Business Machines Corporation | History buffer with single snoop tag for multiple-field registers |
US9852075B2 (en) | 2015-11-20 | 2017-12-26 | International Business Machines Corporation | Allocate a segment of a buffer to each of a plurality of threads to use for writing data |
US9442674B1 (en) | 2015-11-20 | 2016-09-13 | International Business Machines Corporation | Using a plurality of sub-buffers and a free segment list to allocate segments to a plurality of threads to use for writing data |
US9571578B1 (en) | 2015-11-20 | 2017-02-14 | International Business Machines Corporation | Utilization based multi-buffer self-calibrated dynamic adjustment management |
US9483410B1 (en) | 2015-11-20 | 2016-11-01 | International Business Machines Corporation | Utilization based multi-buffer dynamic adjustment management |
US10747539B1 (en) | 2016-11-14 | 2020-08-18 | Apple Inc. | Scan-on-fill next fetch target prediction |
US10649786B2 (en) * | 2016-12-01 | 2020-05-12 | Cisco Technology, Inc. | Reduced stack usage in a multithreaded processor |
US10099103B2 (en) | 2017-01-17 | 2018-10-16 | Acushnet Company | Golf club having damping treatments for improved impact acoustics and ball speed |
CN107316132A (zh) * | 2017-06-09 | 2017-11-03 | 浪潮金融信息技术有限公司 | 流程控制方法及装置、计算机可读存储介质、终端 |
CN112055853B (zh) * | 2018-03-31 | 2024-04-09 | 美光科技公司 | 用于多线程自调度可重新配置计算架构的电路及系统 |
US11748207B2 (en) | 2021-09-27 | 2023-09-05 | Rubrik, Inc. | Scalable group backup in relational databases |
US20230095814A1 (en) * | 2021-09-27 | 2023-03-30 | Rubrik, Inc. | Server group fetch in database backup |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101176061A (zh) * | 2005-04-22 | 2008-05-07 | Nxp股份有限公司 | 数字信号处理器上多任务的实现 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6386035A (ja) * | 1986-09-30 | 1988-04-16 | Ricoh Co Ltd | スタツクのプ−ル管理方式 |
JP2001043093A (ja) * | 1999-07-30 | 2001-02-16 | Kenji Kobayashi | スタックを共用するタスク・コンテキスト・スイッチ |
JP2003271448A (ja) * | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
US20040103248A1 (en) * | 2002-10-08 | 2004-05-27 | Hass David T. | Advanced telecommunications processor |
US8037224B2 (en) * | 2002-10-08 | 2011-10-11 | Netlogic Microsystems, Inc. | Delegating network processor operations to star topology serial bus interfaces |
US20050066305A1 (en) * | 2003-09-22 | 2005-03-24 | Lisanke Robert John | Method and machine for efficient simulation of digital hardware within a software development environment |
US20060095719A1 (en) * | 2004-09-17 | 2006-05-04 | Chuei-Liang Tsai | Microcontroller having partial-twin structure |
US8230423B2 (en) * | 2005-04-07 | 2012-07-24 | International Business Machines Corporation | Multithreaded processor architecture with operational latency hiding |
US7769962B2 (en) * | 2005-12-12 | 2010-08-03 | Jeda Technologies, Inc. | System and method for thread creation and memory management in an object-oriented programming environment |
US20070282928A1 (en) * | 2006-06-06 | 2007-12-06 | Guofang Jiao | Processor core stack extension |
JP4770602B2 (ja) * | 2006-06-23 | 2011-09-14 | 株式会社デンソー | 電子機器 |
WO2008155807A1 (ja) * | 2007-06-20 | 2008-12-24 | Fujitsu Limited | 情報処理装置と負荷調停制御方法 |
JP2009251681A (ja) * | 2008-04-01 | 2009-10-29 | Canon Inc | スタック領域の拡張方法及びプログラム |
-
2010
- 2010-07-16 US US12/837,572 patent/US20120017214A1/en not_active Abandoned
-
2011
- 2011-07-15 JP JP2013519842A patent/JP5841142B2/ja not_active Expired - Fee Related
- 2011-07-15 KR KR1020137003867A patent/KR101378390B1/ko not_active IP Right Cessation
- 2011-07-15 CN CN201180034701.1A patent/CN103003791B/zh not_active Expired - Fee Related
- 2011-07-15 WO PCT/US2011/044092 patent/WO2012009587A1/en active Application Filing
- 2011-07-15 EP EP11735953.9A patent/EP2593861B1/en not_active Not-in-force
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101176061A (zh) * | 2005-04-22 | 2008-05-07 | Nxp股份有限公司 | 数字信号处理器上多任务的实现 |
Also Published As
Publication number | Publication date |
---|---|
EP2593861B1 (en) | 2018-05-02 |
JP5841142B2 (ja) | 2016-01-13 |
EP2593861A1 (en) | 2013-05-22 |
WO2012009587A1 (en) | 2012-01-19 |
KR101378390B1 (ko) | 2014-03-24 |
JP2013534681A (ja) | 2013-09-05 |
CN103003791A (zh) | 2013-03-27 |
US20120017214A1 (en) | 2012-01-19 |
KR20130069727A (ko) | 2013-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103003791B (zh) | 分配共享堆栈的部分的系统和方法 | |
US20140359225A1 (en) | Multi-core processor and multi-core processor system | |
CN103034617B (zh) | 用于实现可重构系统配置信息存储的缓存结构和管理方法 | |
US8521981B2 (en) | Memory power tokens | |
US20080040724A1 (en) | Instruction dispatching method and apparatus | |
US7487271B2 (en) | Method and apparatus using buffer pools and arrays of buffer pointers for sharing memory in a multiprocessor system | |
US20110161637A1 (en) | Apparatus and method for parallel processing | |
JP5309703B2 (ja) | 共有メモリの制御回路、制御方法及び制御プログラム | |
US8914571B2 (en) | Scheduler for memory | |
US9081576B2 (en) | Task scheduling method of a semiconductor device based on power levels of in-queue tasks | |
CN116010299B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
US9483264B2 (en) | Trace-based instruction execution processing | |
EP2506158A1 (en) | Cross-region access method for embedded file system | |
CN105224258B (zh) | 一种数据缓冲区的复用方法与系统 | |
CN105453066A (zh) | 处理器和存储器控制方法 | |
KR102202575B1 (ko) | 메모리 관리 방법 및 장치 | |
CN114116533B (zh) | 利用共享存储器存储数据的方法 | |
CN116107635A (zh) | 命令分发器、命令分发方法、调度器、芯片、板卡、设备 | |
CN102541808A (zh) | Soc芯片系统及实现Soc芯片中可配置缓冲器的方法 | |
US9122565B2 (en) | Memory controller and memory control method | |
CN105573920B (zh) | 存储空间管理方法和装置 | |
CN102298553B (zh) | 根据用户响应时间来管理存储器的设备和方法 | |
KR101191530B1 (ko) | 복수의 이종 코어를 포함하는 멀티코어 프로세서 시스템 및 그 제어 방법 | |
CN116897581A (zh) | 计算任务调度装置、计算装置、计算任务调度方法和计算方法 | |
CN111290850A (zh) | 一种数据存储方法、装置及设备 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160420 Termination date: 20210715 |