CN100347673C - 提供多线程计算机处理的方法与系统 - Google Patents

提供多线程计算机处理的方法与系统 Download PDF

Info

Publication number
CN100347673C
CN100347673C CNB038186217A CN03818621A CN100347673C CN 100347673 C CN100347673 C CN 100347673C CN B038186217 A CNB038186217 A CN B038186217A CN 03818621 A CN03818621 A CN 03818621A CN 100347673 C CN100347673 C CN 100347673C
Authority
CN
China
Prior art keywords
processing threads
thread
register
processor
task
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
Application number
CNB038186217A
Other languages
English (en)
Other versions
CN1685315A (zh
Inventor
迈克尔·W·莫罗
丹尼斯·奥康纳
史蒂夫·斯特拉茨达斯
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN1685315A publication Critical patent/CN1685315A/zh
Application granted granted Critical
Publication of CN100347673C publication Critical patent/CN100347673C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Microcomputers (AREA)
  • Power Sources (AREA)

Abstract

本说明书涉及多硬件上下文的并发控制和支持。根据本发明的一个方面,提供了一种提供多线程计算机处理的方法,所述方法包括将寄存器专用于控制多个处理线程的运行和冻结,所述寄存器可由所述多个处理线程中的每一个访问;通过将第一预定值写入所述寄存器的一个或多个特定位,使一个处理线程运行;以及通过将第二预定值写入所述寄存器的一个或多个其他特定位,冻结该处理线程。这可以获得低功耗、增加的吞吐量以及更高的性能并且可以由在多线程处理器上运行的线程来初始化和控制该处理器。

Description

提供多线程计算机处理的方法与系统
技术领域
本说明书涉及多硬件上下文(contexts)的并发控制和支持。
背景技术
本说明书涉及多硬件上下文(contexts)的并发控制和支持。计算机到运行在该计算机上的软件的行为表示称为指令集体系结构。指令集体系结构包括对在计算机上执行的程序可见的计算机的状态的那一部分(称为体系结构可见状态),以及改变该状态的操作,后者主要是计算机执行的指令。体系结构可见状态可粗略地被划分成两组:主要用来配置计算机并且通常仅涉及操作系统的状态,以及由在计算机上执行的应用软件使用的状态。另外,在这一较后的状态中存在一个称为上下文(context)的子集,在计算机上运行的每个应用程序都可假定该子集专用于该应用程序。所述上下文包括接着将发射(issue)哪条指令的指示,称为程序计数器。
典型地,计算机的中央处理单元(CPU)仅实现一个上下文。因此,在典型的计算机上,每次仅有一个程序能发射指令。为支持使几个程序似乎同时运行,操作系统通常使每个程序运行称为时间片的短时间周期(通常是几毫秒),停止那个程序的执行,将那个程序的上下文保存到CPU外的存储位置,将另一程序的上下文加载到CPU中,开始运行新程序直到用于新程序的时间片届满为止,然后重复该过程。这就是大家所知的多任务处理。
在计算机的CPU内可以实现不止一个上下文。这允许硬件从不止一个程序发射指令,而不需要操作系统干预,并且不需要在CPU外的存储位置中保存和恢复程序上下文。与每个上下文有关的指令的执行基本上是独立的,并且对来自任何其他上下文的指令的执行无直接影响,除了通过共享资源之外。单个CPU从多个上下文进行保存(hold)和执行而无需操作系统干预的这一能力已经公知为硬件多线程。该名称基于将由CPU实现的每个上下文称为线程。
可以使用硬件多线程来利用CPU中非常短的不活动的时间,以减轻花很长时间才可完成(即具有长的执行时间(latency))的操作的影响,或增加在单个时钟周期中发射的指令数。对于计算机上运行的应用程序,如果与映射成单个任务或一组顺序执行的任务相比,可更自然地映射成基本上同时执行的几个任务,则也可以使用硬件多线程。
在CPU内实现多上下文的计算机中,从上下文如何发射指令有着显著的不同。所使用的技术包括固定轮转方案(fixed rotation schemes)、当目前执行的上下文面临停滞条件(stall condition)(诸如高速缓存缺失)时切换上下文的方案,以及所有上下文均能同时发射指令而仅受限于必要资源的可用性的方案。
一种计算机系列基于由英国剑桥的ARM有限公司开发的一系列指令集体系结构。这一指令集体系结构系列称为ARM ISA,具有几种版本和变体。ARM ISA的一个特征是使用执行包括在标准指令流中的指令的协处理器。定义了一些标准的协处理器来控制和配置计算机。还存在一种工具用于扩展了所述体系结构的能力的定制协处理器。协处理器具有自己的状态和自己的指令集。协处理器中的全部或一些状态可以是专用于由正在执行的程序排他性使用的上下文的一部分。在ARM ISA中,协处理器在体系结构上各有不同,但可以实现为处理器的一部分。通常,用来配置和控制计算机的一个或多个标准协处理器被实现为处理器的一部分。
发明内容
根据本发明的一个方面,提供了一种提供多线程计算机处理的方法,所述方法包括将寄存器专用于控制多个处理线程的运行和冻结,所述寄存器可由所述多个处理线程中的每一个访问;通过将第一预定值写入所述寄存器的一个或多个特定位,使一个处理线程运行;以及通过将第二预定值写入所述寄存器的一个或多个其他特定位,冻结该处理线程。
根据本发明的另一个方面,提供了一种被布置和配置来提供多线程计算机处理的系统,所述系统包括寄存器,所述寄存器专用于控制多个处理线程的运行和冻结,所述寄存器可由所述多个处理线程中的每一个访问;以及处理器,所述处理器被配置成响应于将第一预定值写入所述寄存器的一个或多个特定位而使一个处理线程运行,并且响应将第二预定值写入所述寄存器的一个或多个其他特定位而冻结该处理线程。
根据本发明的再一个方面,提供了一种用于提供多线程计算机处理的设备,所述设备包括用于将寄存器专用于控制多个处理线程的运行和冻结的装置,所述寄存器可由所述多个处理线程中的每一个访问;用于通过将第一预定值写入所述寄存器的一个或多个特定位,使一个处理线程运行的装置;以及用于通过将第二预定值写入所述寄存器的一个或多个其他特定位,冻结该处理线程的装置。
附图说明
图1是不支持硬件多线程的通用计算机的框图。
图2是适合于支持硬件多线程的通用计算机的框图。
图3是适合于以不同于图2所示的方式支持硬件多线程的通用计算机的框图。
图4是要求在多线程处理器上实现串行和并行作业的模型的框图。
图5是在多线程处理器上实现的生产者-消费者并行模型的框图,所述方案需要防止共享数据缓冲器的过运行或欠运行。
在不同图中相同的标记表示相同的元件。
具体实施方式
图1示例说明了通用微处理器100,除其他元件外,包括组成用于单个线程的执行上下文的状态(上下文)102、包括配置和控制状态114的集成协处理器110、指令高速缓存(Icache)120、数据高速缓存(Dcache)130和存储管理单元(MMU)140。所述微处理器连接到存储器180、协处理器160、协处理器170、以及诸如通常可在计算机系统中找到的其他设备190,其中协处理器160包括作为执行上下文的一部分的协处理器专用状态162和协处理器160特有的配置和控制状态166,协处理器170包括作为执行上下文的一部分的协处理器专用状态172和协处理器170特有的配置和控制状态176。Icache 120维护用于由微处理器100执行的一系列指令。在ARM体系结构中,Icache 120还维护用于集成协处理器110、协处理器160和协处理器170的一系列指令。
图2示例说明了被改进来支持硬件多线程的图1的微处理器。如在图1中,处理器200包括指令高速缓存(Icache)220、数据高速缓存(Dcache)230、存储管理单元(MMU)240和包括配置和控制状态214的集成协处理器210。另外,处理器200连接到协处理器260和协处理器270、存储器280和其他设备290。
处理器200不同于处理器100之处在于具有两个执行上下文:线程0上下文202和线程1上下文204。此外,处理器200将线程配置和控制状态及逻辑216增加到集成协处理器210上,并允许配置和控制状态214具有处理器100的配置和控制状态114的一些部分的每线程的副本。同样地,协处理器260包括两个协处理器专用上下文:线程0协处理器上下文262和线程1协处理器上下文264。另外,协处理器260的配置和控制状态266可以具有协处理器160的配置和控制状态166的一些部分的每线程的副本。
尽管图2示出了具有两个上下文的实现,但所描述的技术不限于这一方面。多种实现可以支持任意数量的上下文。另外,在一些实现中,协处理器260可以实现为集成协处理器。所描述的技术可以应用于使用任何方案以从多个上下文发射指令的硬件。
注意,线程配置和控制状态216可以处于与其余配置和控制状态214不同的体系结构的协处理器中,不管与状态214和216有关的状态和逻辑是否实现在相同的电路模块中。通过将线程配置和控制状态216置于体系结构上不同的协处理器中,从执行程序的观点看,除管理线程的软件外,主处理器体系结构可以保持不变。通过线程配置和控制216提供的功能性可以包括例如启动、停止和恢复所有或单个线程、为单个线程分配优先级、以及将资源分配给所述多个线程。对于包括在配置和控制状态214中的配置和控制状态114的某种功能,当每个线程需要具有对该功能的独立控制时,需要为每个线程复制该功能。为保持与处理器100的体系结构的体系结构兼容性,可以将用于每个线程的相关独立状态都映射到与处理器100相同的位置和相同的寄存器中,并且所述实现可以通过确定哪个线程发射了特定的指令来确定该指令读取或写入哪个线程的状态。一种实现可以逐个线程的方式复制并经上述机制访问的配置和控制状态114的多个方面的实施例包括用于存储器映射表的基准指针、软件进程标识符、存储器翻译使能和调试功能使能。
在特定的实现中,线程0上下文202和线程1上下文204都可包括由ARM体系结构支持的模式(例如用户/管理员、FIQ和IRQ)所需的所有上下文,包括程序计数器、CPSR和SPSR。在可替换的实现中,线程1上下文204可以仅包括支持ARM体系结构的用户模式所需的上下文。在这种可替换的实现中,在除用户模式外的任一模式中,在任何特定时间,仅能执行一个线程,并且,只要任何线程进入除用户模式外的任一模式,就停止所有用户模式线程。
Icache 220包括用于线程0和线程1二者的指令。类似地,Dcache 230包括用于线程0和线程1二者的数据,并且MMU 240包括用于线程0和线程1二者的翻译和许可信息。当使指令按顺序通过它们的执行中与各种实现相关的阶段时,处理器200的控制逻辑维护在从Icache 220取得的每个指令和从其处发射该指令的线程之间的关联性,以便每个指令使用上下文202或上下文204中适当的上下文,被授予适当的许可和使用来自MMU 240的适当的地址翻译,并访问和操作Dcache 220、存储器280和其他设备290中的适当的数据。在一种实现中,为每个线程提供地址空间标识符(ASID)以表示哪些地址翻译和许可应用于每个线程,其中给定了相同ASID的线程共享相同的地址翻译和许可集。另外,处理器200和外部协处理器260确保发射到协处理器260的指令使用协处理器260中的适当的上下文:用于从线程0发射的指令的上下文262或用于从线程1发射的指令的上下文264。在执行来自一个线程的指令的过程中的任何地方中源于该线程的执行的错误都被报告到产生该错误的线程。
协处理器270仅具有一个协处理器专用上下文272,并且可能不具有被设计来支持硬件多线程的任何状态或逻辑。因此,线程必须共享协处理器270。在一种共享方法中,协处理器270可以永久地分配给所述线程之一,以便另一线程当试图使用协处理器270时接收错误信号。在另一种方法中,协处理器270可以被操作系统或实时执行动态地分配给一个线程或另一线程,其中当前不具有使用协处理器270的许可的任何一个线程试图使用该协处理器时都会接收错误信号。在又一种方法中,协处理器270可以被两个线程同时使用,其中由软件负责确保每个线程不干扰另一线程对协处理器270的使用,这可以通过下述方法来实现,即逐线程地分配协处理器270内的资源,或者借助于软件协议来协调哪个线程能使用处理器270中的哪一资源以及所述线程何时可使用所述资源。多种实现可以支持这些机制中的任一种或全部。
一种特定的实现通过一种逐线程寄存器来管理对协处理器的访问,其中所述逐线程寄存器对系统中的每个协处理器都具有一个位。每个线程通过相同地址访问该寄存器,或将该寄存器作为与线程配置和控制状态216中相同的协处理器寄存器来访问。该实现确保每个线程仅读取或写入其自己的寄存器。在所有线程上运行的软件协调哪个线程可访问哪些协处理器。对支持与处理器200一样多的上下文的协处理器,每个线程可设置表示它可以访问该协处理器的位。对仅具有一个上下文的协处理器,仅有一个线程可以设置用于那个协处理器的位,除非软件协议允许共享该协处理器。当线程试图使用或访问在该寄存器的线程拷贝中没有设置相关位的协处理器时,发出错误信号。
线程可以通过读取线程配置和控制状态216的寄存器中的一个来查询其身份。协处理器210通过归还请求线程的线程ID来响应所述读取。线程也可以读取线程配置和控制状态216的寄存器中的一个以便确定由该系统支持的硬件线程的数量。线程可以通过写线程配置和控制状态216中的寄存器来停止或暂停它自己的执行,其中将已经停止自己的执行的线程称为冻结线程。线程也可以通过写线程配置和控制状态216中的寄存器来使另一线程脱离冻结状态。也可以将冻结线程配置成在发生该线程之外的事件(例如定时器或I/O设备中断)时退出冻结状态并恢复执行。
在一种实现中,在支持n个线程的处理器200中,可以通过通常驻留在线程配置和控制状态216中的可写寄存器中的位来提供对该n个线程的控制。对所支持的n个线程,将所述位标识为Fn-1…F0和Rn-1…R0。当位Fx写入“1”时,冻结线程x。当位Rx写入“1”时,使线程x转变成运行状态。需要注意,是将“1”写入寄存器的适当位这个动作而非该位的内容在控制线程是正在运行还是冻结。因此,将0写入寄存器的位没有影响。这意味着多个线程可以同时或几乎同时使用寄存器,而不关心其他线程正在做什么。
在另一实现中,为将线程转变成冻结状态而提供的唯一机制是使线程本身写协处理器或存储器映射的寄存器。所有线程可以通过写相同寄存器中的相同位来完成此操作,并且所述实现将正进行写的线程置于冻结状态,并且不会将任何其他线程置于冻结状态。在这一实现中,通过中断使线程转变成脱离冻结状态。在类似的实现中,通过向线程发送复位信号将线程置于冻结状态。
在一种实现中,在复位处理器200后,处理器200仅有一个线程T0在执行,并且所有其他线程被冻结。在这一线程上运行的软件确定它是第一个线程并执行初始化例程来使系统进入允许有多个活动线程的状态。然后该软件解冻其他线程。然后,在每个其他线程上的软件校验线程的线程ID,并由此确定线程不是第一个运行的线程,因此,不重新执行初始化例程。在这一实现中,每个线程在复位后首次执行时都在相同地址开始执行,并且,如果初始化软件(“引导代码”)不知道处理器200支持硬件多线程,则初始化软件仍然正确地执行。
在另一实现中,处理器200在脱离复位后,立即开始所有线程的执行,并且,在每个线程上运行的软件由该线程的线程ID来确定该线程应当执行系统初始化(如果有的话)的什么部分。在这一实现中,初始化代码必须知道处理器200支持硬件多线程以便正确地执行。
在另一实现中,处理器200在被复位后,仅有一个线程T0在执行,所有其他线程被冻结。作为初始化的一部分,在该第一线程上运行的软件在解冻其他线程前改变引导代码或改变取得引导代码的位置。在这一实现中,仅由第一线程运行的初始化代码需要知道处理器的硬件多线程属性。
实现可以有选择地将外部或内部中断路由到特定的线程。这种路由可以被所述实现固定或可以是可编程的。另外,可以将一个中断引导到不止一个线程或全部线程。在ARM体系结构的一种实现中,其中每个硬件上下文都包括用于所有ARM模式的全部状态,多个线程可以同时处理独立的中断。在任何情况下,如果将中断路由到冻结的线程并使该线程能检测该中断,则将解冻该线程。
可以为线程提供生成中断以及将那个中断路由到特定线程的机制。这允许线程通过中断彼此通信。可以允许线程将中断发送到它自己。另外,可以提供允许线程将中断同时发送到所有线程的机制。
还可以为线程提供复位其他线程的机制。这一机制可复位线程并使该线程冻结、复位线程并允许该线程立即开始执行、或允许发送复位命令的线程选择进行这些操作中的哪一个。
可以提供机制来允许线程检测该线程所接收的最后一次复位是当首次打开系统时会发生的全系统范围的复位,还是由线程自己或某个其他线程发送到该线程的单独的复位。
图3示出了为每个线程提供单独的指令高速缓存和数据高速缓存的另一实现。处理器300包括:用于线程Thread0和Thread1中的每一个的指令高速缓存(Icache)320、322、数据高速缓存(Dcache)330、332以及上下文302、304;存储管理单元(MMU)340;以及具有配置和控制状态314和线程配置和控制状态316的集成协处理器310。另外,处理器300连接到存储器380和其他设备390。
与图2的处理器200类似,处理器300连接到协处理器260和协处理器270。如上面所指出的,处理器300不同于处理器200之处在于具有用于每个线程的单独的Icache和Dcache(例如,线程0 Icache 320、线程1 Icache 322、线程0 Dcache 330和线程1 Dcache 332)。
在图3的实现中,线程专用状态可被扩展至超出处理器200之所需,以便包括独立地配置和控制每个线程的指令高速缓存320和322的状态信息。额外的状态信息可以是配置和控制状态314的一部分,并可以通过如上所述的逐线程寄存器超载技术而使得在体系结构上不可见。额外的状态信息也可以是线程配置和控制状态316的一部分,在此情况下,不需要使该信息在体系结构上不可见。对各线程的指令和数据高速缓存进行配置和控制的元素也可以共同存在于配置和控制状态314及线程配置和控制状态316中。
尽管在图2和3中给出的实施例仅支持两个上下文,但是所述技术支持具有多于两个上下文的实现。另外,所述技术支持具有比图2和3所示的更少或更多协处理器的实现。所述技术还支持具有更复杂的存储器层次结构的实现。
使用支持多线程的处理器的情况的一个实施例是如图4所示的屏障同步(barriersynchronization)情形。所述处理器通过逻辑被增强(augmented),该逻辑在特定线程或一组线程转变成运行状态前,等待所有线程或一组线程处于冻结状态。对此功能性,可以用多种方式指定所述线程组。例如,可以通过使用对组中的每个线程都包括1位的寄存器来指定它们。
如上所述的寄存器可以处理这一实现。为实现此,所包括的附加语义是如果冻结所有线程,那么使线程T0自动转变成运行。
在屏障同步实施例子中,初始地,通过将适当的值写入寄存器中各自的位,串行线程T0正在运行,并冻结并行线程T1、T2、T3。正在运行的串行线程T0执行多个任务。然后,当串行线程T0完成其任务时,串行线程T0冻结(通过冻结自己或通过一个并行线程来冻结T0),并激活并行线程T1、T2和T3(同样,通过激活它们自己或由T0激活)。然后,并行线程T1、T2和T3执行它们的分配的任务,并在完成这些任务后,并行线程T1、T2和T3返回到冻结状态。当冻结所有并行线程T1、T2和T3时,再次激活串行线程T0。实现屏障同步实施例的伪码的实施例如表1所示:
//假定Thread0是串行线程,Thread1、Thread2和Thread3是并行工作者线程
//这一实施例假定初始状态是:串行线程正运行,并行线程冻结
Thread0:
     //----------在此插入串行工作--------
     TCNTL=(1<<16)|0xE           //冻结串行线程,运行并行线程
     //当完成并行线程时到达此处,因为它们将自冻结并且
     //本发明将自动唤醒Thread0
     goto Thread0
ThreadX               //用于所有并行工作者的代码都与此类似
     //在此将不开始执行直到串行线程启动我们为止。
     //------------在此插入并行工作----------
     TCNTL=1<<(my_thread_ID+16)       //自冻结
     goto ThreadX
                            表1
表1的伪码不需要显式同步,并且,仅通过检查就很容易检验准确性。
图5示出了生产者-消费者模型的实施例的另一实现,其中一个或多个线程产生数据到缓冲器中,而一个或多个其他线程消费这些数据。生产者线程执行生成将存储在缓冲器中的数据的任务。消费者线程执行使用(消费)由生产者线程生成的数据的任务。在两个线程的关系中所关心的是防止由于过度生产或不足使用而使共享数据缓冲器过运行或欠运行。因此,所述两个线程并发执行它们各自的任务。
然而,如果生产者线程打算将其数据写的缓冲器位置与消费者线程将读取数据的缓冲器位置相同,则冻结消费者线程(例如通过将适当的值写到寄存器的适当位)而生产者线程保持于活动状态(可以将适当的位写到用于生产者线程的寄存器位以确保生产者线程处于活动状态)。类似地,如果消费者线程将读取数据的缓冲器数据位置是缓冲器中的下一缓冲器数据位置,则冻结生产者线程(例如通过将适当值写到寄存器的适当位)。可以将适当值写到用于消费者线程的寄存器位以确保消费者线程处于活动状态。实现所述生产者-消费者模型的伪码的实施例如表2所示:
//共享数据缓冲器(N是缓冲器的大小)
//如果producerPtr==consumerPtr,那么缓冲器为空
int buffer[N]
int producerPtr=0;//生产者将写入的下一位置
int consumerPtr=0;//消费者将读取的下一位置
//用于消费者线程的代码
tmp=(1<<(16+my_thread_ID))|(1<<producer_ID)
consumer:
    while producerPtr==consumerPtr    //缓冲器满?
             TCNTL=tmp                       //自冻结,唤醒生产者
    //-----------消费缓冲器[consumerPtr]处的数据-------
    consumerPtr=(consumerPtr+1)%N            //前进到下一数据项
    TCNTL=1<<producer_ID                     //确保生产者是醒着的
    goto consumer
//用于生产者线程的代码
tmp=(1<<(16+my_thread_ID))|(1<<consumer_ID)
producer:
     succ=(producerPtr+1)%N
     while succ==consumerPtr       //自冻结,唤醒消费者
     TCNTL=tmp
     //--------------将数据写入缓冲器[succ]
     producerPtr=succ
     TCNTL=1<<consumer_ID         //前进到下一数据项
     goto producer                        //确保消费者是醒着的
                                    表2
消费者和生产者代码中的“while”循环很少执行,它们的存在是为了防止模糊竞争(obscurerace)。多个消费者-生产者对可以并发运行而不相互影响。
在附图和说明书中已经阐述和描述了多种实现。然而,将理解到可以做出各种改进。一个或多个线程可以专用于特定的任务,或一个或多个线程可以仅在有中断时才唤醒并且仅处理中断,并且可以统一存储器模块以便所有任务都是一个统一队列的一部分。因此,这些和其他实现在下述权利要求书的范围内。

Claims (27)

1.一种提供多线程计算机处理的方法,所述方法包括:
将寄存器专用于控制多个处理线程的运行和冻结,所述寄存器可由所述多个处理线程中的每一个访问;
通过将第一预定值写入所述寄存器的一个或多个特定位,使一个处理线程运行;以及
通过将第二预定值写入所述寄存器的一个或多个其他特定位,冻结该处理线程。
2.如权利要求1所述的方法,其中,所述寄存器是协处理器寄存器。
3.如权利要求1所述的方法,其中,所述第一预定值是“1”。
4.如权利要求3所述的方法,其中,所述第二预定值是“1”。
5.如权利要求4所述的方法,其中,如果所述第一预定值或所述第二预定值是“0”,则所述处理线程继续运行或保持冻结。
6.如权利要求1所述的方法,其中,将除所述第二预定值以外的值写入所述寄存器的所述一个或多个其他特定位对所述处理线程是冻结还是运行没有影响。
7.如权利要求1所述的方法,所述方法进一步包括:
初始化处理器;
初始化n个处理线程;
使第一处理线程运行;
冻结n-1个处理线程;
接收要执行的任务;
在所述第一处理线程上执行所述任务;以及
如果有额外的任务,则接收所述额外的任务并且并发地执行所述额外的任务。
8.如权利要求7所述的方法,其中,如果所述额外的任务需要运行另一线程,则所述方法包括使第二处理线程运行,并且并发地在所述第二处理线程上执行所述额外的任务。
9.如权利要求7所述的方法,其中,所述处理器包括至少一个可由所述n个处理线程中的每一个线程访问的资源。
10.如权利要求9所述的方法,其中,所述处理器包括至少一个仅可由所述n个处理线程中的一个线程访问的资源。
11.如权利要求1所述的方法,进一步包括响应于中断而冻结所述处理线程并使第二处理线程运行。
12.一种被布置和配置来提供多线程计算机处理的系统,所述系统包括:
寄存器,所述寄存器专用于控制多个处理线程的运行和冻结,所述寄存器可由所述多个处理线程中的每一个访问;以及
处理器,所述处理器被配置成响应于将第一预定值写入所述寄存器的一个或多个特定位而使一个处理线程运行,并且响应于将第二预定值写入所述寄存器的一个或多个其他特定位而冻结该处理线程。
13.如权利要求12所述的系统,进一步包括协处理器,其中,所述寄存器包括所述协处理器的寄存器。
14.如权利要求12所述的系统,其中,所述处理器被配置成使得将除所述第二预定值以外的值写入所述寄存器的所述一个或多个其他特定位对所述处理线程是冻结还是运行没有影响。
15.如权利要求12所述的系统,其中,所述处理器被配置来:
初始化n个处理线程;
使第一处理线程运行;
冻结n-1个处理线程;
接收要执行的任务;
在所述第一处理线程上执行所述任务;以及
如果有额外的任务,则接收所述额外的任务并且并发地执行所述额外的任务。
16.如权利要求15所述的系统,其中,所述处理器被配置成当所述额外的任务需要运行另一线程时,使第二处理线程运行并且并发地在所述第二处理线程上执行所述额外的任务。
17.如权利要求15所述的系统,其中,所述处理器包括至少一个可由所述n个处理线程中的每一个线程访问的资源。
18.如权利要求15所述的系统,其中,所述处理器包括至少一个仅可由所述n个处理线程中的一个线程访问的资源。
19.如权利要求12所述的系统,其中,所述处理器被配置成响应于中断而冻结所述处理线程并使第二处理线程运行。
20.一种用于提供多线程计算机处理的设备,所述设备包括:
用于将寄存器专用于控制多个处理线程的运行和冻结的装置,所述寄存器可由所述多个处理线程中的每一个访问;
用于通过将第一预定值写入所述寄存器的一个或多个特定位,使一个处理线程运行的装置;以及
用于通过将第二预定值写入所述寄存器的一个或多个其他特定位,冻结该处理线程的装置。
21.如权利要求20所述的设备,其中,所述寄存器是协处理器寄存器。
22.如权利要求20所述的设备,其中,将除所述第二预定值以外的值写入所述寄存器的所述一个或多个其他特定位对所述处理线程是冻结还是运行没有影响。
23.如权利要求20所述的设备,所述设备进一步包括:
用于初始化处理器的装置;
用于初始化n个处理线程的装置;
用于使第一处理线程运行的装置;
用于冻结n-1个处理线程的装置;
用于接收要执行的任务的装置;
用于在所述第一处理线程上执行所述任务的装置;以及
用于如果有额外的任务,则接收所述额外的任务并且并发地执行所述额外的任务的装置。
24.如权利要求23所述的设备,其中,所述设备进一步包括用于如果所述额外的任务需要运行另一线程,则使第二处理线程运行,并且并发地在所述第二处理线程上执行所述额外的任务的装置。
25.如权利要求23所述的设备,进一步包括至少一个可由所述n个处理线程中的每一个线程访问的资源。
26.如权利要求23所述的设备,进一步包括至少一个仅可由所述n个处理线程中的一个线程访问的资源。
27.如权利要求23所述的设备,进一步包括用于响应于中断而冻结所述处理线程并使第二处理线程运行的装置。
CNB038186217A 2002-06-03 2003-05-30 提供多线程计算机处理的方法与系统 Expired - Fee Related CN100347673C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/162,428 2002-06-03
US10/162,428 US20030225816A1 (en) 2002-06-03 2002-06-03 Architecture to support multiple concurrent threads of execution on an arm-compatible processor

Publications (2)

Publication Number Publication Date
CN1685315A CN1685315A (zh) 2005-10-19
CN100347673C true CN100347673C (zh) 2007-11-07

Family

ID=29583601

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB038186217A Expired - Fee Related CN100347673C (zh) 2002-06-03 2003-05-30 提供多线程计算机处理的方法与系统

Country Status (8)

Country Link
US (1) US20030225816A1 (zh)
EP (1) EP1573532B1 (zh)
CN (1) CN100347673C (zh)
AU (1) AU2003240975A1 (zh)
HK (1) HK1078144A1 (zh)
MY (1) MY160949A (zh)
TW (1) TWI243333B (zh)
WO (1) WO2003102773A2 (zh)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040225840A1 (en) * 2003-05-09 2004-11-11 O'connor Dennis M. Apparatus and method to provide multithreaded computer processing
US7594089B2 (en) * 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
JP4818919B2 (ja) * 2003-08-28 2011-11-16 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
US7711931B2 (en) * 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7836450B2 (en) 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7475296B2 (en) * 2004-05-20 2009-01-06 International Business Machines Corporation Serviceability and test infrastructure for distributed systems
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US8079031B2 (en) 2005-10-21 2011-12-13 Intel Corporation Method, apparatus, and a system for dynamically configuring a prefetcher based on a thread specific latency metric
US8201179B2 (en) * 2006-05-04 2012-06-12 Oracle America, Inc. Multi-threaded shared state variable control
US7721148B2 (en) * 2006-06-29 2010-05-18 Intel Corporation Method and apparatus for redirection of machine check interrupts in multithreaded systems
US8056087B2 (en) * 2006-09-25 2011-11-08 International Business Machines Corporation Effective use of a hardware barrier synchronization register for protocol synchronization
DE102006048379B4 (de) * 2006-10-12 2008-11-06 Infineon Technologies Ag Verfahren zur Durchsatzsteuerung einer elektronischen Schaltung sowie entsprechende Durchsatzsteuerung und zugehörige Halbleiterschaltung
US8898438B2 (en) * 2007-03-14 2014-11-25 XMOS Ltd. Processor architecture for use in scheduling threads in response to communication activity
US7853950B2 (en) * 2007-04-05 2010-12-14 International Business Machines Corporarion Executing multiple threads in a processor
US8181185B2 (en) * 2007-05-31 2012-05-15 Intel Corporation Filtering of performance monitoring information
JP5379122B2 (ja) * 2008-06-19 2013-12-25 パナソニック株式会社 マルチプロセッサ
US7930519B2 (en) * 2008-12-17 2011-04-19 Advanced Micro Devices, Inc. Processor with coprocessor interfacing functional unit for forwarding result from coprocessor to retirement unit
CN101923382B (zh) * 2009-06-16 2013-01-16 联想(北京)有限公司 一种计算机系统的节能方法及计算机系统
US8832712B2 (en) * 2009-09-09 2014-09-09 Ati Technologies Ulc System and method for synchronizing threads using shared memory having different buffer portions for local and remote cores in a multi-processor system
US10169072B2 (en) * 2009-09-23 2019-01-01 Nvidia Corporation Hardware for parallel command list generation
CN102629192A (zh) * 2012-04-20 2012-08-08 西安电子科技大学 用于片上多核并发多线程处理器的指令包及其操作方法
US9465618B2 (en) 2014-01-08 2016-10-11 Oracle International Corporation Methods and systems for optimally selecting an assist unit
CN105843592A (zh) * 2015-01-12 2016-08-10 芋头科技(杭州)有限公司 一种在预设嵌入式系统中实现脚本操作的系统
CN104899039B (zh) * 2015-06-12 2018-12-25 百度在线网络技术(北京)有限公司 用于在终端设备上提供截屏服务的方法和装置
US11023233B2 (en) * 2016-02-09 2021-06-01 Intel Corporation Methods, apparatus, and instructions for user level thread suspension
US10503541B2 (en) * 2017-12-04 2019-12-10 Beijing Panyi Technology Co., Ltd. System and method for handling dependencies in dynamic thread spawning for a multi-threading processor

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5669002A (en) * 1990-06-28 1997-09-16 Digital Equipment Corp. Multi-processor resource locking mechanism with a lock register corresponding to each resource stored in common memory
WO1999021089A1 (en) * 1997-10-23 1999-04-29 International Business Machines Corporation Method and apparatus for altering thread priorities in a multithreaded processor
CN1228557A (zh) * 1998-03-06 1999-09-15 刘殷 计算机处理器多线程指令级并行技术
US5968157A (en) * 1997-01-23 1999-10-19 Sun Microsystems, Inc. Locking of computer resources

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US7120783B2 (en) * 1999-12-22 2006-10-10 Ubicom, Inc. System and method for reading and writing a thread state in a multithreaded central processing unit

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5669002A (en) * 1990-06-28 1997-09-16 Digital Equipment Corp. Multi-processor resource locking mechanism with a lock register corresponding to each resource stored in common memory
US5968157A (en) * 1997-01-23 1999-10-19 Sun Microsystems, Inc. Locking of computer resources
WO1999021089A1 (en) * 1997-10-23 1999-04-29 International Business Machines Corporation Method and apparatus for altering thread priorities in a multithreaded processor
CN1228557A (zh) * 1998-03-06 1999-09-15 刘殷 计算机处理器多线程指令级并行技术

Also Published As

Publication number Publication date
HK1078144A1 (zh) 2006-03-03
EP1573532B1 (en) 2015-06-24
WO2003102773A3 (en) 2005-06-30
CN1685315A (zh) 2005-10-19
AU2003240975A1 (en) 2003-12-19
WO2003102773A2 (en) 2003-12-11
US20030225816A1 (en) 2003-12-04
TW200405204A (en) 2004-04-01
MY160949A (en) 2017-03-31
EP1573532A2 (en) 2005-09-14
TWI243333B (en) 2005-11-11

Similar Documents

Publication Publication Date Title
CN100347673C (zh) 提供多线程计算机处理的方法与系统
US9069605B2 (en) Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
TWI810166B (zh) 用於異質計算之系統,方法,及設備
US9459874B2 (en) Instruction set architecture-based inter-sequencer communications with a heterogeneous resource
TWI494850B (zh) 通透地提供給作業系統之非對稱多核心處理器系統
JP5058970B2 (ja) シーケンサー・アドレス管理
JP5091215B2 (ja) コプロセッサの性能を強化するシステムおよび方法
CN100573456C (zh) 一种并行多处理器虚拟机系统
US20120216015A1 (en) System and method to concurrently execute a plurality of object oriented platform independent programs by utilizing memory accessible by both a processor and a co-processor
CN1890642A (zh) 用于虚拟多线程处理的睡眠状态机制
CN1688974A (zh) 挂起线程执行直到发生指定的存储器访问的方法和设备
TW201001291A (en) Method and apparatus for moving threads in a shared processor partitioning environment
CN1682181A (zh) 具有外部和内部指令集的数据处理系统
WO2007038304A1 (en) Scheduling optimizations for user-level threads
CN108845969B (zh) 适用于不完全对称多处理微控制器的操作控制方法及操作系统
Yu et al. Distributed and low-power synchronization architecture for embedded multiprocessors
Tu et al. Mt-btrimer: A master-slave multi-threaded dynamic binary translator
Errabelly Netswap: Network-based Swapping for Server-Embedded Board Clusters

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: 20071107

Termination date: 20180530

CF01 Termination of patent right due to non-payment of annual fee