CN108733409B - 执行推测线程的方法以及片上多核处理器 - Google Patents

执行推测线程的方法以及片上多核处理器 Download PDF

Info

Publication number
CN108733409B
CN108733409B CN201710272266.5A CN201710272266A CN108733409B CN 108733409 B CN108733409 B CN 108733409B CN 201710272266 A CN201710272266 A CN 201710272266A CN 108733409 B CN108733409 B CN 108733409B
Authority
CN
China
Prior art keywords
cache
thread
speculative
data
tls
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.)
Active
Application number
CN201710272266.5A
Other languages
English (en)
Other versions
CN108733409A (zh
Inventor
李艳华
宋昆鹏
王海彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201710272266.5A priority Critical patent/CN108733409B/zh
Publication of CN108733409A publication Critical patent/CN108733409A/zh
Application granted granted Critical
Publication of CN108733409B publication Critical patent/CN108733409B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供了执行推测多线程的方法和片上多核处理器CMP,该CMP包括处理器核、缓存控制器和缓存,该方法包括:处理器核接收推测多线程程序,该推测多线程程序包括至少一个推测线程;处理器核根据该推测多线程程序,生成用于该推测线程访存该缓存的第一请求消息,该第一请求消息包括第一标签,第一标签包括推测线程的信息;缓存控制器根据该第一请求消息对该缓存进行访存操作,其中,该缓存包括第二标签,第二标签用于记录访存该缓存的线程的信息。本申请实施例可以实现对中间数据和安全数据的隔离,能够同时利用TLS模式和非TLS模式共同完成一个任务,实现推测线程与非推测线程的兼容。

Description

执行推测线程的方法以及片上多核处理器
技术领域
本申请涉及计算机领域,并且更具体地,涉及计算机领域中的执行推测多线程的方法以及片上多核处理器(Chip Multiprocessor,CMP)。
背景技术
在未来低功耗高效能的CMP的设计中,无法通过提高频率来获得性能的提升,而是通过集成更多的低电压低功耗的核、通过并行度的提高来兼顾性能和功耗。但并行化能解决整体性能的问题,却无法解决单线程性能弱的问题。随着越来越多的核被集成到一个芯片上,一方面在实际运行的过程中会有一些核处于空闲的状态;另一方面,受功耗的限制集成到片上的单个核计算能力相对较弱,导致片上多核的单线程能力受到制约。
现有技术中一个有效的方案是使用推测多线程技术(Thread LevelSpeculation,TLS),利用片上的空闲资源加速单线程和串行程序的执行。现有技术中的一种对推测多线程机制进行支持的系统结构通过在层1缓存(L1Cache)和层2缓存(L2Cache)之间增加一个层1.5缓存(L1.5Cache)来保存推测线程执行过程中的推测数据,通过专门的推测总线进行推测数据共享的通道,并通过选择开关来控制数据是否从增加的L1.5Cache中读取。该现有技术能够让每个核在推测执行模式和普通的多核处理器模式之间进行切换,要么只能让一些核处于TLS模式并进行TLS运行,要么只能让一些核处于非TLS模式并进行普通多核运行,无法同时利用TLS模式和非TLS模式的核共同完成一个任务,即无法实现推测线程与非推测线程(即普通线程)的兼容。
发明内容
本申请提供了执行推测多线程的方法和片上多核处理器CMP,能够同时利用TLS模式和非TLS模式共同完成一个任务,实现推测线程与非推测线程的兼容。
一方面,提供了一种执行推测多线程的方法,其特征在于,所述方法由片上多核处理器CMP执行,所述CMP包括处理器核、缓存控制器和缓存,所述方法包括:
所述处理器核接收推测多线程程序,所述推测多线程程序包括至少一个推测线程;
所述处理器核根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的第一请求消息,所述第一请求消息包括第一标签,所述第一标签包括所述推测线程的信息;
所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,其中,所述缓存包括第二标签,所述第二标签用于记录访存所述缓存的线程的信息。
本申请实施例通过在推测线程的请求消息中添加第一标签,在缓存中加入第二标签,并根据第一标签和第二标签,实现推测线程对缓存的访存操作。本申请实施例不需要在缓存中重新建立用于保存推测线程产生的中间数据的特定缓存区,就能够将该中间数据保存在缓存中,即缓存中能够同时存储该中间数据和非推测线程的安全数据,因而本申请实施例可以实现对中间数据和安全数据的隔离,能够同时利用TLS模式和非TLS模式共同完成一个任务,实现推测线程与非推测线程的兼容。
在一种可能的实现方式中,所述CMP包括处理器簇,所述处理器簇包括至少两个所述处理器核、所述缓存控制器和所述缓存,所述缓存包括TLS缓存、L2缓存和与所述至少一个所述处理器核一一对应的L1缓存。
本发明实施例中,处理器簇中还可以包括开关,当开关处于开启状态时,处理器簇中的至少一个处理器核可以形成一个虚拟的“大核”,执行推测多线程程序。当开关处于关闭状态下时,处理器簇中的每个处理器核可以执行普通线程。
在一种可能的实现方式中,所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,包括:
若所述第一请求消息表示推测线程请求读所述缓存中的第一数据,则所述缓存控制器根据所述第一标签和所述第二标签,依次在所述处理器核的对应的L1缓存、所述处理器核所在的处理器簇中的其它处理器核的L1缓存和所述处理器簇中的第一TLS缓存中查询是否存在所述第一数据;
若查询到所述第一数据,则所述处理器核停止查询并读取所述第一数据;
若在所述L1缓存和所述第一TLS缓存中没有查询到所述第一数据,则将所述第一请求消息更新为非推测线程请求读缓存中的所述第一数据。
在将所述第一请求消息更新为非推测线程请求读缓存中的第一数据后,可以直接对缓存中的L2缓存进程查询。如果在L2缓存中没有查询到该第一数据,则通过内存控制器在内存中查询该第一数据。
可理解,在对缓存中的数据进行读取后,可以不改变缓存中的第二标签。
在一种可能的实现方式中,所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,包括:
若所述第一请求消息表示推测线程请求向所述缓存写入第二数据,则所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,并根据所述第一标签更新所述第二标签。
这里,可以将第二标签更新为请求中的第一标签。
在一种可能的实现方式中,所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,包括:若所述L1缓存中已经存满,则将从所述L1缓存中替换出来的数据写入到所述TLS缓存中。
在一种可能的实现方式中,所述方法还包括:确定所述第二数据是否与除所述推测线程之外的其它推测线程冲突,若发生冲突,则撤销并重新运行所述其它推测线程。
在一种可能的实现方式中,所述推测多线程程序还包括至少一个非推测线程,所述方法还包括:
所述处理器核根据所述推测多线程程序,生成用于所述非推测线程访问所述缓存的第二请求消息,所述第二请求消息包括第三标签,所述第三标签用于记录所述非推测线程的信息;所述缓存控制器根据所述第二请求消息对所述缓存进行访存操作。
这里,第三标签可以包括该非推测线程的线程号和线程的状态信息,例如时间戳、停止标记位、结束位等。
在一种可能的实现方式中,所述缓存控制器根据所述第二请求消息对所述缓存进行访存操作,包括:
若所述第二请求消息表示非推测线程请求读所述缓存中的第三数据,则所述缓存控制器根据所述第三标签和所述第二标签,依次在所述处理器核所在的处理器簇中的第一L2缓存和所述CMP中除所述处理器核所在的处理器簇之外的其它处理器簇中的第二L2缓存中查询是否存在所述第二数据,其中,所述缓存包括所述第一L2缓存和所述第二L2缓存;
若所述处理器核查询到所述第二数据,则所述处理器核停止查询并读取所述第三数据。
在一种可能的实现方式中,所述缓存控制器在所述处理器核所在的处理器簇中的第一L2缓存中查询是否存在所述第三数据之前,还包括:
所述缓存控制器根据所述第三标签和所述第二标签,在所述处理器核的L1缓存中查询是否存在所述第三数据。
在一种可能的实现方式中,所述缓存控制器根据所述第二请求消息对所述缓存进行访存操作,包括:
若所述第二请求消息表示非推测线程请求向所述缓存写入第四数据,则所述缓存控制器将所述第四数据写入所述处理器核的L1缓存、所述处理器所在的处理器簇中的TLS缓存和L2缓存中,并根据所述第三标签更新所述第二标签。这里,可以将第二标签更新为请求中的第三标签。
在一种可能的实现方式中,所述方法还包括:确定所述第四数据是否与所述推测线程冲突,若发生冲突,则撤销并重新运行所述推测线程。
在一种可能的实现方式中,所述缓存还包括TLS缓存联合缓冲,所述方法还包括:
所述TLS缓存联合缓冲将至少两个所述L1缓存中存储的同一个地址的数据整合为第五数据,其中,所述第五数据为所述同一个地址中的距当前时间最近的数据;
所述TLS缓存联合缓冲将所述第五数据存储至所述TLS缓存中;
所述TLS缓存联合缓冲将至少两个所述L1缓存中的所述地址的缓存行设置为无效。
在一种可能的实现方式中,所述缓存中还包括第一缓存状态目录,所述第一缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第一缓存状态,所述第一缓存状态包括所述缓存块被所述处理器簇修改、独占、共享或无效。
在一种可能的实现方式中,所述缓存中还包括第二缓存状态目录,所述第二缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第二缓存状态,所述第二缓存状态包括所述缓存块被所述处理器簇中的每个处理器核修改、独占、共享或无效。
这样,本申请实施例采用基于MESI协议两级目录缓存一致性协议(CacheCoherence,CC)在缓存中维护两个缓存状态目录,其中一个缓存状态目录用于标记缓存块在处理器簇之间的状态,另一个缓存状态目录用于记录缓存块在一个簇内部的几个处理器核之间的状态。
在一种可能的实现方式中,所述处理器核根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的第一请求消息,包括:
所述处理器核根据所述推测多线程程序,更新任务表,所述任务表用于记录所述至少一个推测线程的信息;
所述处理器根据所述任务表,生成所述第一请求消息。
在一种可能的实现方式中,所述任务表包括所述推测线程的线程号、状态信息和上下文信息,其中,所述线程号用于标识所述推测线程,所述状态信息用于表示所述推测线程的运行状态,所述上下文信息包括所述推测线程的程序计数器PC、栈指针和指向下一个空闲任务表项的指针。
在一种可能的实现方式中,所述第一标签包括所述推测线程的线程号和状态信息,所述第二标签包括访存所述缓存的线程的线程号和状态信息,其中,所述线程号用于标识线程,所述状态信息用于表示线程的运行状态。
本申请实施例中,第二标签还可以包括为缓存行中存储的每个字设置的写(write)标记位和暴露读(Exposed-Read)标记位,Write和Exposed-Read标记位用于标记该缓存行在推测状态下是否能够被其他线程读或者写。
在一种可能的实现方式中,所述缓存中还包括线程表,所述线程表用于记录所述缓存中关联的推测线程和/或非推测线程的信息,其中,所述线程表包括线程的线程号、状态信息、缓存行和任务表指针,其中,所述线程号用于标识所述线程,所述状态信息用于指示线程的运行状态,所述缓存行包括在所述缓存中属于所述线程的缓存行。
在一种可能的实现方式中,所述状态信息包括线程活跃标记位、时间戳、停止标记位、结束位、安全位、提交位和撤销位中的至少一种。
第二方面,提供了一种片上多核处理器CMP,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法,具体的,该CMP包括用于执行上述第一方面或第一方面任意可能的实现方式中的方法的模块。
第三方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
附图说明
图1示出了本申请一个实施例的CMP执行应用的示意图。
图2示出了本申请一个实施例的处理器簇的示意性框图。
图3示出了本申请一个实施例的任务表中的一个表项的示意图。
图4示出了本申请一个实施例的负载/存储(Load/Store)队列的示意图。
图5示出了本申请一个实施例的缓存结构的示意图。
图6示出了本申请一个实施例的线程表的示意图。
图7示出了本申请一个实施例的四类读写操作的示意图。
图8示出了本申请一个实施例的执行推测多线程的方法的示意性流程图。
图9示出了本申请另一个实施例的执行推测多线程的方法的示意性流程图。
图10示出了本申请一个实施例的片上多核处理器的示意性框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
推测多线程技术可以利用空闲的资源加速单线程和串行程序的执行,其核心思想是通过编译器或者专用的硬件机构将串行代码划分成一个个线程,并让这些线程在多核上并行地执行;执行过程中缓存推测线程的执行数据并监测线程之间的数据和控制冲突。如果推测线程之间没有产生冲突,则直接提交线程,将缓存的线程执行数据写到存储系统中;否则推测线程需要停止或重新执行。通过有限的软硬件支持,可以将常规的片上多核系统加强为支持推测多线程技术的片上多核系统,并利用片上空闲的计算资源来加速单线程和串行程序的执行。
推测多线程技术也是一种自动化并行方式,与并行编译相比,它的优势在于,可以放松串行代码并行时依赖性的严格约束,大大增加了代码的并行机会。当然,获得这种优势的代价是需要软件或者硬件的额外支持(程序分析、推测结果缓存、检测、回滚机制等),而且在推测错误时也会引入额外的回退开销。但只要保证一定的推测成功率,推测多线程技术对串行程序执行带来的性能提升也是显著的。
但TLS并没有最终传播和流行开来,其原因有两个:
(1)、TLS执行需要特别的硬件或软件的支持,其软件开销大,因此多数TLS都是通过硬件或者软硬件结合来实现,从应用角度来看适用性不好。
(2)、TLS能效性不好。TLS使用多个核加速一个线程,但很多情况下加速比都不高,从能效性角度考虑并不划算。这固然有TLS往往用于加速不容易并行化的串行线程,任务本身串行性限制了并行性,通过自动并行化难以获得有效的加速比;但也有TLS本身开销较大的因素。
但TLS最大的优点是能够通过自动化并行来提升串行程序的性能,这是目前大部分计算模式所不具备的突出优点。如果能够有效的克服上述两个问题,TLS不失为一个加速大规模CMP单线程性能的好方法。尤其是考虑到大规摸CMP上具有丰富的冗余资源。
背景技术中所述的现有技术在某种程度上通过有限的技术扩展能够实现兼容性的推测多线程执行支持(其处理器核可以在TLS模式和普通模式之间切换)。但其并没有实现推测数据和非推测数据的隔离,因此它无法实现推测线程与非推测线程的兼容,即无法同时利用TLS模式和非TLS模式的核共同完成一个任务,要么只能让一些核处于TLS模式并进行TLS运行;要么只能让一些核处于非TLS模式并进行普通多核运行。
本申请实施例通过兼容性设计,在通用的多核处理器上进行有限的硬件扩展,从而让多核处理器的每个处理器核可以在TLS模式和常规模式(即非TLS模式)之间自由切换,通过TLS兼容的缓存一致性设计和自动化的推测多线程执行框架,可以将任意若干个处理器核切换为TLS模式并加速一个线程,形成一个“虚拟”大核。进一步地,可以让上述“虚拟”的大核和普通的处理器核一起,共同完成一个任务,实现粗粒度和细粒度的并行。
图1示出了本申请一个实施例的CMP执行应用的示意图。本申请实施例中,CMP中可以包括多个簇,每个簇中包括至少一个处理器核。图1中所示的CMP包含64个处理器核,其中4个处理器核组成一个处理器簇13,处理器簇13中的处理器核共享L2缓存,本申请实施例中,也可以将处理器簇简称为簇。图1中所示的应用包含了重线程(Heavy Thread)11和轻线程12,重线程11任务重运行慢。在执行应用时,将簇13中的4个处理器核切换为TLS模式,并构成一个“虚拟”的大核以执行重线程11,普通处理器核(即CMP中的非TLS模式的处理器核)还是保持高能效的普通模式以执行轻线程12。图1中的MC0、MC1、MC2、MC3分别为内存控制器(Memory Control,MC),用于控制处理器核对内存进行访存。
图2示出了本申请实施例的执行推测多线程的一个处理器簇的示意性框图。图2所示的簇13中包括4个处理器核P0 201、P1 202、P2 203和P3 204,和与每个处理器核对应的L1缓存211、212、213和214,其中,每个处理器核对应的L1缓存中包括指令缓存L1I和数据缓存L1D。图2中所示的簇中还包括缓存控制器22、TLS缓存23、TLS缓存联合缓存24、L2缓存25和开关26。图2中所示出的各个模块之间的带箭头的线条表示各个模块之间的连接方式,各个模块之间可以进行数据和信令的传输。图2中的延伸至簇13外部的线条表示CMP中的各个簇之间可以进行数据和信令的传输。图2中所示出的各个线条具体可以为连接总线,本申请实施例对此不作限定。
本申请实施例中,对CMP中的每个处理器核(也可以称为处理节点)进行兼容性的硬件扩展,即仅在原有硬件的基础上增加必要的硬件,且不影响原有硬件的功能。这里,原有硬件指的是仅能够执行普通线程的普通的处理器核,不影响原有硬件的功能指的是在经过兼容性的硬件扩展之后,每个处理器核还可以运行在普通模式,执行普通线程。这样,可以让每个处理器核既能够作为普通的处理器核执行轻线程,又能够作为TLS处理器核来执行TLS线程。具体地,可以通过图2中所示的开关26对簇13进行TLS模式和非TLS模式之间的切换。
具体地,在每个处理器核中增加对派生(Spawn)推测线程、提交(Commit)推测线程指令的支持,并增加一个管理推测线程的任务表(TaskHolder Array),该任务表可以用于保存推测线程的信息。
在一种可能的实现方式中,任务表可以包括线程的线程号(LID)、状态信息和上下文信息。其中,所述线程为推测线程和/或非推测线程。所述线程号用于标识所述线程,所述状态信息用于表示所述线程的运行状态,所述上下文信息可以包括推测线程的程序计数器PC、栈指针和指向下一个空闲任务表项的指针。
本发明实施例中,状态信息包括线程的线程活跃标记位(LIDOFF)、时间戳(TimeStamp,TS)、停止标记位(Stalled,St)、结束位(Finished,F)、安全位(Safe,Sa)、提交位(Commited,Co)和撤销位(Killed,K)中的至少一种。其中,时间戳为执行线程的时间标记。LIDOFF用于指示线程是否活跃,即线程正在被处理器执行或者被处理器挂起。停止标记位用于指示线程是否暂停,其值可以在每次线程发送冲突且需要暂停时,设置为1。安全位用于指示推测线程是否安全,结束位用于指示推测线程是否结束,提交位用于指示是否提交该推测线程,撤销位用于指示是否撤销该推测线程。
图3示出了该任务表中的一个表项的示意图。该表项中包括线程号、时间戳、线程活跃标记LIDOFF、停止标记位、推测线程的程序计数器(Program Counter,PC)、栈指针(Stack Pointer,SP)、指向下一个空闲任务表项的位置的指针(Nextfree,NF)和该线程的其它状态信息,例如安全位和结束位。这里,LID可以是处理器核对线程的编号,用于标识每个线程。在图3所示的表项中,TS、LID、LIDOFF、St、Sa、F、PC、SP和NF字段的比特数可以分别为61、6、1、1、1、1、32、32和3。
图4示出了本申请实施例的用于执行推测多线程的负载/存储(Load/Store)队列的示意图。图4中的队列中的每个项包括处理器核的一个线程对缓存的访存请求(也可以称为读写请求)。本申请中的该Load/Store队列在现有的Load/Store队列的原始Tag的基础上增加了一个标签Tag,如图4中的阴影部分所示。Tag的内容可以为线程号LID和线程的状态信息,例如LIDOFF。相应的,可以用一个寄存器来指示当前在处理器核中执行的线程的LID。这样,可以通过Tag来分别标记不同的线程对相同的内存地址进行的读写操作,因而处理器核可以在线程等待或挂起的时候进行线程切换,实现一个处理器核同时对多个推测线程的处理,提高执行效率。
本申请实施例中,还可以将缓存扩展为多版本的缓存(Multi-versioned Cache)来保存推测数据。推测数据为推测线程执行过程中产生的中间数据。因为推测线程有可能与其他线程产生数据冲突或者控制冲突,在推测线程提交前,都处于“推测执行”的状态,其产生的中间数据为“推测数据”,不能直接将写到共享的Cache和内存当中。
本申请实施例中,对L1数据缓存、L1指令缓存和部分L2缓存进行扩展。为了实现CMP对非推测线程的兼容,实现推测线程和普通线程之间的数据共享和一致性,本申请实施例将现有技术中的L2缓存划分为了两部分,其中一部分仅为L2缓存的一小部分,用于处理器核之间共享推测数据的TLS缓存,其余的一大部分不进行TLS扩展,用于非推测线程间缓存普通数据。而推测线程的临时执行数据主要缓存在L1缓存中。当L1缓存中存储不下时,即当L1缓存已满时,L1缓存中的部分缓存行被替换出L1缓存,并保存在TLS缓存中。这里,TLS缓存是分布式共享的,通过片上互联网络(Network on Chip,NoC)互联。在TLS缓存都已经存满,不能够保存推测数据的情况下,推测线程只能挂起等待或重新执行。
图5示出了本申请实施例的缓存结构的示意图。缓存中以缓存行(Cache Line)为存储单位,缓存行中存储数据或信令。本申请实施例在缓存行中的标签中增加了额外的标签信息,包括线程号LID和线程的状态信息,还可以包括为缓存行中存储的每个字设置的写(write)标记位和暴露读(Exposed-Read)标记位,Write和Exposed-Read标记位用于标记该缓存行在推测状态下是否能够被其他线程读或者写。
本申请实施例中,在每个簇中的缓存中都可以建立一个线程表,该线程表用来记录缓存中关联的各个线程(包括推测线程和非推测线程)的信息。线程表中可以包括线程的线程号、状态信息、缓存行和任务表指针,其中,所述缓存行包括在所述缓存中属于所述线程的缓存行。
图6示出了本申请实施例的一个线程表的示意图。线程表可以以线程号(LID)为索引,记录了该推测线程的状态信息,例如LIDOFF、时间戳基(TS Base)、提交(Commit,Co)位,撤销(Killed,K)位,Cache中属于该线程的缓存行(表示为Lines位),该线程对应的任务表指针(Task Holder Pointer)等。图6中字段LIDOFF、TS Base、Co、K、NF和Task HolderPointer的比特数可以分别为1、33、1、1、5和5,lines的比特数可以为x,x为与该线程相关的缓存行的数目。
本申请实施例中,在每个簇中还可以包括一个TLS缓存联合缓冲(Cache CombineBuffer),用于将至少两个所述L1缓存中存储的同一个地址的数据整合为一个数据,其中,该数据可以为所述同一个地址中的距当前时间最近的数据,然后TLS缓存联合缓冲将该数据存储至所述TLS缓存中,并将至少两个所述L1缓存中的所述地址的缓存行设置为无效。
例如,当P0、P1和P3对应的L1缓存中的同一个地址b的缓存行中存储有数据5、0和6,每个数据都具有标签,分别记录了写入数据的线程和该线程的状态信息此时,TLS缓存联合缓冲可以将5、0和6中的一个数据的缓存行存储到TLS缓存中,并将其余两个数据的缓存行设置为无效。当标签中包括时间戳时,TLS缓存联合缓冲可以将最新的(即距当前时间最近的)数据存储到TLS缓存中。
为了将推测数据隔离在CMP中的簇内部,并让TLS线程和普通线程可以共同工作,还需要对处理器核之间的缓存一致性协议进行扩展。本申请实施例采用两级目录缓存一致性协议(Cache Coherence,CC),该两级目录缓存一致性协议是基于(Modified ExclusiveShared Invalidate,MESI)协议的扩展。
可理解,两级目录缓存一致性协议需要在缓存中维护两个缓存状态目录,其中一个缓存状态目录用于标记缓存块在处理器簇之间的状态,例如该缓存块被一个簇独占、被一个簇修改、被所有簇共享或者无效。这时,该级缓存状态目录中的缓存块是以簇为粒度标记的,每个簇被视为一个整体(即可以认为一个簇为一个处理器大核)。另一个缓存状态目录用于记录缓存块在一个簇内部的几个处理器核之间的状态,例如该缓存块被一个处理器核独占、被一个处理器核修改、被所有处理器核共享或者无效。
由于一个处理器簇内部具有多个处理器核,多个处理器核可以同时处理多个线程。在本申请实施例的进行了硬件扩展的CMP中,一个簇内可能同时存在推测线程和非推测线程,因此,可以将簇内部的访存操作分为四类,分别为推测读(s_ld)、推测写(s_st)、非推测读(c_ld)和非推测写(c_st)。
图7示出了本申请实施例中对簇内对上述四类读写操作的处理的示意图。图7中的两条横线之间的部分代表一个簇内的缓存,上方的部分代表该簇外的缓存。
具体的,操作1为推测读操作。其中,向上的箭头表示对处理器核自身的L1缓存进行查找,向下弯曲的箭头表示依次对簇内的除该处理器核之外的其它处理器核的L1缓存进行查找或对簇内共享的TLS缓存进行查找。如果查找到要读的数据,则读取该数据,如果没有,则将该推测读操作转为图7中所示的非推测读操作2。操作2中,向上的箭头表示在簇内的L2缓存中进行读操作,向上弯曲的箭头表示对其它簇内的L2缓存进行读操作。
操作3为非推测读操作。在执行操作3时,可以先在处理器核自身的L1中查询是否存在要读取的数据,如果没有,则在该处理器核所在的簇内的L2缓存中查询是否存在,如操作3中向上的箭头所示。如果存在该数据,则读取该数据。如果不存在,则在其它簇内的L2缓存中查询是否存在,如操作3中向上完全的箭头所示。
操作4为推测写操作。本申请实施例中,采用延迟更新(Lazy Update)策略。优先将数据写入到L1缓存中,如操作4中向上的箭头所示。当L1缓存中已满时,将从L1缓存中替换出来的数据写入到TLS缓存中,如操作4中向下弯曲的箭头所示。
本申请实施例中,写入到L1缓存中的数据将被用于进行冲突判断。如果写入的该数据与其他处理器核执行的推测线程发生冲突,则与写入的该数据冲突的推测线程将被撤销,并且重新运行已经被撤销的线程。
操作5为非推测写操作。本申请实施例中,采用急切更新(Eager Update)策略,直接将要写入的数据写入到TLS缓存和L2缓存中。写入的该数据也将被用于进行冲突判断。如果写入的该数据与其他处理器核执行的推测线程发生冲突,则与写入的该数据冲突的推测线程将被撤销,并且重新运行已经被撤销的线程。
图8示出了本申请一个实施例的CMP执行推测多线程的方法的示意性流程图。应理解,图8示出了执行推测多线程的方法的步骤或操作,但这些步骤或操作仅是示例,本申请实施例还可以执行其他操作或者图8中的各个操作的变形。此外,图8中的各个步骤可以按照与图8呈现的不同的顺序来执行,并且有可能并非要执行图8中的全部操作。图8所示的方法包括:
401、在程序代码中加入TLS标签。具体的,在编程的过程中,对于任务中的线程,可以在该线程对应的代码前后插入TLS标签。插入TLS标签的过程类似于Openmp编程中插入#OMP Parallel语句,这里不再赘述。
402、编译器根据TLS标签生成TLS程序和非TLS程序。
具体地,编译器分析插入了TLS标签的程序的数据依赖和控制依赖关系,并根据预先设置的TLS设定参数,将加入了TLS标签的代码部分,插入Spawn/Commit指令,并最终生成TLS可兼容的代码,即同时生成TLS程序代码和非TLS程序代码。这里,经过编译器编译过的TLS程序代码中包括至少一个推测线程。或者,经过编译器编译过的TLS程序代码中还可以包括至少一个非推测线程。
本申请实施例中,编译器也需要进行TLS兼容扩展,即编译器能够识别TLS标签,并对程序进行相应的操作,例如分析TLS部分的程序特征,分析数据依赖和控制依赖关系,插入Spawn/Commit指令等。
403、操作系统加载程序,并识别程序中的TLS标签。当操作系统判断有TLS标签,即程序为TLS程序时,下一步执行404,当操作系统判断没有TLS标签时,即程序为非TLS程序时,下一步执行407。
本申请实施例中,操作系统也需要进行TLS兼容扩展,即操作系统要自TLS线程识别、调度和管理,以及簇的TLS模式切换和管理方面提供支持。
404、操作系统选择用于执行TLS程序的处理器簇,并迁移走处理器簇上现有的线程。然后打开处理器簇中的开关,清空流水线、L1缓存和TLS缓存。这里,操作系统可以根据线程的优先级选择用于执行该线程的处理器簇。
405、处理器簇执行TLS程序。
这里,处理器簇可以为上文中描述的处理器簇或簇。图9示出了本申请实施例的执行TLS线程的方法600的示意性流程图。所述处理器簇包括至少两个所述处理器核、所述缓存控制器和所述缓存,所述缓存包括TLS缓存、L2缓存和与所述至少一个所述处理器核一一对应的L1缓存。该方法600包括:
610、所述处理器核接收TLS程序,所述TLS程序包括至少一个推测线程。
620、所述处理器核根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的第一请求消息,所述第一请求消息包括第一标签,所述第一标签用于记录所述推测线程的信息。
图4中的Load/Store队列中的每个项可以包括上述第一请求消息。具体的可以参加图4中的描述,为避免重复,这里不再赘述。
630所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,其中,所述缓存包括第二标签,所述第二标签用于记录访存所述缓存的线程的信息。
具体的,缓存可以参见上文中对缓存的描述,为避免重复,这里不再赘述。
在一种可能的实现方式中,所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,包括:
若所述第一请求消息表示推测线程请求读所述缓存中的第一数据,则所述缓存控制器根据所述第一标签和所述第二标签,依次在所述处理器核的对应的L1缓存、所述处理器核所在的处理器簇中的其它处理器核的L1缓存和所述处理器簇中的第一TLS缓存中查询是否存在所述第一数据;
若查询到所述第一数据,则所述处理器核停止查询并读取所述第一数据;
若在所述L1缓存和所述第一TLS缓存中没有查询到所述第一数据,则将所述第一请求消息更新为非推测线程请求读缓存中的所述第一数据。
具体的,缓存控制器可以将缓存中的第二标签与第一标签进行匹配,当匹配成功时,可以认为查询到了所述第一数据。例如,线程1和线程2均在地址为a的缓存中存储了数据0和10。数据0和10分别具有第二标签来记录写入该数据的线程的信息。例如,数据0的第二标签记录了线程1的线程号LID和线程1的状态信息,例如LIDOFF、ST等等。数据10的第二标签记录了线程2的线程号LID和线程2的状态信息,例如LID、ST等等。当线程1需要访问地址a的数据时,此时访问请求中携带第一标签。缓存控制器可以根据第一标签和缓存中的第二标签进行查询,最终读取数据0。
又例如,当线程3要访问地址a中的数据时,缓存控制器根据线程3的第一标签和缓存中存储的线程表,确定与线程1与线程3相关联,并根据线程1的第一标签和缓存中的第二标签进行查询,最终读取数据0。
可理解,在对缓存中的数据进行读取后,可以不改变缓存中的第二标签。
这里,第一标签可以参见图4中标签的描述,为避免重复,这里不再赘述。
在一种可能的实现方式中,所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,包括:
若所述第一请求消息表示推测线程请求向所述缓存写入第二数据,则所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,并根据所述第一标签更新所述第二标签。
这里,可以将第二标签更新为请求中的第一标签。
在一种可能的实现方式中,所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,包括:若所述L1缓存中已经存满,则将从所述L1缓存中替换出来的数据写入到所述TLS缓存中。
在一种可能的实现方式中,所述方法还包括:确定所述第二数据是否与除所述推测线程之外的其它推测线程冲突,若发生冲突,则撤销并重新运行所述其它推测线程。
在一种可能的实现方式中,所述推测多线程程序还包括至少一个非推测线程,所述方法还包括:
所述处理器核根据所述推测多线程程序,生成用于所述非推测线程访问所述缓存的第二请求消息,所述第二请求消息包括第三标签,所述第三标签用于记录所述非推测线程的信息;所述缓存控制器根据所述第二请求消息对所述缓存进行访存操作。
这里,第三标签可以包括该非推测线程的线程号和状态信息,例如时间戳、停止标记位、结束位等。
在一种可能的实现方式中,所述缓存控制器根据所述第二请求消息对所述缓存进行访存操作,包括:
若所述第二请求消息表示非推测线程请求读所述缓存中的第三数据,则所述缓存控制器根据所述第三标签和所述第二标签,依次在所述处理器核所在的处理器簇中的第一L2缓存和所述CMP中除所述处理器核所在的处理器簇之外的其它处理器簇中的第二L2缓存中查询是否存在所述第二数据,其中,所述缓存包括所述第一L2缓存和所述第二L2缓存;
若所述处理器核查询到所述第二数据,则所述处理器核停止查询并读取所述第三数据。
在一种可能的实现方式中,所述缓存控制器在所述处理器核所在的处理器簇中的第一L2缓存中查询是否存在所述第三数据之前,还包括:
所述缓存控制器根据所述第三标签和所述第二标签,在所述处理器核的L1缓存中查询是否存在所述第三数据。
在一种可能的实现方式中,所述缓存控制器根据所述第二请求消息对所述缓存进行访存操作,包括:
若所述第二请求消息表示非推测线程请求向所述缓存写入第四数据,则所述缓存控制器将所述第四数据写入所述处理器核的L1缓存、所述处理器所在的处理器簇中的TLS缓存和L2缓存中,并根据所述第三标签更新所述第二标签。这里,可以将第二标签更新为请求中的第三标签。
在一种可能的实现方式中,所述方法还包括:确定所述第四数据是否与所述推测线程冲突,若发生冲突,则撤销并重新运行所述推测线程。
具体的,对所述缓存进行推测读、推测写、非推测读和非推测写的访存操作可以参加上述图7中的描述,为避免重复,这里不再赘述。
在一种可能的实现方式中,所述处理器核根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的请求消息,包括:
所述处理器核根据所述推测多线程程序,更新任务表,所述任务表用于记录所述至少一个推测线程的信息;
所述处理器根据所述任务表,生成所述请求消息。
具体地,任务表的描述可以参加上述图3中的描述,为避免重复,这里不再重复。
406、TLS程序执行完毕,清空TLS缓存和L1数据缓存(L1D Cache),并将簇中的开关关闭。此时,处理器簇切换为非TLS模式,下一步执行408。
407、操作系统将非TLS程序调度至普通簇中执行。
408、判断程序是否结束。如果程序没有结束,执行403,继续识别程序中是否还存在TLS标签,直至程序结束。
因此,本申请实施例通过在推测线程的请求消息中添加第一标签,在缓存中加入第二标签,并根据第一标签和第二标签,实现推测线程对缓存的访存操作。本申请实施例不需要在缓存中重新建立用于保存推测线程产生的中间数据的特定缓存区,就能够将中间数据保存在缓存中,即缓存中能够同时存储该中间数据和非推测线程的安全数据,因而本申请实施例可以实现对中间数据和安全数据的隔离,能够同时利用TLS模式和非TLS模式共同完成一个任务,实现推测线程与非推测线程的兼容。
图10示出了本申请一个实施例的一种片上多核处理器CMP800的示意性框图。所述CMP800包括处理器核810、缓存控制器820和缓存830,
所述处理器核810用于接收推测多线程程序,所述推测多线程程序包括至少一个推测线程;
所述处理器核810用于根据所述推测多线程程序,生成用于所述推测线程访存所述缓存830的第一请求消息,所述第一请求消息包括第一标签,所述第一标签包括所述推测线程的信息;
所述缓存控制器820用于根据所述第一请求消息对所述缓存830进行访存操作,其中,所述缓存830包括第二标签,所述第二标签用于记录访存所述缓存830的线程的信息。
本申请实施例通过在推测线程的请求消息中添加第一标签,在缓存中加入第二标签,并根据第一标签和第二标签,实现推测线程对缓存的访存操作。本申请实施例不需要在缓存中重新建立用于保存推测线程产生的中间数据的特定缓存区,就能够将该中间数据保存在缓存中,即缓存中能够同时存储该中间数据和非推测线程的安全数据,因而本申请实施例可以实现对中间数据和安全数据的隔离,能够同时利用TLS模式和非TLS模式共同完成一个任务,实现推测线程与非推测线程的兼容。
在一种可能的实现方式中,所述CMP800包括处理器簇,所述处理器簇包括至少两个所述处理器核810、所述缓存控制器820和所述缓存830,所述缓存830包括TLS缓存、L2缓存和与所述至少一个所述处理器核810一一对应的L1缓存。
在一种可能的实现方式中,所述缓存控制器820具体用于:
若所述第一请求消息表示推测线程请求读所述缓存830中的第一数据,则所述缓存控制器820根据所述第一标签和所述第二标签,依次在所述处理器核810的对应的L1缓存、所述处理器核810所在的处理器簇中的其它处理器核810的L1缓存和所述处理器簇中的第一TLS缓存中查询是否存在所述第一数据;
若查询到所述第一数据,则所述处理器核810停止查询并读取所述第一数据;
若在所述L1缓存和所述第一TLS缓存中没有查询到所述第一数据,则将所述第一请求消息更新为非推测线程请求读缓存830中的所述第一数据。
在一种可能的实现方式中,所述缓存控制器820具体用于:
若所述第一请求消息表示推测线程请求向所述缓存830写入第二数据,则所述缓存控制器820将所述第二数据写入所述处理器核810的L1缓存中,并根据所述第一标签更新所述第二标签。
在一种可能的实现方式中,所述缓存控制器820具体用于:
若所述L1缓存中已经存满,则将从所述L1缓存中替换出来的数据写入到所述TLS缓存中。
在一种可能的实现方式中,还包括监测单元,用于确定所述第二数据是否与除所述推测线程之外的其它推测线程冲突,若发生冲突,则所述处理器核810撤销并重新运行所述其它推测线程。
在一种可能的实现方式中,所述缓存830还包括TLS缓存联合缓冲,所述TLS缓存联合缓冲用于:
将至少两个所述L1缓存中存储的同一个地址的数据整合为第五数据,其中,所述第五数据为所述同一个地址中的距当前时间最近的数据;
将所述第五数据存储至所述TLS缓存中;
将至少两个所述L1缓存中的所述地址的缓存行设置为无效。
在一种可能的实现方式中,所述缓存830中还包括第一缓存状态目录,所述第一缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第一缓存状态,所述第一缓存状态包括所述缓存块被所述处理器簇修改、独占、共享或无效。
在一种可能的实现方式中,所述缓存830中还包括第二缓存状态目录,所述第二缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第二缓存状态,所述第二缓存状态包括所述缓存块被所述处理器簇中的每个处理器核810修改、独占、共享或无效。
在一种可能的实现方式中,所述处理器核810具体用于:
根据所述推测多线程程序,更新任务表,所述任务表用于记录所述至少一个推测线程的信息;
根据所述任务表,生成所述第一请求消息。
在一种可能的实现方式中,所述任务表包括所述推测线程的线程号、状态信息和上下文信息,其中,所述线程号用于标识所述推测线程,所述状态信息用于表示所述推测线程的运行状态,所述上下文信息包括所述推测线程的程序计数器PC、栈指针和指向下一个空闲任务表项的指针。
在一种可能的实现方式中,所述第一标签包括所述推测线程的线程号和状态信息,所述第二标签包括访存所述缓存830的线程的线程号和状态信息,其中,所述线程号用于标识线程,所述状态信息用于表示线程的运行状态。
在一种可能的实现方式中,所述缓存830中还包括线程表,所述线程表用于记录所述缓存830中关联的推测线程和/或非推测线程的信息,其中,所述线程表包括线程的线程号、状态信息、缓存行和任务表指针,其中,所述线程号用于标识所述线程,所述状态信息用于指示线程的运行状态,所述缓存行包括在所述缓存中属于所述线程的缓存行。
在一种可能的实现方式中,所述状态信息包括线程活跃标记位、时间戳、停止标记位、结束位、安全位、提交位和撤销位中的至少一种。
图10所示的片上多核处理器CMP800能够实现前述图8或图9所示的方法实施例对应的各个过程,具体的,该CMP800可以参见上述图8或图9中的描述,为避免重复,这里不再赘述。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (28)

1.一种执行推测多线程的方法,其特征在于,所述方法由片上多核处理器CMP执行,所述CMP包括处理器核、缓存控制器和缓存,所述方法包括:
所述处理器核接收推测多线程程序,所述推测多线程程序包括至少一个推测线程;
所述处理器核根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的第一请求消息,所述第一请求消息包括第一标签,所述第一标签包括所述推测线程的信息;
所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,其中,所述缓存包括第二标签,所述第二标签用于记录访存所述缓存的线程的信息。
2.根据权利要求1所述的方法,其特征在于,所述CMP包括处理器簇,所述处理器簇包括至少两个所述处理器核、所述缓存控制器和所述缓存,所述缓存包括TLS缓存、L2缓存和与所述至少一个所述处理器核一一对应的L1缓存。
3.根据权利要求2所述的方法,其特征在于,所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,包括:
若所述第一请求消息表示推测线程请求读所述缓存中的第一数据,则所述缓存控制器根据所述第一标签和所述第二标签,依次在所述处理器核的对应的L1缓存、所述处理器核所在的处理器簇中的其它处理器核的L1缓存和所述处理器簇中的第一TLS缓存中查询是否存在所述第一数据;
若查询到所述第一数据,则所述处理器核停止查询并读取所述第一数据;
若在所述L1缓存和所述第一TLS缓存中没有查询到所述第一数据,则将所述第一请求消息更新为非推测线程请求读缓存中的所述第一数据。
4.根据权利要求2所述的方法,其特征在于,所述缓存控制器根据所述第一请求消息对所述缓存进行访存操作,包括:
若所述第一请求消息表示推测线程请求向所述缓存写入第二数据,则所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,并根据所述第一标签更新所述第二标签。
5.根据权利要求4所述的方法,其特征在于,所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,包括:
若所述L1缓存中已经存满,则将从所述L1缓存中替换出来的数据写入到所述TLS缓存中。
6.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
确定所述第二数据是否与除所述推测线程之外的其它推测线程冲突,若发生冲突,则撤销并重新运行所述其它推测线程。
7.根据权利要求2-5任一项所述的方法,其特征在于,所述缓存还包括TLS缓存联合缓冲,所述方法还包括:
所述TLS缓存联合缓冲将至少两个所述L1缓存中存储的同一个地址的数据整合为第五数据,其中,所述第五数据为所述同一个地址中的距当前时间最近的数据;
所述TLS缓存联合缓冲将所述第五数据存储至所述TLS缓存中;
所述TLS缓存联合缓冲将至少两个所述L1缓存中的所述地址的缓存行设置为无效。
8.根据权利要求2-5任一项所述的方法,其特征在于,所述缓存中还包括第一缓存状态目录,所述第一缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第一缓存状态,所述第一缓存状态包括所述缓存块被所述处理器簇修改、独占、共享或无效。
9.根据权利要求2-5任一项所述的方法,其特征在于,所述缓存中还包括第二缓存状态目录,所述第二缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第二缓存状态,所述第二缓存状态包括所述缓存块被所述处理器簇中的每个处理器核修改、独占、共享或无效。
10.根据权利要求1-5任一项所述的方法,其特征在于,所述处理器核根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的第一请求消息,包括:
所述处理器核根据所述推测多线程程序,更新任务表,所述任务表用于记录所述至少一个推测线程的信息;
所述处理器根据所述任务表,生成所述第一请求消息。
11.根据权利要求10所述的方法,其特征在于,所述任务表包括所述推测线程的线程号、状态信息和上下文信息,其中,所述线程号用于标识所述推测线程,所述状态信息用于表示所述推测线程的运行状态,所述上下文信息包括所述推测线程的程序计数器、栈指针和指向下一个空闲任务表项的指针。
12.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一标签包括所述推测线程的线程号和状态信息,所述第二标签包括访存所述缓存的线程的线程号和状态信息,其中,所述线程号用于标识线程,所述状态信息用于表示线程的运行状态。
13.根据权利要求1-5任一项所述的方法,其特征在于,所述缓存中还包括线程表,所述线程表用于记录所述缓存中关联的推测线程和/或非推测线程的信息,其中,所述线程表包括线程的线程号、状态信息、缓存行和任务表指针,其中,所述线程号用于标识所述线程,所述状态信息用于指示线程的运行状态,所述缓存行包括在所述缓存中属于所述线程的缓存行。
14.根据权利要求11所述的方法,其特征在于,所述状态信息包括线程活跃标记位、时间戳、停止标记位、结束位、安全位、提交位和撤销位中的至少一种。
15.一种片上多核处理器CMP,其特征在于,所述CMP包括处理器核、缓存控制器和缓存,
所述处理器核用于接收推测多线程程序,所述推测多线程程序包括至少一个推测线程;
所述处理器核用于根据所述推测多线程程序,生成用于所述推测线程访存所述缓存的第一请求消息,所述第一请求消息包括第一标签,所述第一标签包括所述推测线程的信息;
所述缓存控制器用于根据所述第一请求消息对所述缓存进行访存操作,其中,所述缓存包括第二标签,所述第二标签用于记录访存所述缓存的线程的信息。
16.根据权利要求15所述的CMP,其特征在于,所述CMP包括处理器簇,所述处理器簇包括至少两个所述处理器核、所述缓存控制器和所述缓存,所述缓存包括TLS缓存、L2缓存和与所述至少一个所述处理器核一一对应的L1缓存。
17.根据权利要求16所述的CMP,其特征在于,所述缓存控制器具体用于:
若所述第一请求消息表示推测线程请求读所述缓存中的第一数据,则所述缓存控制器根据所述第一标签和所述第二标签,依次在所述处理器核的对应的L1缓存、所述处理器核所在的处理器簇中的其它处理器核的L1缓存和所述处理器簇中的第一TLS缓存中查询是否存在所述第一数据;
若查询到所述第一数据,则所述处理器核停止查询并读取所述第一数据;
若在所述L1缓存和所述第一TLS缓存中没有查询到所述第一数据,则将所述第一请求消息更新为非推测线程请求读缓存中的所述第一数据。
18.根据权利要求16所述的CMP,其特征在于,所述缓存控制器具体用于:
若所述第一请求消息表示推测线程请求向所述缓存写入第二数据,则所述缓存控制器将所述第二数据写入所述处理器核的L1缓存中,并根据所述第一标签更新所述第二标签。
19.根据权利要求18所述的CMP,其特征在于,所述缓存控制器具体用于:
若所述L1缓存中已经存满,则将从所述L1缓存中替换出来的数据写入到所述TLS缓存中。
20.根据权利要求18或19所述的CMP,其特征在于,还包括监测单元,用于确定所述第二数据是否与除所述推测线程之外的其它推测线程冲突,若发生冲突,则所述处理器核撤销并重新运行所述其它推测线程。
21.根据权利要求16-19任一项所述的CMP,其特征在于,所述缓存还包括TLS缓存联合缓冲,所述TLS缓存联合缓冲用于:
将至少两个所述L1缓存中存储的同一个地址的数据整合为第五数据,其中,所述第五数据为所述同一个地址中的距当前时间最近的数据;
将所述第五数据存储至所述TLS缓存中;
将至少两个所述L1缓存中的所述地址的缓存行设置为无效。
22.根据权利要求16-19任一项所述的CMP,其特征在于,所述缓存中还包括第一缓存状态目录,所述第一缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第一缓存状态,所述第一缓存状态包括所述缓存块被所述处理器簇修改、独占、共享或无效。
23.根据权利要求16-19任一项所述的CMP,其特征在于,所述缓存中还包括第二缓存状态目录,所述第二缓存状态目录用于记录所述L1缓存中的缓存块、所述TLS缓存中的缓存块和所述L2缓存中的缓存块的第二缓存状态,所述第二缓存状态包括所述缓存块被所述处理器簇中的每个处理器核修改、独占、共享或无效。
24.根据权利要求15-19任一项所述的CMP,其特征在于,所述处理器核具体用于:
根据所述推测多线程程序,更新任务表,所述任务表用于记录所述至少一个推测线程的信息;
根据所述任务表,生成所述第一请求消息。
25.根据权利要求24所述的CMP,其特征在于,所述任务表包括所述推测线程的线程号、状态信息和上下文信息,其中,所述线程号用于标识所述推测线程,所述状态信息用于表示所述推测线程的运行状态,所述上下文信息包括所述推测线程的程序计数器、栈指针和指向下一个空闲任务表项的指针。
26.根据权利要求15-19中任一项所述的CMP,其特征在于,所述第一标签包括所述推测线程的线程号和状态信息,所述第二标签包括访存所述缓存的线程的线程号和状态信息,其中,所述线程号用于标识线程,所述状态信息用于表示线程的运行状态。
27.根据权利要求15-19任一项所述的CMP,其特征在于,所述缓存中还包括线程表,所述线程表用于记录所述缓存中关联的推测线程和/或非推测线程的信息,其中,所述线程表包括线程的线程号、状态信息、缓存行和任务表指针,其中,所述线程号用于标识所述线程,所述状态信息用于指示线程的运行状态,所述缓存行包括在所述缓存中属于所述线程的缓存行。
28.根据权利要求25所述的CMP,其特征在于,所述状态信息包括线程活跃标记位、时间戳、停止标记位、结束位、安全位、提交位和撤销位中的至少一种。
CN201710272266.5A 2017-04-24 2017-04-24 执行推测线程的方法以及片上多核处理器 Active CN108733409B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710272266.5A CN108733409B (zh) 2017-04-24 2017-04-24 执行推测线程的方法以及片上多核处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710272266.5A CN108733409B (zh) 2017-04-24 2017-04-24 执行推测线程的方法以及片上多核处理器

Publications (2)

Publication Number Publication Date
CN108733409A CN108733409A (zh) 2018-11-02
CN108733409B true CN108733409B (zh) 2022-10-25

Family

ID=63934483

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710272266.5A Active CN108733409B (zh) 2017-04-24 2017-04-24 执行推测线程的方法以及片上多核处理器

Country Status (1)

Country Link
CN (1) CN108733409B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111241551B (zh) * 2019-09-19 2022-01-25 中国科学院信息工程研究所 基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法
CN112306554B (zh) * 2020-11-19 2024-05-17 北京亚鸿世纪科技发展有限公司 高性能要求软件从Grantley平台过渡到Purley平台的优化方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040128489A1 (en) * 2002-12-31 2004-07-01 Hong Wang Transformation of single-threaded code to speculative precomputation enabled code
US7404041B2 (en) * 2006-02-10 2008-07-22 International Business Machines Corporation Low complexity speculative multithreading system based on unmodified microprocessor core
CN102799414B (zh) * 2011-05-24 2015-11-25 中国科学技术大学 改进推测多线程的方法及装置
CN104111868B (zh) * 2013-04-22 2017-08-11 华为技术有限公司 一种推测多线程调度方法及装置

Also Published As

Publication number Publication date
CN108733409A (zh) 2018-11-02

Similar Documents

Publication Publication Date Title
TWI448897B (zh) 監視在硬體中之記憶體存取的方法與設備、處理器及其系統
US10949200B2 (en) Methods and apparatus for executing data-dependent threads in parallel
US9430388B2 (en) Scheduler, multi-core processor system, and scheduling method
CN102483704B (zh) 具有高效的高速缓存支持的事务内存系统
KR101025354B1 (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
KR102008733B1 (ko) 스토어 상위 서열에 기초하여 상이한 스레드들로부터의 포워딩을 구현하는 스레드에 무관한 로드 스토어 버퍼
KR101355496B1 (ko) 복수의 병렬 클러스터들을 포함하는 계층 프로세서의스케쥴링 메카니즘
US8145849B2 (en) Wake-and-go mechanism with system bus response
EP2862062B1 (en) A virtual load store queue having a dynamic dispatch window with a distributed structure
KR101818967B1 (ko) 명확화 없는 비순차 load store 큐
US7363435B1 (en) System and method for coherence prediction
US20100293341A1 (en) Wake-and-Go Mechanism with Exclusive System Bus Response
EP3441886A1 (en) Method and processor for processing data
CN103635875A (zh) 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
CN103562866A (zh) 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
CN103547993A (zh) 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
US7243195B2 (en) Software managed cache optimization system and method for multi-processing systems
US11231931B1 (en) Mechanism for mitigating information leak via cache side channels during speculative execution
CN107729267B (zh) 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
WO2018219480A1 (en) Managing task dependency
Negi et al. π-TM: Pessimistic invalidation for scalable lazy hardware transactional memory
Garzarán et al. Tradeoffs in buffering speculative memory state for thread-level speculation in multiprocessors
Tabbakh et al. G-TSC: Timestamp based coherence for GPUs
CN108733409B (zh) 执行推测线程的方法以及片上多核处理器
Dallou et al. Hardware-based task dependency resolution for the starss programming model

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant