CN1938686A - 提供用户级多线程操作的方法和系统 - Google Patents

提供用户级多线程操作的方法和系统 Download PDF

Info

Publication number
CN1938686A
CN1938686A CNA2005800100530A CN200580010053A CN1938686A CN 1938686 A CN1938686 A CN 1938686A CN A2005800100530 A CNA2005800100530 A CN A2005800100530A CN 200580010053 A CN200580010053 A CN 200580010053A CN 1938686 A CN1938686 A CN 1938686A
Authority
CN
China
Prior art keywords
shred
instruction
register
thread
state
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
Application number
CNA2005800100530A
Other languages
English (en)
Other versions
CN1938686B (zh
Inventor
E·T·格罗乔夫斯基
H·王
J·P·沈
P·H·王
J·D·科林斯
J·P·赫尔德
P·坎杜
R·莱维亚坦
T·-F·魏
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
Priority to CN201210105283.7A priority Critical patent/CN102779024B/zh
Publication of CN1938686A publication Critical patent/CN1938686A/zh
Application granted granted Critical
Publication of CN1938686B publication Critical patent/CN1938686B/zh
Expired - Fee Related 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/30003Arrangements for executing specific machine instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/30101Special purpose registers
    • 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
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

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)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

公开一种用于提供用户级多线程操作的方法和系统。根据本发明技术的方法包括接收编程指令以通过指令集体系结构(ISA)来执行一个或多个共享资源的线程(Shred)。一个或多个指令指针通过ISA来配置;以及利用微处理器同时执行一个或多个Shred,其中该微处理器包括多个指令定序器。

Description

提供用户级多线程操作的方法和系统
技术领域
本发明的实施例涉及计算机系统领域。具体来说,本发明的这些实施例涉及用于提供用户级多线程操作的方法和系统。
背景技术
多线程操作是程序或操作系统一次执行多于一个指令序列的能力。对程序或系统服务的每个用户请求(其中用户也可以是另一个程序)是作为具有各自身份的线程来被持续跟踪的。当程序代表对该线程的初始请求而工作并由其他请求中断时,代表该线程的工作的状态被持续跟踪,直到该工作完成为止。
计算机处理的类型包括单指令流单数据流,这是包括单指令流的常规串行冯·诺伊曼计算机。第二种处理类型是单指令流多数据流处理(SEVID)。该处理方案可以包括多个算术逻辑处理器和单个控制处理器。每个算术逻辑处理器在锁定步骤中对数据执行操作,并由控制处理器对其同步。第三种类型是多指令流单数据流(MISD)处理,这包括通过执行不同指令流的处理器的线性阵列处理相同的数据流。第三种类型是多指令流多数据流(MIMD)处理,它使用多个处理器,各执行各自的指令流以处理馈送到每个处理器的数据流。MIMD处理器可以具有多个指令处理单元、多个指令定序器以及由此具有多个数据流。
今天的多线程微处理器采用的编程模型与传统共享存储器的多处理器相同:多个线程被编程为好像它们运行在独立的CPU上一样。线程之间的通信通过主存储器来执行,并且线程创建/销毁/调度由操作系统执行。多线程操作不是以程序员可以直接访问线程的结构可视方式提供的。
附图说明
结合附图根据下文的详细说明,将更全面地理解和认识本发明的实施例,其中:
图1是根据本发明一个实施例利用本发明方法和设备的示范计算机系统的框图;
图2图示根据本发明一个实施例的示范芯片级多处理器;
图3图示根据本发明一个实施例的示范同时多线程处理器;
图4图示根据本发明一个实施例的示范非对称多处理器;
图5图示根据本发明一个实施例用于提供用户级多线程操作的示范执行环境;
图6图示根据本发明一个实施例的Shred与共享存储器的线程之间的示范关系;以及
图7图示根据本发明一个实施例的用户级多线程操作的示范过程的流程图。
具体实施方式
公开一种用于提供用户级多线程操作的方法和系统。根据本发明技术的方法包括接收编程指令以通过指令集体系结构(ISA)来执行一个或多个共享资源的线程(Shred)。通过ISA来配置一个或多个指令指针;并且利用微处理器同时执行一个或多个Shred,其中该微处理器包括多个指令定序器。
在下文描述中,出于解释的目的提出特定的术语。但是,对于本领域技术人员来说,显然这些特定的细节并非是必不可少的。下文详细描述中的一些部分是依据对计算机存储器内的数据位进行操作的算法和符号表示来给出的。这些算法描述和表示是数据处理领域的技术人员向本领域的其他技术人员最有效地表达其工作内容的方式。在本文中以及一般来说,算法被构想为促成期望结果的独立操作序列。这些操作是需要以物理方式操纵物理量的那些操作。通常但不一定,这些量采用能够被存储、传送、组合、比较和以其他方式操纵的电信号或磁信号的形式。以位、值、元素、符号、字符、术语、数字等提及这些信号时常被证明是方便的,主要是因为常用。
但是切记,所有这些和相似的术语均与适合的物理量相关联,并且仅仅是应用于这些量的便于使用的标号。除非明确说明,否则从上面的讨论中来看显然会意识到,整个说明书中,使用诸如“处理”、“计算”、“操作”、“确定”等术语的讨论涉及计算系统或类似电子计算装置的动作和/或处理,这些装置把在计算系统的寄存器和/或存储器中的表示成物理(如电子)量的数据处理和/或转换成在计算系统的存储器、寄存器或其它此类信息存储、传输、或显示装置内的同样表示成物理量的其它数据。
所提出的本发明实施例还涉及一种用于执行本文的操作的设备。该设备可以是针对所需目的专门设计的,或它可以包括由计算机中存储的计算机程序选择性激活或重新配置的通用计算机。此类计算机程序可以存储在计算机可读存储媒体中,例如但不限于包括软盘、光盘、CD-ROM和磁光盘的任何类型的磁盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡或适于存储电子指令的任何类型的媒体,并且它们均耦合到计算机系统总线。
本文提出的算法和显示并不固有地与任何特定的计算机或其他设备相关。多种通用系统可以结合本发明原理的程序来使用,或构造更专用的设备来执行所必需的方法可能证明是便利的。根据下文描述,将明了用于各种此类系统的必需的结构。此外,本发明的一个实施例不是参考任何特定的编程语言来描述的。将认识到可以使用多种编程语言来实施本文所描述的本发明实施例的原理。
在本说明书中所用的“用户”描述用户级软件,如应用程序、非特权代码和相似的软件。用户级软件与操作系统或相似的特权软件是不同的。根据本发明的一个实施例,下文描述应用于MIMD处理器,如上所述。
图1是根据本发明一个实施例利用本发明方法和设备的示范计算机系统100的框图。计算机系统包括处理器105。芯片组110为系统100提供存储和I/O功能。更具体地来说,芯片组110包括图形和存储器控制器集线器(GMCH)115。GMCH115作为与处理器105通信的主控制器,还作为主存储器120的控制器。根据本发明一个实施例,处理器105使多线程操作能够扩展到用户级。GMCH115还提供至与之耦合的高级图形端口(AGP)控制器125的接口。芯片组110还包括执行大量I/O功能的I/O控制器集线器(ICH)135。ICH135耦合到系统管理总线(SM总线)140。
ICH135耦合到外设组件互连(PCI)总线155。超级I/O(“SID”)控制器170耦合到ICH135,以提供至诸如键盘和鼠标175的输入装置的连接性。通用I/O(GPIO)总线195耦合到ICH135。如图所示,USB端口200耦合到ICH135。可以在该总线上将如打印机、扫描仪、游戏杆等的USB设备添加到系统配置。集成驱动器电子部件(IDE)总线205耦合到ICH135,以将IDE驱动器210连接到计算机系统。在逻辑上来说,ICH135看上去像是单个物理组件内的多个PCI设备。
包括在处理器105中的是指令集体系结构。指令集体系结构(ISA)是诸如处理器105的微处理器的一种抽象模型,它由状态单元(寄存器)和对那些状态单元操作的指令组成。指令集体系结构通过为程序员和微处理器设计人员提供微处理器行为的抽象规范而作为软件与硬件之间的分界。
硅芯片上可提供的晶体管数量上的发展已经能够将多线程操作引入到通用微处理器。多线程操作可采用两种不同的方式来实施:芯片级多处理器(CMP)和同时多线程处理器(SMT),二者都可以用作处理器105。
图2图示根据本发明一个实施例的示范芯片级多处理器。在如处理器200的芯片级多处理器中,多个CPU核210-213被集成到单个硅芯片200上。CPU核210-213的每一个能够完成一个独立线程220-223的执行,即使一些资源(如高速缓存)可能为CPU核210-213中的一个以上所共享。
图3图示根据本发明一个实施例的示范同时多线程处理器300。处理器105可以是如处理器300的同时多线程处理器。在同时多线程处理器300中,单个CPU核310能够完成多个线程的执行。CPU核310通过以极精细的粒度共享CPU资源使得对于软件来说看上去像是存在两个或两个以上处理器(常常基于逐个时钟来确定哪个线程利用每个资源来处理)。
图4图示根据本发明一个实施例的示范非对称多处理器400。处理器105可以是如多处理器400的非对称多处理器。构建芯片级多处理器400、其中CPU核410-427具有不同的微体系结构但是相同的ISA,这是可能的。例如,可以将小量的高性能CPU核410-411与大量的低功率CPU核420-427集成。这种类型的设计可以实现高合计吞吐量以及高标量性能。这两种类型的CPU核可以对于软件来说像是常规共享存储器的线程或Shred,或二者的某种组合。指令集体系结构(ISA)是诸如处理器105的微处理器的一种抽象模型,它由状态单元(寄存器)和对那些状态单元操作的指令组成。ISA通过为程序员和微处理器设计人员提供微处理器行为的抽象规范而作为软件与硬件之间的分界。本发明的编程模型使应用程序能够直接控制多个非对称CPU核。
共享存储器的编程模型
现有技术的多线程微处理器采用与现有技术共享存储器的微处理器系统相同的编程模型。该编程模型如下文所述。微处理器向操作系统提供执行的多个线程。操作系统使用这些线程来并发运行多个应用(“进程”),和/或并发运行来自单个应用的多个线程(“多线程”)。在这两种情况中,对于软件来说线程看上去像是独立的CPU。主存储器为所有线程所共享,线程之间的通信经由主存储器来完成。CPU内的硬件资源也可以被共享,但是微体系结构将这种共享对软件隐藏。
虽然传统的共享存储器的微处理器编程模型广泛地被多种操作系统和应用程序所理解和支持,但是这种模型具有多个缺点。它们是:
1)线程之间的通信通过主存储器来完成,因此极慢。高速缓存可以缓解一些等待时间,但是通常必须将高速缓存行从一个CPU核传给另一个,以便利于共享。
2)线程之间的同步使用基于存储器的信号量(semaphore)来完成,因此极慢。
3)创建、摧毁、挂起和恢复线程需要操作系统干预,因此极慢。
4)微处理器供应商无法提供最有效的多线程操作方法,因为CPU多线程操作中的改进被上面描述的存储器等待时间以及操作系统等待时间所抵消。
多线程操作体系结构扩展
出于有关现有技术系统的上述原因,本发明的方法和系统通过多线程操作体系结构扩展将处理器体系结构扩展为包括结构可视的多线程操作。提供在单个处理单元内的多个同时执行的线程、多个指令指针以及某种应用状态(寄存器)的多个副本。执行的多个线程不同于现有的共享存储器的线程,称为Shred或共享资源的线程。
本发明的多线程操作体系结构扩展(它的一个示例在下文称为“MAX”)包括现有体系结构功能,另外还支持多个同时的Shred,它们均具有自己的指令指针、通用寄存器、FP寄存器、分支寄存器、预测寄存器和某些应用寄存器。创建非特权指令以创建并摧毁Shred。除共享的存储器外,Shred之间的通信还通过共享的寄存器来完成。对信号量的需求将减少,因为本发明的多线程操作体系结构扩展会保证对共享的寄存器的原子访问。此外,本发明的多线程操作体系结构扩展可以结合32位体系结构、如Intel公司的32位体系结构,或64位体系结构、如Intel公司的64位体系结构,或甚至16位体系结构来使用。
根据本发明一个实施例,下表中示出常规共享存储器的多处理器线程与Shred之间的比较。
操作 共享存储器的多处理器线程 多线程操作体系结构扩展Shred
创建、摧毁 操作系统调用 非特权指令
通信 共享的存储器 共享的寄存器和存储器
同步 存储器信号量 寄存器和存储器信号量。共享的寄存器保证原子更新
系统状态 对于每个线程唯一的系统状态 所有Shred的共享的系统状态
表1
应该注意本发明的多线程操作体系结构扩展在根本上不同于现有技术的体系结构扩展。虽然现有技术的体系结构扩展提供更多的指令和更多的寄存器(状态),但是多线程操作体系结构扩展提供更多的执行单元。
应用和系统状态
程序员可视的CPU状态可以划分成两类:应用状态和系统状态。应用状态由应用程序和操作系统共同使用和控制,而系统状态由操作系统独占地控制。
图5图示根据本发明一个实施例用于提供用户级多线程操作的示范执行环境。执行环境600包括下表中汇总其应用状态的寄存器:
32位体系结构应用状态 名称 宽度
通用寄存器605 EAX、EBX、ECX、EDX、EBP、ESI、EDI、ESP 32位
浮点寄存器625 STO-7 80位
段寄存器610 CS、DS、ES、FS、GS、SS 16位
标志寄存器615 EFLAGS 32位,某些位是应用
指令指针620 EIP 32位
FP控制和状态寄存器626-631 CW626SW627TW628FP操作码629指令指针630运算数指针631 16位16位16位11位48位48位
MMX寄存器635 MM0-7 64位,别名为STO-7
SSE寄存器 640 XMMO-7 128位
MXCSR寄存器 645 MXCSR 32位
表2
下文将更详细地描述用户级多线程操作寄存器650-665。
下表汇总32位体系结构系统状态。
32位体系结构系统状态 编号 宽度
控制寄存器626 CR0-CR4 32位
标志寄存器615 子集EFLAGS 32位,子集
存储器管理寄存器 GDTR、IDTR 48位
本地描述符表寄存器、任务寄存器 LDTR、TR 16位
调试寄存器、 DR0-DR7 32位
模型专用寄存器650 MSR0-MSRN 64位包括用于时间戳计数器、APIC、机器检查、存储器类型范围寄存器、性能监视的寄存器
共享的寄存器655 SH0-SH7 32位
Shred控制寄存器660 SC0-SC4 32位
表3
对于每个Shred来说,应用状态划分成两类:每个Shred的应用状态和共享的应用状态。本文所述的MAX编程模型提供每个Shred的应用状态的唯一实例,而共享的应用状态在多个Shred之间共享。系统状态仅有一个副本,对应于给定线程的所有Shred共享相同的系统状态。下表中给出了应用和状态的大致划分:
状态 类型
通用寄存器(可编程子集)浮点寄存器(可编程子集)SSE寄存器(可编程子集)指令指针标志(应用子集) 每个Shred的专用状态
通用寄存器(可编程子集)浮点寄存器(可编程子集)SSE寄存器(可编程子集)共享的寄存器(新的)标志(系统子集)存储器管理寄存器地址转换(TLB)当前特权级控制寄存器 在多个Shred之间共享,专用于每个线程
主存储器 在多个线程之间共享
表4
本发明的多线程操作体系结构扩展提供大多数应用状态的可编程共享或保密,以便软件可以选择最佳分区。利用位向量来执行编程,由此可以将各个寄存器选为共享的或专用的。硬件重命名器可以按位向量所指定的从共享池或专用池中分配寄存器。
MAX的整个存储需求小于现有技术的同时多线程处理器和芯片级多处理器的需求。在MAX中,仅复制每个Shred的专用应用状态,而在实施传统共享存储器的多处理器编程模型的同时多线程处理器或芯片级多处理器中,必须复制整个应用和系统状态。
Shred/线程层次结构
每个共享存储器的线程由多个Shred组成。Shred和共享存储器的线程构成两级层次。在备选实施例中,可以根据共享存储器的MAX处理器簇构建三级层次。这些簇使用消息传递来通信。操作系统处理线程的调度,而应用程序处理Shred的调度。在任何给定的Shred视其他Shred为本地的或远程的意义上来说,Shred是非一致性的。对于每个Shred,复制每个Shred的应用状态。共享的应用和系统状态对于本地Shred是公用的,并且为每个共享存储器的线程复制它。存储器状态仅有一个副本。
图6图示根据本发明一个实施例在Shred与共享存储器的线程之间的示范关系。对于每个Shred,复制每个Shred的应用状态510。共享的应用和系统状态520对于本地Shred是公用的,并且为每个共享存储器的线程复制它。存储器状态530仅有一个副本。
因为系统状态520在MAX编程模型中的多个Shred之间共享,所以这些多个Shred属于相同的进程。本发明的多线程操作体系结构扩展旨在供多线程应用、库和虚拟机使用。MAX编程模型为这种类型的软件提供对它的Shred前所未有程度的控制以及利用上述共享存储器的多处理器编程模型无法实现的性能潜力。
在Shred之间无需任何保护检查,因为它们全部以相同的特权级运行并共享相同的地址转换。因此,可以在Shred间通信期间避免传统保护机制。
由于共享的系统状态的原因,MAX编程模型无法用于在相同线程上运行不同的进程。为此,MAX和现有技术共享存储器的编程模型共存于相同的系统内。
因为给定的CPU提供有限数量的物理Shred,所以软件采用与硬件线程的虚拟化相似的方式对该数量的可用Shred虚拟化。虚拟化产生有限数量的并行运行的物理Shred以及潜在无限数量的虚拟Shred。
系统调用
可以通过将控制从应用程序转移到操作系统并执行上下文切换来以常规方式处理操作系统调用。就MAX体系结构而言,一个关键的不同是,在任何Shred上调用操作系统都将挂起与给定线程相关联的所有Shred的执行。操作系统负责保存并恢复属于相同线程的所有Shred状态。
由于附加的状态,上下文切换开销增加。上下文切换存储器占用与Shred的数量成比例的增长。但是,上下文切换时间不会增长太多,因为每个Shred可以与其他Shred并行地保存/恢复它的状态。上下文切换机制允许使用多个定序器来实施并行状态保存/恢复。操作系统本身利用多个Shred。
因为调用操作系统的成本增加,所以过去由操作系统执行的某个功能迁移到应用。该功能包括某些异常和中断的处理和线程维护。
执行系统调用的一个备选实施例是基于如下的观察:线程正变得便宜,而上下文切换正变得昂贵。在该实施例中,线程专用于运行操作系统而第二线程专用于运行应用程序。当应用程序Shred执行系统调用时,它将消息发送到操作系统Shred(通过共享的存储器)并等待响应消息。以此方式,消息传递和等待机制替代了常规控制转移和上下文切换机制。无需对任何线程的地址转换的更改。其好处是一个Shred向操作系统发送的消息不干扰其他本地Shred。
异常
在现有技术体系结构中,异常挂起应用程序的执行并调用操作系统异常处理程序。在MAX编程模型下,该行为是不合乎要求的,因为挂起一个Shred来调用操作系统会导致所有Shred(与给定线程相关联的)也被挂起。
为了解决该问题,我们引入一种新的用户级异常机制,它为应用程序提供服务多种类型异常的第一次机会。用户级异常机制是基于如下的观察:很少现有异常类型最终是由应用本身来服务的。
对于用户级异常机制,如何报告异常和如何服务异常是不同的。异常可以划分成如下三种类别。
1.报告给应用程序并由应用程序服务的异常。例如,除以零异常被报告给导致异常的应用,并由该应用来服务。无需或不期望任何操作系统介入。
2.报告给应用程序然后必须调用操作系统来服务的异常。应用产生的页故障可以报告给该应用,但是应用程序必须调用操作系统来换入该页。
3.必须报告给操作系统并由操作系统服务的异常。出于安全性原因,硬件中断必须报告给操作系统。系统调用(软件中断)显然必须报告给操作系统。
下表说明这三种类别的每一种中的异常。提出作为与本发明的一个实施例相关的异常类型的“高速缓存未命中的加载异常”和“精细粒度的定时器”异常类型。
异常类型 报告给 服务提供
除以零、溢出、边界、FP异常 应用 应用
对齐检查 应用 应用
无效操作码 应用 应用
高速缓存丢失的加载异常 应用 应用
精细粒度化的定时器 应用 应用
栈段故障 应用 系统
一般性保护 应用 系统
页故障 应用 系统
双重故障 应用 系统
设备不可用 应用 系统
硬件中断 系统 系统
不可屏蔽中断 系统 系统
软件中断(INTn) 系统 系统
表5
报告给应用程序的异常在应用内选择性地被处理,或被传递到操作系统以进行处理。在后一种情况中,应用程序响应异常(例如页故障)执行系统调用来明确地从操作系统请求服务。这与传统操作系统固有地代应用执行此类服务的传统方法形成对照。要避免嵌套的异常,提出特殊的规定以确保将异常中继到操作系统的应用代码自己不引起附加的异常。该用户级异常机制在影子寄存器组中保存最小数量的CPU寄存器,并且处理器引向到(vector to)固定位置。
虚拟机
虚拟机和本发明实施例的多线程操作体系结构扩展彼此对对方施加约束,因为无论何时只要软件尝试访问正被虚拟化的资源,虚拟机就会产生异常,并且异常处理对Shred有重大性能影响。
在虚拟机中,特权指令的执行或对特权处理器状态的访问产生异常。该异常必须报告给虚拟机监视器(并由它服务)。在MAX中,由操作系统(以及虚拟机监视器)服务的异常导致与给定线程相关联的所有Shred被挂起。虚拟机监视器了解多个Shred的存在。虚拟机体系结构将非特权指令和处理器资源上产生的异常的数量降至最小。
死锁
在MAX体系结构中死锁防止是复杂的,因为Shred可能被其他本地Shred挂起。应用软件确保如果一个Shred引起OS服务的异常或系统调用,从而导致所有本地Shred被挂起,则将不会发生死锁,
本地(Shred间)通信和同步不同于远程(线程间)通信和同步。使用共享的寄存器655(如图5所示)或共享的存储器来执行本地通信。使用共享的存储器来执行远程通信。使用原子寄存器更新、寄存器信号量或存储器信号量来执行本地数据同步。使用存储器信号量来执行远程数据同步。
本地和远程Shred控制(创建、摧毁)都使用MAX指令来执行。Shred控制不调用操作系统来执行wait()或yield(),因为这可能对在给定的线程上挂起所有Shred产生非期望的影响。通过对用户级Shred库的调用来替代线程维护所用的操作系统调用。继而Shred库调用操作系统来按需要创建并摧毁线程。
Shred和纤程
Shred不同于现有技术的操作系统中实施的纤程。下表汇总了这些不同:
特征 纤程 Shred
创建 一个线程可以创建多个纤程 一个线程可以创建多个Shred
并行性 一个线程在任何事间瞬间只能运行一个纤程 一个线程可以同时运行多个Shred
调度 由软件使用协作式多任务机制调度纤程 由硬件使用同时多线程操作或芯片级多处理来调度Shred
状态 每个纤程具有它自己的专用应用状态 每个Shred具有它自己的专用应用状态
状态存储 当前运行的纤程的状态被存储在寄存器中。不活动的纤程的状态被存储在存储器中。 每个当前运行的物理Shred的状态被存储在芯片内寄存器中。不活动的虚拟Shred的状态被存储在存储器中。
状态管理 操作系统在上下文切换上保存/恢复当前运行的纤程的状态 操作系统在上下文切换上保存/恢复所有Shred的应用状态
表6
硬件实施
支持多线程操作体系结构扩展的微处理器的实施可以采用芯片级多处理器(CMP)和同时多线程处理器(SMT)的形式。现有技术的CMP和SMT处理器试图将CPU资源的共享对软件隐藏,而当利用本发明实施例的多线程操作体系结构扩展来实施时,处理器公开作为体系结构的一部分的共享。
为了将MAX处理器实施为芯片级多处理器,使用一种广播机制以在CPU核之间的同步时保存系统状态的多个副本。引入快速通信总线用于共享的应用和系统状态。因为片内通信相对比片外存储器快速,所以这些通信总线赋予MAX处理器超过共享存储器的多处理器的性能优势。
将MAX处理器作为同时多线程处理器来实施是可能的,因为硬件已经提供资源的必要共享。在多线程32位处理器上几乎完全以微代码形式实施MAX是可能的。
根据一个实施例,本发明的方法和系统允许在多个Shred之间进行系统调用和异常(报告给OS)的优先级设置,以便在任何时间瞬间仅服务一个Shred的请求。一个请求的优先级设置和选择是必要的,因为系统状态一次只能够处理一个OS服务请求。例如,假定Shred1和Shred2同时执行系统调用。优先级设置器确保仅Shred1的系统调用被执行,而Shred2的系统调用尚未开始执行。为了公平性考虑,优先级设置器采用循环选择算法,显然也可以使用其他选择算法。
可伸缩性
MAX编程模型的可伸缩性由如下因素确定:
1)可在上下文切换上保存/恢复的状态的数量
2)上下文切换期间因挂起与给定线程相关联的所有Shred导致的并行度的降低
3)Shred间的通信
随着Shred数量的增加,必须在上下文切换上保存/恢复的状态的数量也增加,并且因挂起所有Shred导致丢失的潜在并行度也随之增加。这两个因素将限制Shred的实际数量。
Shred间通信还将限制可伸缩性,因为该通信使用片内资源来执行。相比之下,传统共享存储器的多处理器模型的可伸缩性受限于片外通信。
共享的分类信息(Taxonomy)
下表给出Shred的软件使用、实施和体系结构上的各种自由度的分类信息:
属性 选项1 选项2 选项3
指令集体系结构 同构-所有Shred实施相同的指令集体系结构中 异构-Shred实施不同的指令集体系结构
微体系结构实施 对称-所有Shred运行在相同的硬件微体系结构上 非对称-Shred运行在不同的硬件微体系结构上
应用并行度 顺序-常规顺序代码 并行-并行化的代码
Shred生成 程序员生成的-Shred由程序员明确地生成 编译的-Shred由编译器自动创建 固定的功能-Shred专用于特定功能,如垃圾收集
体系结构正确性 体系结构-所有Shred都对程序的体系结构正确性给予贡献 提示(hint)-一些Shred对体系结构正确性给予贡献,而另外的Shred仅对性能给予贡献
输入/输出 计算。Shred仅执行计算。 I/O。除了计算外,Shred还执行输入/输出。
表7
两种类型的MAX体系结构区分为:
同构和异构。同构Shred与同构多处理器相似,所有Shred都执行相同的指令集。异构Shred也可能与异构多处理器相似。例如,异构Shred可以构造于如下两种处理器之间:
·32位处理器和网络处理器。
·32位处理器和64位处理器。
相似地,底层微体系结构可以是对称的或是非对称的。后者的一个示例是包含少量大且高性能CPU核和大量小且低功率CPU核的芯片级微处理器,如图4所示的处理器。
使用模型
下表汇总本发明的多线程操作体系结构扩展的实施例的多个使用模型:
使用模型 分类信息 描述 优点
预取 同构ISA、顺序代码、编译器生成的,提示、计算 辅助器(helper)线程在主线程之前预取存储单元。辅助器线程由编译器生成。 加速标量代码,高速缓存未命中中花费大量时间
常规线程的替代 同构ISA、并行代码、程序员生成的、体系结构、计算 使用Shred替代常规共享存储器的线程。库提供线程服务,替代操作系统。 加速线程化的代码。线程原语变得加快多个数量级。
编译器的专用执行资源 同构ISA、顺序代码、编译器生成的、体系结构、计算 编译器根据标量源代码创建多个Shred。 编译器具有对Shred的直接控制。
受控的运行时间环境的专用线程 同构ISA、固定的功能、体系结构、计算 Shred专用于受控的运行时间功能。例如,可以使用专用的Shred执行准时转换和垃圾收集。 转换和垃圾收集Shred变得实质上免费
并行编程语言 同构ISA、并行代码、程序员生成的,体系结构、计算 程序员创建编译成多个Shred的并行代码。 线程原语足够快速,以用作指令。
具有集成I/O功能的CPU 异构ISA、并行代码、程序员生成的、体系结构、输入/输出 I/O功能直接由应用程序执行。例如图形和网络处理。 允许将I/O功能直接集成到CPU体系结构中。
同时多ISACPU 异构ISA、非对称uarch、程序员生成的、体系结构、计算 单个CPU实施多个ISA,例如32位体系结构和64位体系结构。每个ISA都可供程序员用作Shred。 可能受关注,但是可能没有用。
非对称核多处理器 同构ISA、非对称uarch、体系结构、计算 CMP实施核的混合,例如高性能与低功率。 实现良好的标量和吞吐量性能。
表8
预取
在预取使用模型中,主线程产生用于从主存储器预取高速缓存行的一个或多个辅助器线程。辅助器线程是响应主线程上的高速缓存未命中产生的。因为主存储器访问需要数百到数千个CPU时钟来完成,所以标量代码的执行实际将在主存储器访问期间停止,除非对高速缓存未命中并进入导主存储器的加载故障进行体系结构规定。
常规线程的替代
Shred可以被多线程应用用作常规线程的高性能替代。提供用户级软件库以执行先前由操作系统执行的Shred管理功能(创建、摧毁等)。该库利用Shred指令并且按需要调用操作系统以请求附加的线程。调用软件库远比调用操作系统快速,因为无需上下文切换。
编译器的专用执行资源
编译器可以按它使用其他处理器资源(如寄存器)的相同方式使用Shred。例如,编译器可以将处理器视为具有8个整数寄存器、8个浮点寄存器、8个SSE寄存器和4个Shred。通过将Shred视为资源,编译器以类似寄存器分配的方式分配Shred。与寄存器一样,需要某种机制以在应用程序需要比硬件所提供的虚拟Shred更多的虚拟Shred的情况中将Shred溢出/填充到后备储存。在现有技术体系结构中,常常不将控制流视为处理器资源,因为只有一个。
受控的运行时环境的专用线程
在受控的运行时环境中,Shred专用于诸如垃圾收集、准时编译和成形(profiling)的功能。Shred实质上“免费”执行此类功能,因为Shred是作为指令集体系结构(ISA)的一部分提供的。ISA是对于程序员或编译器编写者可视的处理器的一部分。ISA用作软件和硬件之间的分界。
并行编程语言
MAX直接支持并行编程语言和硬件描述语言。例如,iHDL或Verilog编译器直接生成用于多个Shred的代码,因为源代码明确地是并行的。
通过芯片级多处理器使线程的扩散成为可能,这促成多线程操作的语言支持。这种支持通过对操作系统和运行时库的调用来提供。对多线程操作的语言支持迁移到主流通用的编程语言。
具有集成I/O功能的CPU
Shred用于实施如网络协处理器的I/O功能。作为Shred实施的网络协处理器之间的一个重要不同之处是,它看上去像是CPU的一部分,而非I/O设备。
在现有技术的系统中,当应用程序需要I/O时,该应用程序使用API(应用程序接口)调用操作系统。继而操作系统调用将该请求发送到I/O设备的设备驱动程序。操作系统负责将来自多个应用程序的I/O请求排队或串行化,以确保I/O设备一次仅处理一个(或有限个)请求。这是必要的,因为I/O设备的状态对于系统是全局的,而CPU状态在多个应用之间是时分多路复用的。
在实施为异构Shred的I/O设备中,I/O设备的状态被视为CPU的应用状态的扩展。应用程序直接控制CPU的应用状态和I/O设备状态。应用状态和I/O状态都由操作系统在上下文切换上保存/恢复。I/O设备构造为使它的状态可以在多个应用之间时分多路复用,而不会有负面影响。
同时多ISA CPU
64位体系结构定义为通过一种称为“无缝”的机制包括32位体系结构应用体系结构以及新的64位指令集。与32位体系结构指令集的兼容性使64位体系结构处理器能够运行现有32位体系结构应用,也可以运行64位体系结构应用。
在当前定义下,64位体系结构CPU在任何时间瞬间运行64位体系结构线程或32位体系结构线程。两种ISA之间的切换通过64位体系结构br.ia(分支到32位体系结构)和32位体系结构jmpe(跳至64位体系结构)指令来实现。32位体系结构寄存器被映射到64位体系结构寄存器,使得只需要状态的一个副本。
可以创建多ISA CPU,其中在任何时间瞬间多于一个指令集体系结构在运行。这可以通过使用64位体系结构ISA的Shred和32位体系结构ISA的第二Shred来实现。与同构Shred一样,必须为64位体系结构的Shred和32位体系结构的Shred都提供相异的应用状态。64位体系结构的Shred和32位体系结构的Shred同时运行。
描述了通过上述多线程操作体系结构扩展来提供用户级多线程操作的本发明方法和系统的特征之后,下文给出32位系统的实施例。
32位体系结构实施例
虽然是参考IA-32体系结构描述的,但是读者理解本文所描述的方法和系统可以应用于其他体系结构,如IA-61体系结构。此外,读者回顾图5,还理解根据本发明一个实施例的示范执行环境。将少量指令添加到IA-32ISA以及多个寄存器650-660,以对IA-32提供用户级多线程操作的能力。
该多线程操作体系结构扩展由如下状态构成:
·模型专用寄存器650(MAX_SHRED_ENABLE),供操作系统或BIOS用于启用/禁用这些扩展。
·CPUID中的三个位扩展特征信息,特征信息指示处理器是否实施扩展以及可用的物理Shred的数量。
·大多数应用状态的复制(EAX、EBX等),使得每个Shred具有它自己的应用状态专用副本。
·一组共享的寄存器SH0-SH7 655,它们可以用于Shred之间的通信和同步。
·一组控制寄存器SC0-SC4 660,用于Shred管理。
该多线程操作体系结构扩展由如下指令构成:
·Shred创建/摧毁:forkshred、haltshred、killshred、joinshred、getshred
·通信:向共享的寄存器655mov/从共享的寄存器655mov,向共享的寄存器655同步mov/从共享的寄存器655同步mov。
·同步(信号量):cmpxshgsh、xaddsh、xchgsh
·发信号:signalshred
·到/从多Shred化模式的转换:entermsm、exitmsm
·状态管理:shsave、shrestore
·其他:向Shred控制寄存器mov/从Shred控制寄存器mov
此外,IA-32机制设有如下功能。
·IA-32异常机制退出多Shred化模式,并保存有关异常的所有Shred状态(当适用时)。
·IA-32IRET指令恢复所有Shred状态并返回到多Shred化模式(当适用时)。
·引入用户级异常机制。
配置
使用模型专用寄存器(MSR)650来启用多线程操作体系结构扩展。下文描述MSR。
寄存器地址(十六进制) 寄存器地址(十进制) 寄存器名称字段和标志 共享的/唯一的 位描述
1FOH 496 MAX_SHRED_ENABLE 共享的 位0启用多线程操作体系结构扩展。复位时初始化至0。操作系统或BIOS必须通过将1写入该寄存器来明确启用MAX。
表9
仅在特权级0写和读如Shred MSR 650的模型专用寄存器。如果未启用多线程操作体系结构扩展,则将遗留代码的执行限于Shred编号0。
初始EAX值 有关处理器提供的信息
1H EAX版本信息(类型、系列、模型和步进ID)EBX位7-0:种类索引位15-8:CLFLUSH行大小。(值.8=以字节计的高速缓存行大小)位23-16:每个物理处理器的逻辑处理器的数量。位31-24:本地APIC IDECX扩展的特征信息EDX特征信息
图10
CPUID
将1A-32CPUID指令修改为返回该处理器支持多线程操作体系结构扩展的指示以及所提供的物理Shred的数量的计数。这通过将三位(NSHRED)添加到ECX中返回的扩展的特征信息中来实现。下表给出CPUID指令返回的信息:
初始EAX值 有关处理器提供的信息
1H EAX版本信息(类型、系列、模型和步进ID)EBXBits7-0:种类索引位15-8:CLFLUSH行大小。(值.8=以字节计的高速缓存行大小)位23-16:每个物理处理器的逻辑处理器的数量。位31-24:本地APIC IDECX扩展的特征信息EDX特征信息
表11
ECX寄存器中返回的扩展的特性信息具有如下形式:
位# 助记符 描述
18∶16 NSHRED 指示硬件支持的物理Shred的数量的三个位:000:1个Shred/thread001:2个Shred/thread010:4个Shred/thread011:8个Shred/thread100:16个Shred/thread101:32个Shred/thread110:保留111:保留
表12
如果未启用多线程操作体系结构扩展(通过MAX_SHRED_ENABLE MSR),则扩展的特性信息对于NSHRED返回000的值。
体系结构状态
该多线程操作体系结构扩展将所有状态置于三个类别的其中之一中。
·对于每个Shred专用的
·在本地Shred之间共享的
·在所有Shred之间共享的
上表2中示出了IA-32状态至每种类别的分类。每个Shred的Shred专用状态被复制一次。Shred专用状态对于每个Shred是完全专用的。确切地来说,该体系结构不提供个别地从一个Shred读或写另一个Shred的专用寄存器的任何指令。该体系结构提供shsave和shrestore指令以统一地将所有Shred的专用状态写和读到存储器,但是这些指令仅以单Shred化模式执行。上图3示出Shred的共享状态。
将一组共享的寄存器SH0-SH7 655用于Shred之间的通信和同步。通过向共享的寄存器mov和从共享的寄存器mov来读和写这些寄存器655。SH0-SH7寄存器655存储32位整数值。根据一个实施例,通过主存储器共享80位浮点625和128位SSE数据640。
设有一组Shred控制寄存器SC0-SC4 660。这些寄存器如下定义。
寄存器 名称 描述
SC0 Shred运行寄存器 SC0包含每个Shred一位的位向量。位0对应于Shred0;位1对应于Shred1,依此类推。每个位指示相关联的Shred当前是在运行还是暂停。当通过MAX_Shred_ENABLE MSR禁用多线程操作体系结构扩展时,SC0包含指示仅Shred0是活动的值1。
SC1 中断Shred运行寄存器 当从多Shred化转换到单Shred化模式时,将SC0的内容复制到SC1,并且当从单Shred化转换到多Shred模式时,将SC1的内容复制到SC0。
SC2 Shred状态保存/恢复指针 SC2指向存储器中的Shred状态保存/恢复区。该存储区用于保存和恢复上下文切换上的所有运行Shred的状态。
SC3 共享的寄存器空/满位 SC3包含共享的寄存器的空/满位。位0对应于sh0;位1对应于sh1,依此类推。
SC4 用户级中断表基地址 SC4指向用户级中断表的基地址。
表13
存储器状态为所有Shred所共享。下表中示出EFLAGS寄存器615的分类。
类型 已复制 助记符 描述
0 状态 Y CF 进位标志
2 状态 Y PF 奇偶校验标志
4 状态 Y AF 辅助进位标志
6 状态 Y ZF 零标志
7 状态 Y SF 符号标志
8 系统 Y TF 陷阱标志
9 系统 N IE 中断启用标志
10 控制 Y DF 方向标志
11 状态 Y OF 溢出标志
13∶12 系统 N IOPL IO特权级
14 系统 N NT 嵌套任务
16 系统 N RF 恢复标志
17 系统 N VM 虚拟86模式
18 系统 N AC 对齐检查
19 系统 N VIF 虚拟中断标志
20 系统 N VIP 虚拟中断未决
21 系统 N ID ID标志
表14
以每个Shred为基础来复制标记为“Y”的标志。标记为“N”的标志具有由所有Shred共享的一个副本。
32位EFLAGS寄存器615包含一组状态标志、控制标志和一组系统标志。在处理器105的初始化(通过断言RESET引脚或ENIT引脚)之后,EFLAGS寄存器615的状态是00000002H。寄存器615的位1、3、5、15和22至31保留。软件不应使用或依赖于这些位的任何一个的状态。
可以使用特定目的指令直接修改EFLAGS寄存器615中的一些标志。没有指令允许直接检查或修改整个寄存器。但是,如下指令可用于将标志集合移到过程栈或EAX寄存器并且移动来自过程栈或EAX寄存器的标志集合:LAHF、SAHF、PUSHF、PUSHFD、POPF和POPFD。在将EFLAGS寄存器615的内容传送到过程栈或EAX寄存器之后,可以使用处理器的位操纵指令(BT、BTS、BTR和BTC)来检查和修改这些标志。
当挂起任务(使用处理器的多任务处理实用程序)时,处理器自动将EFLAGS寄存器615的状态保存在正在挂起的任务的任务状态段(TSS)。当将自己绑定到新任务时,处理器以来自新任务的TSS的数据加载EFLAGS寄存器615。
当对中断或异常处理程序过程发出调用时,处理器自动将EFLAGS寄存器615的状态保存在过程栈上。当利用任务切换来处理中断或异常时,EFLAGS寄存器615的状态被保存在正在挂起的任务的TSS中。
Shred创建/摧毁
可以使用forkshred指令创建Shred。其格式是
forkshred    imm16,目标IP
forkshred    r16,目标IP
提供两种形式,具有Shred编号作为立即运算数的一种形式和具有Shred编号作为寄存器运算数的第二种形式。对于这两种形式,指定目标IP作为立即运算数,其值是相对于代码段的开头(标称为0),而不是相对于当前IP。
forkshred imm 16,目标IP编码与far jump指令相似,以shred编号替代16位选择器(selector)并且以目标IP替换16/32位偏移量。
forkshred指令在SC0中设置适合的运行位,并在指定的地址开始执行。不同于Unix fork()系统调用,forkshred指令不复制父Shred的状态。新的Shred利用更新的EIP以及所有其他专用寄存器的当前值开始执行。可预期的是新的Shred应通过加载ESP并从共享的寄存器或存储器中检索输入参数来初始化它的栈。forkshred指令不自动传递参数。
如果目标Shred已经在运行,则forkshred产生#SNA(Shred不可用)异常。这是一个用户级异常,如下文所述。软件确保它不尝试启动已经运行的Shred,或者提供暂停现有Shred并返回以重新执行forkshred的#SNA处理程序。如果Shred编号大于硬件支持的Shred的最大数量,则产生#GP(0)异常。
为了终止当前Shred的执行,使用haltshred指令。Haltshred清除SC0中的当前Shred的运行位并终止当前Shred的执行。Shred的专用状态即使被暂停时仍被保存。因为不存在任何机制可供一个Shred用来访问另一个Shred的专用状态,所以无法看到暂停的Shred的专用状态。但是,该状态一直存在,并在Shred通过forkshred又开始执行时变得可被看到。
为了提前终止另一个Shred的执行,引入killshred指令。其格式为
killshred    imm16
killshred    r16
根据一个实施例,Shred编号是16位寄存器或立即运算数。killshred清除SC0中的指定Shred的运行位并终止该Shred的执行。虽然暂停,但是该Shred的专用状态被保存。
如果目标Shred未在运行,则killshred无响应地被忽略。该行为对于避免killshred与正常终止的Shred之间的竞争(race)是必要的。在执行killshred之后,软件得以保证目标Shred不再运行。允许Shred自己杀死自己,而代替执行haltshred。如果Shred编号大于硬件支持的Shred的最大数量,则产生#GP(0)异常。
为了等待指定的Shred已经终止(如正在清除的SC0位所指示的),引入了joinshred指令。其格式为
joinshred    imm16
joinshred    r16
如果目标Shred未在运行,则joinshred立即返回。该行为避免了joinshred与正常终止的Shred之间的竞争。在执行joinshred之后,软件得以保证该目标Shred不再运行。对于Shred来说对自己执行joinshred是合法的(但是无用的)。如果Shred编号大于硬件支持的Shred的最大数量,则产生#GP(0)异常。joinshred指令不自动传递返回值。为了允许Shred确定它自己的Shred编号,引入getshred指令。其格式为
getshred    r32
getshred返回当前Shred的数量。getshred可以用于访问根据Shred编号索引的存储器阵列。getshred对16位Shred编号执行左侧补零以写入目的地寄存器的所有位。
对于所有Shred创建/摧毁指令,可以将Shred编号指定为寄存器或立即运算数。可预期的是立即形式的执行会比寄存器形式的执行快,因为Shred编号在解码时间而非执行时间是可用的。
利用立即形式,编译器指定Shred编号。利用寄存器形式,使用运行时指定。
下表给出Shred创建/摧毁指令的汇总。
指令、 描述
forkshred imm16,目标IPforkshred r16,目标IP 在指定的地址开始Shred执行
haltshred 终止当前Shred
killshred imm16killshred r16 终止指定的Shred
joinshred imm16joinshred r16 等待直到指定的Shred终止
getshred r32 返回当前Shred的数量
表15
forkshred、haltshred、killshred、joinshred和getshred指令可以在任何特权级上执行。Haltshred是非特权指令,而现有的IA-32hlt指令是特权指令。
执行killshred或haltshred导致零个运行Shred是可能的。该状态(SC0中为0)不同于现有的IA-32暂停状态。在创建用户级定时器中断之前,SC0=0是合法状态,但是无用。
通信
Shred通过现有共享的存储器并通过为此目的专门引入的一组寄存器来彼此通信。共享的寄存器SH0-SH7 655可被属于相同线程的所有本地Shred访问。SH0-SH7寄存器655可以用于将输入参数传递到Shred,传送来自Shred的返回值并且执行信号量操作。软件规范针对每个目的指定特定共享的寄存器655。
每个共享的寄存器655在SC3中具有对应的空/满位。为了写和读共享的寄存器655,使用向共享的寄存器655mov和从共享的寄存器655mov的指令。这些指令汇总如下:
mov r32,sh0-sh7
mov sh0-sh7,r32
这些指令编码与现有向控制寄存器660mov/从控制寄存器660mov和向调试寄存器mov/从调试寄存器mov的指令相似。向共享的寄存器mov/从共享的寄存器mov的指令可以在任何特权级上执行。这些指令假定软件使用附加指令明确地执行同步。向共享的寄存器mov/从共享的寄存器mov的指令既不检查也不修改SC3中的空/满位的状态。
可预期的是,向共享的寄存器655mov和从共享的寄存器655mov的等待时间将低于对共享的存储器加载和存储的等待时间。硬件实施可能推测性地读共享的寄存器655并监听其他Shred写。硬件必须在对共享的寄存器655写时确保等效的强排序。在备选实施例中,可以创建屏障指令来访问共享的寄存器655。
一个体系结构特征保持共享的寄存器排序和存储器排序彼此分开。因此,如果Shred对共享的寄存器655写,然后对存储器120写,则没有保证共享的寄存器655的内容会在共享的存储器的内容之前可被看到。这种定义的原因是,共享的寄存器655中启用循环计数器的高速访问/更新,而不创建不需要的存储器屏障。如果软件要求共享的寄存器655和存储器上的屏障,则软件应该执行共享的寄存器信号量以及存储器信号量。除了作为屏障外,存储器信号量是冗余的。
为了提供快速通信以及同步,使用向共享的寄存器同步mov/从共享的寄存器同步mov的指令。这些指令汇总如下:
syncmov r32,sh0-sh7
syncmov sh0-sh7,r32
这些指令编码与现有向控制寄存器660mov/从控制寄存器660mov和向调试寄存器mov/从调试寄存器mov的指令并行。向共享的寄存器655同步mov与它对应的异步指令相似,只是它等待空/满位指示空之后,才对共享的寄存器655写入。在对共享的寄存器655写入之后,空/满位被设为满。从共享的寄存器655同步mov与它对应的异步指令相似,只是它等待空/满位指示满之后,才从该共享的寄存器655读取。在从共享的寄存器655读取之后,空/满位被设为空。
可以利用向SC3移动来初始化空/满位,如下文所述。向共享的寄存器同步mov/从共享的寄存器同步mov的指令可以在任何特权级上执行。这些共享的寄存器通信指令汇总如下:
指令 描述
mov r32,sh0-sh7 从共享的寄存器移动。
mov sh0-sh7,r32 向共享的寄存器移动
syncmov r32,sh0-sh7 从共享的寄存器同步移动
syncmov sh0-sh7,r32 向共享的寄存器同步移动
表l6
同步
一组同步原语对共享的寄存器655操作。同步原语与现有的信号量指令相似,只是它们对共享的寄存器655操作,而非对存储器操作。这些指令如下所示:
指令 描述
cmpxchgsh sh0-sh7,r32 将共享的寄存器与r32比较。如果相等,则设置ZF并且将r32加载到共享的寄存器中。否则清除ZF,并将共享的寄存器加载到EAX中。
xaddsh sh0-sh7,r32 将共享的寄存器与r32交换。然后将r32加到共享的寄存器。该指令可以与LOCK前缀一起使用来启用原子操作。
xchgsh sh0-sh7,r32 将共享的寄存器与r32交换。该指令始终是原子的。
表17
同步原语在任何特权级上执行。这些指令既不检查也不修改SC3中的空/满位的状态。
进入/退出多Shred化模式
MAX体系结构提供一种机制以在多Shred化和单Shred化模式之间切换。单Shred化模式使处理器能够通过暂停除一个Shred外所有Shred的执行来以有序方式执行上下文切换。SC0指示当前操作模式,如下所示:
·SC0在任何位位置全包含单个“1”意味着单Shred化模式
·SC0在任何位位置全包含不同于单个“1”的任何值意味着多Shred化模式
为了执行上下文切换,需要:
1)通过切换到单Shred化模式以挂起除一个Shred外的所有Shred
2)保存Shred的状态
3)加载新Shred的状态
4)通过切换到多Shred化模式以恢复所有Shred的执行
entermsm和exitmsm指令分别用于切换到多Shred化模式和单Shred化模式。Entermsm用于进入多Shred化模式。在执行该指令之前必须加载所有Shred的状态。Entermsm将SC1中的新Shred运行向量复制到SC0中。Entermsm然后启动指定的Shred。
SC1的内容导致在执行entermsm之后没有附加Shred在运行是可能的。在此情况中,处理器保持在单Shred化模式。由于执行entermsm,执行了entermsm的Shred不再运行也是可能的。Exitmsm用于退出多Shred化模式。Exitmsm将SC0中的当前Shred执行向量复制到SC1中。除对应于执行exitmsm的Shred的一个位之外的所有SC0运行位被清除。除执行exitmsm的Shred之外的所有Shred被暂停。这些操作作为原子序列执行。SC0状态指示单Shred化模式。entermsm和exitmsm可以在任何特权级上执行。
状态管理
指令(shsave和shrestore)分别用于保存和恢复集体Shred状态,将所有Shred专用状态的内容写入到存储器,并且从存储器读取所有Shred专用状态的内容。其格式为
shsave  m16384
shrestore  m16384
存储器保存区的地址被指定为指令中的位移。地址在16字节边界上对齐。存储器保存区是16千字节,以便允许将来扩展。存储器保存区是通过添加整数寄存器来扩展现有的FXSAVE/FXRESTOR格式。每个Shred的存储器保存区定义如下:
偏移量 寄存器
0-1 FCW
2-3 FSW
4-5 FTW
6-7 FOP
8-11 FIP
12-13 CS
14-15 保留
16-19 FPU DP
20-21 DS
22-23 保留
24-27 MXCSR
28-31 MXCSR MASK
32-159 ST0-ST7
160-287 XMM0-XMM7
288-351 EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP
352-359 ES、FS、GS、SS
360-367 EIP
368-371 EFLAGS
表18
所有Shred的内容在如下计算的地址处保存/恢复:
地址=512*(Shred编号)+(基地址)
存储器保存区包括当前运行的Shred的EIP和ESP。shsave将当前EIP和ESP写入存储器。为了避免分支,shrestore指令不覆写当前Shred的EIP或ESP。当作为IRET的一部分执行时,shrestore函数不覆写当前Shred的EIP或ESP。
shsave和shrestore可以在任何特权级上但是仅在单Shred化模式中时执行。如果当在多Shred化模式中时试图执行shsave或shrestore,则产生#GP(0)异常。使用所有可用硬件资源来并行地执行shsave/shrestore存储/加载操作,实施起来是不受限制的。
shrestore无条件地从存储器加载所有Shred的状态。该行为对于确保Shred的专用状态不从一个任务泄漏到下一个任务来说是必要的。shrestore可以无条件或有条件地将所有Shred的状态存储到存储器。一个实施可以维护非体系结构可见的修改位,以在未修改专用状态的情况下跳过一些或所有shsave存储操作。
shsave和shrestore指令仅保存并恢复Shred的专用状态。操作系统负责保存并恢复共享的寄存器655。
向Shred控制寄存器660移动/从Shred控制寄存器660移动
提供指令以写和读Shred控制寄存器SC0-SC4 660。这些指令汇总如下:
mov r32,sc0-sc4
mov sc0-sc4,r32
这些指令编码与现有向控制寄存器660mov/从控制寄存器660mov和向调试寄存器mov/从调试寄存器mov的指令相似。向Shred控制寄存器mov/从Shred控制寄存器mov的指令可以在任何特权级上执行。提供安全防护以确保恶意应用程序无法通过对Shred控制寄存器写入来影响不是它自己的任何过程。
应用程序使用forkshred和joinshred,而非直接操纵SC0的内容。exitmsm可采用原子方式从多Shred化模式转换到单Shred化模式。使用从SC0mov以读当前Shred运行状态,然后使用向SC0mov以写Shred运行状态,将不会给出期望的结果,因为Shred运行状态可以在读和写之间更改。
操作系统异常
MAX具有用于IA-32异常机制的若干蕴涵。首先,用户级异常机制允许将多种类型的异常直接报告给产生它们的Shred。下文描述该机制。
其次,该IA-32异常机制修改为在需要上下文切换的异常存在的情况下妥当地处理多个Shred。现有技术IA-32异常机制的一个问题在于,它被定义为自动保存并恢复用于正好一个运行线程的CS、EIP、SS、ESP和EFLAGS。
现有IA-32异常机制被扩展为包括entermsm、exitmsm、shsave和shrestore指令的功能。当产生需要上下文切换的中断或异常时,该异常机制执行如下操作:
1)执行exitmsm以退出多Shred化模式。exitmsm暂停除导致该中断或异常的Shred之外的所有Shred。使用导致中断或异常的Shred进入操作系统。
2)通过在SC2给出的开始地址执行shsave来将所有Shred的当前状态保存到存储器。
3)按目前所定义的执行IA-32上下文切换。
为了返回多Shred化程序,修改的IRET指令执行如下操作:
1)按目前所定义的执行IA-32上下文切换;
2)通过在SC2给出的开始地址执行shstore以从存储器恢复所有Shred的当前状态。这会覆写IA-32上下文切换中保存的EIP和ESP。
3)执行entermsm以进入多Shred化模式。具体根据SC1的状态,entermsm的执行可能导致处理器保持在单Shred化模式中。
在执行IRET之前,需要操作系统在存储器建立Shred状态保存/恢复区并将它的地址加载到SC2中。还要求操作系统保存/恢复SC1、SC3和SC4的状态。
多个Shred同时遇到需要操作系统服务的异常是可能的。因为MAX体系结构一次仅能够报告一个OS异常,所以硬件必须在多个Shred中设置OS异常的优先级,刚好只报告一个并将所有其他Shred的状态设置为产生异常的指令尚未被执行的点。
用户级异常
MAX引入用户级异常机制,它允许某种类型的异常完全在应用程序内处理。无需操作系统介入、特权级转换或上下文切换。
当用户级异常发生时,将下一个要执行的指令的EIP推送到栈上并且处理器引向到指定的处理程序。用户级异常处理程序执行它的任务,然后通过现有RET指令返回。根据一个实施例,未提供任何机制来屏蔽用户级异常,因为它假定应用仅在该应用准备服务用户级异常时才会产生它们。
提供两个指令以创建前两个用户级异常:signalshred和forkshred。在下文段落中描述它们。
发信号
signalshred指令用于向指定的Shred发送信号。其格式为
signalshred imm16,目标IP
signalshred r16,目标IP
可以将目标Shred指定为寄存器或立即运算数。signalshred imm16,目标IP指令编码与现有的far jump指令相似,以Shred编号替代16位选择器,并且以目标IP替换16/32位偏移量。与far jump一样,相对于代码段的开始位置(标称为0),而不是相对于当前IP指定signalshred目标IP。
响应signalshred,目标Shred将下一个要执行的指令的EIP推送到栈上并引向到指定的地址。Shred可以向自己发送信号,在此情况中效果与执行near call指令相同。如果目标Shred未在运行,则signalshred无响应地被忽略。如果Shred编号大于硬件支持的Shred的最大数量,则产生#GP(0)异常。
signalshred指令可以在任何特权级上执行。signalshred指令不能自动向目标Shred传递参数。未提供任何机制阻止signalshred。因此,软件可能需要在发出signalshred之前实施阻止机制或提供可以嵌套的signalshred处理程序。
Shred不可用(SNA)
如果程序试图启动已经在运行的Shred,则Forkshred产生#SNA异常。软件#SNA处理程序可以对现有Shred执行killshred,并返回到forkshred指令。
通过将forkshred指令的EIP推送到栈上并引向到SC4+0给出的地址来处理#SNA异常。SC4+0处的代码应该分支到实际的处理程序。异常向量被置于SC4+16、SC4+32等处。软件保留存储器最多SC4+4095以涵盖256种可能的用户级异常。在后续时间,将存储器/SC4机制中的中断表替换为较清洁的机制。
挂起/恢复和Shred虚拟
多线程操作体系结构扩展允许用户级软件使用如下指令来挂起或恢复Shred。要挂起Shred:
1)初始化存储器中的Shred状态保存区。这是应用程序为挂起操作设置的存储区。它不同于指向SC2的上下文切换Shred状态区。
2)向指向挂起处理程序的Shred发送信号。这通过如下指令完成:signalshred目标Shred,挂起处理程序IP
3)挂起处理程序使用现有mov、pusha和fxsave指令将该Shred的专用状态保存到存储器。
4)挂起处理程序执行haltshred
5)原代码执行joinshred来等待直到Shred已经暂停。
Shred可能在挂起操作时已经暂停。在此情况中,signalshred被忽略,从不调用挂起处理程序,并且joinshred不等待。存储器中的Shred状态保存区留存它的初始值,它必须指向立即执行haltshred的伪Shred。要恢复Shred,执行逆向操作:
1)对指向恢复处理程序的Shred执行fork。这通过如下指令完成:forkshred目标Shred,恢复处理程序IP
2)恢复处理程序使用现有mov、popa和fxrestor指令从存储器恢复该Shred的专用状态;以及
3)恢复处理程序通过现有RET指令返回到该Shred。
当恢复到已经暂停的线程时,恢复处理程序会RET到立即执行haltshred的伪Shred。挂起/恢复能力开启了Shred虚拟化的可能性。在执行forkshred之前,软件可以选择挂起具有相同Shred编号的任何现有Shred。在执行joinshred之后,软件可以选择恢复具有相同Shred编号的任何现有Shred。因为挂起/恢复顺序不是可重入的,所以软件临界区对于确保在任何给定时间仅对任何给定Shred执行一次挂起/恢复是必要的。使用这些机制,应用程序创建它自己的抢先Shred调度程序是可能的。
在MAX的备选实施例中,存在一个指令使用第一可用Shred来执行fork(allocforkshred r32),其中利用分配的Shred编号写r32(在forkshred中,r32指定要执行fork的Shred编号)。allocforkshred还返回标志,以指示是否有任何可用的硬件Shred。
在另一个实施例中,等待Shred指令提供等待使用共享的寄存器的同步(waitshred sh0-sh7,imm)。该等待指令提供作为指令的等待功能。在没有该指令的情况下,必须使用循环,如:loop:mov eax,sh0
and eax,mask
jz loop
在另一个实施例中,对joinshred提供位掩码以便对多个shred等待。没有位掩码,一个joinshred等待一个Shred终止。需要多个joinshred才可对多个shred等待。
在备选实施例中,不使用killshred。可以使用signalshred然后使用joinshred来替代killshred。signalshred处理程序由haltshred指令组成。
在再一个实施例中,将forkshred与signalshred组合是可能的。forkshred和signalshred唯一不同之处在于有关Shred当前是在运行还是暂停的行为上。如果允许signalshred启动暂停的Shred,则signalshred可以潜在地替代forkshred。
图7图示根据本发明一个实施例的用户级多线程操作的示范过程的流程图。假定应用程序或软件程序已启动如下过程。如下过程并非是结合任何特定程序来描述的,而是作为通过上述指令和体系结构来实现的用户级多线程操作的一个实施例来描述的。此外,如下过程结合微处理器的ISA来执行,如16、32、64、128或更高位体系结构的多处理器。多处理器(如处理器105)初始化如上表3的寄存器的共享的寄存器中的值(处理框705)。处理器105执行创建Shred的forkshred指令(处理框710)。通过处理器105执行并行操作。由处理器105执行主(父)Shred(处理框715)。执行joinshred操作以等待新目标Shred完成执行(处理框730)。同时,新目标Shred初始化它的栈,从共享的寄存器和/或存储器中检索输入参数(处理框720)并执行(处理框721)。使用haltshred指令终止当前目标Shred的执行(处理框723)。处理器105将执行结果从存储Shred的执行结果的寄存器返回给程序或应用(处理框735)。一旦返回所有执行的数据,则过程完成(终止框799)。
公开一种用于提供用户级多线程操作的方法和系统。虽然本发明的实施例是参考特定示例和子系统来描述的,但是对于本领域技术人员来说,显然本发明的实施例并不限于这些特定的示例或子系统,而是还延伸到其他实施例。本发明的实施例包括符合所附权利要求中所指定的所有其他实施例。

Claims (20)

1.一种方法,包括:
遇到非特权用户级编程指令;
响应所述编程指令,创建第一共享资源的线程(Shred),所述第一共享资源的线程(Shred)与一个或多个其他Shred共享虚拟存储器地址空间;以及
响应所述编程指令,与所述一个或多个其他Shred的至少其中之一并行地执行所述Shred;
其中创建所述Shred是在无操作系统介入的情况下在硬件中执行的。
2.如权利要求1所述的方法,还包括:
在与第一线程相关联的多个Shred中间共享状态,所述多个Shred包括所述第一Shred和所述一个或多个其他Shred;
而不与和第二线程相关联的第二Shred共享所述状态。
3.如权利要求1所述的方法,其特征在于所述第一Shred和所述一个或多个其他Shred共享当前特权级并共享公用地址转换。
4.如权利要求1所述的方法,还包括:
接收对Shred摧毁操作进行编码的非特权用户级编程指令。
5.如权利要求1所述的方法,还包括在所述第一Shred和所述一个或多个其他Shred的至少其中之一之间通信。
6.如权利要求5所述的方法,其特征在于:
通过一个或多个共享的寄存器执行所述通信。
7.如权利要求5所述的方法,其特征在于:
通过用户级Shred发信号指令执行所述通信。
8.如权利要求1所述的方法,其特征在于:
用户级应用调度所述第一Shred,以在没有操作系统介入的情况下执行。
9.如权利要求1所述的方法,还包括:
响应接收到上下文切换请求,存储与所述一个或多个Shred相关联的一个或多个Shred状态。
10.如权利要求1所述的方法,还包括:
在没有操作系统介入的情况下,利用用户级异常处理程序代码处理所述第一Shred执行期间生成的异常。
11.一种设备,包括:
执行多个指令的执行资源,所述执行资源包括多个指令定序器;
所述执行资源接收非特权用户级指令;
所述执行资源还响应所接收到的指令,开始与一个或多个其他Shred并行地执行Shred。
12.如权利要求11所述的设备,还包括:
便于在所述Shred的其中两个或两个以上之间进行通信的一个或多个共享的Shred寄存器。
13.如权利要求12所述的设备,其特征在于所述一个或多个共享的寄存器包括第一寄存器,它允许操作系统或BIOS启用用于用户级多线程操作的多线程操作体系结构扩展。
14.如权利要求11所述的设备,其特征在于所述Shred和所述一个或多个其他Shred共享当前特权级并共享公用地址转换。
15.如权利要求11所述的设备,其特征在于所述执行资源还响应所接收到的指令,在没有操作系统介入的情况下开始与一个或多个其他Shred并行地执行Shred。
16.如权利要求11所述的设备,其特征在于:
所述执行资源包括能够并行地执行多个Shred的一个或多个处理器核。
17.一种系统,包括:
实施指令集体系结构(ISA)的微处理器,所述微处理器能够执行多个并行Shred;以及
存储器;
其中所述ISA包括使用户级多线程操作得以实施的一个或多个指令。
18.如权利要求17所述的系统,其特征在于所述一个或多个指令包括在无操作系统介入的情况下创建Shred的指令。
19.如权利要求17所述的系统,其特征在于所述一个或多个指令包括在无操作系统介入的情况下摧毁Shred的指令。
20.如权利要求17所述的系统,其特征在于:
所述用户级多线程操作包括与相同线程相关联的两个或两个以上Shred的并行执行。
CN2005800100530A 2004-03-31 2005-03-31 提供用户级多线程操作的方法和系统 Expired - Fee Related CN1938686B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210105283.7A CN102779024B (zh) 2004-03-31 2005-03-31 提供用户级多线程操作的方法和系统

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/816,103 2004-03-31
US10/816,103 US9189230B2 (en) 2004-03-31 2004-03-31 Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
PCT/US2005/010923 WO2005098624A1 (en) 2004-03-31 2005-03-31 A method and system to provide user-level multithreading

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201210105283.7A Division CN102779024B (zh) 2004-03-31 2005-03-31 提供用户级多线程操作的方法和系统

Publications (2)

Publication Number Publication Date
CN1938686A true CN1938686A (zh) 2007-03-28
CN1938686B CN1938686B (zh) 2012-06-13

Family

ID=34964349

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201210105283.7A Expired - Fee Related CN102779024B (zh) 2004-03-31 2005-03-31 提供用户级多线程操作的方法和系统
CN2005800100530A Expired - Fee Related CN1938686B (zh) 2004-03-31 2005-03-31 提供用户级多线程操作的方法和系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201210105283.7A Expired - Fee Related CN102779024B (zh) 2004-03-31 2005-03-31 提供用户级多线程操作的方法和系统

Country Status (6)

Country Link
US (7) US9189230B2 (zh)
JP (8) JP4949231B2 (zh)
CN (2) CN102779024B (zh)
DE (1) DE112005000706B4 (zh)
TW (1) TWI321749B (zh)
WO (1) WO2005098624A1 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7743193B2 (en) 2007-10-31 2010-06-22 Tpk Touch Solutions Inc. Logic gateway circuit for bus that supports multiple interrupt request signals
CN104375887A (zh) * 2013-08-16 2015-02-25 联想(北京)有限公司 一种信息处理方法及电子设备
CN104461730A (zh) * 2013-09-22 2015-03-25 华为技术有限公司 一种虚拟资源分配方法及装置
CN104603795A (zh) * 2012-09-28 2015-05-06 英特尔公司 用于实现用于用户级线程的即时上下文切换的新指令和高效的微架构
CN106233254A (zh) * 2014-03-27 2016-12-14 国际商业机器公司 多线程计算机系统中的地址扩展及缩短
CN107810489A (zh) * 2015-06-18 2018-03-16 微软技术许可有限责任公司 应用与设备之间的无缝转换
CN108171862A (zh) * 2018-01-08 2018-06-15 北京值得买科技股份有限公司 一种发号方法及发号器
CN110597606A (zh) * 2019-08-13 2019-12-20 中国电子科技集团公司第二十八研究所 一种高速缓存友好的用户级线程调度方法

Families Citing this family (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9189230B2 (en) 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7810083B2 (en) * 2004-12-30 2010-10-05 Intel Corporation Mechanism to emulate user-level multithreading on an OS-sequestered sequencer
US8719819B2 (en) * 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US8010969B2 (en) 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
US20070079294A1 (en) * 2005-09-30 2007-04-05 Robert Knight Profiling using a user-level control mechanism
US8028295B2 (en) 2005-09-30 2011-09-27 Intel Corporation Apparatus, system, and method for persistent user-level thread
US8205200B2 (en) * 2005-11-29 2012-06-19 Intel Corporation Compiler-based scheduling optimization hints for user-level threads
US8079035B2 (en) * 2005-12-27 2011-12-13 Intel Corporation Data structure and management techniques for local user-level thread data
US8973094B2 (en) * 2006-05-26 2015-03-03 Intel Corporation Execution of a secured environment initialization instruction on a point-to-point interconnect system
US7406407B2 (en) * 2006-06-01 2008-07-29 Microsoft Corporation Virtual machine for operating N-core application on M-core processor
US7773090B1 (en) * 2006-06-13 2010-08-10 Nvidia Corporation Kernel mode graphics driver for dual-core computer system
US8468526B2 (en) * 2006-06-30 2013-06-18 Intel Corporation Concurrent thread execution using user-level asynchronous signaling
US8607228B2 (en) 2006-08-08 2013-12-10 Intel Corporation Virtualizing performance counters
US8028290B2 (en) 2006-08-30 2011-09-27 International Business Machines Corporation Multiple-core processor supporting multiple instruction set architectures
US7768518B2 (en) * 2006-09-27 2010-08-03 Intel Corporation Enabling multiple instruction stream/multiple data stream extensions on microprocessors
US8190982B2 (en) * 2006-09-29 2012-05-29 University Of Connecticut Error-tolerant multi-threaded memory systems with reduced error accumulation
US8689215B2 (en) * 2006-12-19 2014-04-01 Intel Corporation Structured exception handling for application-managed thread units
US8161284B1 (en) 2006-12-28 2012-04-17 Perftech, Inc. System, method and computer readable medium for message authentication to subscribers of an internet service provider
US8074274B2 (en) * 2006-12-29 2011-12-06 Intel Corporation User-level privilege management
US9003410B2 (en) * 2007-01-30 2015-04-07 Hewlett-Packard Development Company, L.P. Abstracting a multithreaded processor core to a single threaded processor core
US20080229062A1 (en) * 2007-03-12 2008-09-18 Lorenzo Di Gregorio Method of sharing registers in a processor and processor
US20080320475A1 (en) * 2007-06-19 2008-12-25 Microsoft Corporation Switching user mode thread context
US8966488B2 (en) * 2007-07-06 2015-02-24 XMOS Ltd. Synchronising groups of threads with dedicated hardware logic
US7996663B2 (en) * 2007-12-27 2011-08-09 Intel Corporation Saving and restoring architectural state for processor cores
US8321840B2 (en) * 2007-12-27 2012-11-27 Intel Corporation Software flow tracking using multiple threads
US8359589B2 (en) * 2008-02-01 2013-01-22 International Business Machines Corporation Helper thread for pre-fetching data
US8707016B2 (en) * 2008-02-01 2014-04-22 International Business Machines Corporation Thread partitioning in a multi-core environment
US8601241B2 (en) * 2008-02-01 2013-12-03 International Business Machines Corporation General purpose register cloning
US8775778B2 (en) * 2008-02-01 2014-07-08 International Business Machines Corporation Use of a helper thread to asynchronously compute incoming data
US7559061B1 (en) 2008-03-16 2009-07-07 International Business Machines Corporation Simultaneous multi-threading control monitor
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
US9785462B2 (en) 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
US8356130B2 (en) 2009-08-14 2013-01-15 Advanced Micro Devices, Inc. Mechanism for recording undeliverable user-level interrupts
US9367462B2 (en) * 2009-12-29 2016-06-14 Empire Technology Development Llc Shared memories for energy efficient multi-core processors
US9141422B2 (en) 2010-05-18 2015-09-22 Microsoft Technology Licensing, Llc Plug-in task scheduler
WO2012046302A1 (ja) * 2010-10-05 2012-04-12 富士通株式会社 マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム
US9292470B2 (en) * 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9336180B2 (en) * 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US8671309B2 (en) * 2011-07-01 2014-03-11 Intel Corporation Mechanism for advanced server machine check recovery and associated system software enhancements
US10083152B1 (en) 2012-01-27 2018-09-25 Open Invention Network Llc Virtualized multicore systems with extended instruction heterogeneity
CN103530089B (zh) * 2012-08-31 2018-06-15 威盛电子股份有限公司 微处理器及其操作方法
CN103473134B (zh) * 2013-09-23 2016-08-17 哈尔滨工程大学 一种异构多核处理器的依赖任务调度方法
US9898330B2 (en) * 2013-11-11 2018-02-20 Intel Corporation Compacted context state management
US9218185B2 (en) * 2014-03-27 2015-12-22 International Business Machines Corporation Multithreading capability information retrieval
US9223574B2 (en) * 2014-03-27 2015-12-29 International Business Machines Corporation Start virtual execution instruction for dispatching multiple threads in a computer
US9213569B2 (en) * 2014-03-27 2015-12-15 International Business Machines Corporation Exiting multiple threads in a computer
US9621650B2 (en) * 2014-09-30 2017-04-11 Google Inc Mobile application state identifier framework
US9569127B2 (en) 2014-12-29 2017-02-14 International Business Machines Corporation Computer instructions for limiting access violation reporting when accessing strings and similar data structures
US9703721B2 (en) 2014-12-29 2017-07-11 International Business Machines Corporation Processing page fault exceptions in supervisory software when accessing strings and similar data structures using normal load instructions
US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
US20210026950A1 (en) * 2016-03-07 2021-01-28 Crowdstrike, Inc. Hypervisor-based redirection of system calls and interrupt-based task offloading
US11120106B2 (en) * 2016-07-30 2021-09-14 Endgame, Inc. Hardware—assisted system and method for detecting and analyzing system calls made to an operating system kernel
US10437593B2 (en) * 2017-04-27 2019-10-08 Nvidia Corporation Techniques for comprehensively synchronizing execution threads
GB2580327B (en) * 2018-12-31 2021-04-28 Graphcore Ltd Register files in a multi-threaded processor
US11194815B1 (en) * 2019-02-11 2021-12-07 Amazon Technologies, Inc. Constrained query execution
US11080051B2 (en) * 2019-10-29 2021-08-03 Nvidia Corporation Techniques for efficiently transferring data to a processor
DE102020127704A1 (de) 2019-10-29 2021-04-29 Nvidia Corporation Techniken zum effizienten transferieren von daten an einem prozessor
US20210157512A1 (en) * 2021-02-02 2021-05-27 Intel Corporation Flexible configuration of storage device with translation language set
CN113485811A (zh) * 2021-07-23 2021-10-08 平安科技(深圳)有限公司 计算任务管理方法、装置、计算机设备及存储介质

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH087867B2 (ja) 1987-07-06 1996-01-29 セイコーエプソン株式会社 光記憶再生装置
JP2973480B2 (ja) 1990-06-29 1999-11-08 日本電気株式会社 通信レジスタ多重化方式
JPH0464864A (ja) 1990-07-03 1992-02-28 Akira Sato 風呂釜における湯の逆流防止装置
JPH05204656A (ja) * 1991-11-30 1993-08-13 Toshiba Corp スレッド固有データ保持方法
JPH0623459A (ja) 1992-07-08 1994-02-01 Sumitomo Electric Ind Ltd ばね成形性に優れた鋼線の製造方法。
US5485626A (en) 1992-11-03 1996-01-16 International Business Machines Corporation Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing
US5414740A (en) 1992-12-17 1995-05-09 International Business Machines Corporation Synchronous communication system having multiplexed information transfer and transition phases
JP3585510B2 (ja) * 1993-07-20 2004-11-04 株式会社東芝 プログラム実行管理装置及びプログラム実行管理方法
US5481706A (en) 1993-11-01 1996-01-02 International Business Machines Corporation System and method for creating thread-safe shared libraries
GB2290395B (en) * 1994-06-10 1997-05-28 Advanced Risc Mach Ltd Interoperability with multiple instruction sets
US5638525A (en) 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions
US5845129A (en) * 1996-03-22 1998-12-01 Philips Electronics North America Corporation Protection domains in a single address space
US5991790A (en) * 1996-07-01 1999-11-23 Sun Microsystems, Inc. Generation and delivery of signals in a two-level, multithreaded system
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
US6418460B1 (en) 1997-02-18 2002-07-09 Silicon Graphics, Inc. System and method for finding preempted threads in a multi-threaded application
US6463527B1 (en) 1997-03-21 2002-10-08 Uzi Y. Vishkin Spawn-join instruction set architecture for providing explicit multithreading
US6324623B1 (en) * 1997-05-30 2001-11-27 Oracle Corporation Computing system for implementing a shared cache
US6658447B2 (en) 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US6233599B1 (en) 1997-07-10 2001-05-15 International Business Machines Corporation Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers
US6009522A (en) 1997-09-30 1999-12-28 Micron Electronics, Inc. Attachment or integration of a BIOS device into a computer system using the system memory data bus
US6223208B1 (en) * 1997-10-03 2001-04-24 International Business Machines Corporation Moving data in and out of processor units using idle register/storage functional units
US6438679B1 (en) * 1997-11-03 2002-08-20 Brecis Communications Multiple ISA support by a processor using primitive operations
US6079010A (en) * 1998-03-31 2000-06-20 Lucent Technologies Inc. Multiple machine view execution in a computer system
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6330584B1 (en) 1998-04-03 2001-12-11 Mmc Networks, Inc. Systems and methods for multi-tasking, resource sharing and execution of computer instructions
GB2338094B (en) 1998-05-27 2003-05-28 Advanced Risc Mach Ltd Vector register addressing
US6378067B1 (en) * 1998-10-12 2002-04-23 Idea Corporation Exception reporting architecture for SIMD-FP instructions
US6243860B1 (en) * 1998-10-30 2001-06-05 Westinghouse Electric Company Llc Mechanism employing a memory area for exchanging information between a parent process and a child process compiled during execution of the parent process or between a run time compiler process and an application process
US6622155B1 (en) * 1998-11-24 2003-09-16 Sun Microsystems, Inc. Distributed monitor concurrency control
JP3604029B2 (ja) 1999-01-12 2004-12-22 日本電気株式会社 マルチスレッドプロセッサ
JP3790653B2 (ja) 1999-04-19 2006-06-28 松下電器産業株式会社 共有メモリアクセス管理装置
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
EP1050798A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics SA Decoding instructions
US6507862B1 (en) 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US7051329B1 (en) 1999-12-28 2006-05-23 Intel Corporation Method and apparatus for managing resources in a multithreaded processor
US7480706B1 (en) * 1999-12-30 2009-01-20 Intel Corporation Multi-threaded round-robin receive for fast network port
US6567091B2 (en) 2000-02-01 2003-05-20 Interactive Silicon, Inc. Video controller system with object display lists
US6952751B1 (en) 2000-04-07 2005-10-04 Advanced Micro Devices, Inc. Method and apparatus for extending legacy computer systems
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
GB2372348B (en) * 2001-02-20 2003-06-04 Siroyan Ltd Context preservation
US6976155B2 (en) * 2001-06-12 2005-12-13 Intel Corporation Method and apparatus for communicating between processing entities in a multi-processor
JP3702815B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 プロセッサ間レジスタ継承方法及びその装置
US6954846B2 (en) * 2001-08-07 2005-10-11 Sun Microsystems, Inc. Microprocessor and method for giving each thread exclusive access to one register file in a multi-threading mode and for giving an active thread access to multiple register files in a single thread mode
US8769508B2 (en) * 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US20030126416A1 (en) * 2001-12-31 2003-07-03 Marr Deborah T. Suspending execution of a thread in a multi-threaded processor
US7398374B2 (en) * 2002-02-27 2008-07-08 Hewlett-Packard Development Company, L.P. Multi-cluster processor for processing instructions of one or more instruction threads
US7313676B2 (en) * 2002-06-26 2007-12-25 Intel Corporation Register renaming for dynamic multi-threading
US7519800B2 (en) * 2003-03-27 2009-04-14 Hewlett-Packard Development Company, L.P. Apparatus and method for enforcing homogeneity within partitions of heterogeneous computer systems
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7707389B2 (en) 2003-10-31 2010-04-27 Mips Technologies, Inc. Multi-ISA instruction fetch unit for a processor, and applications thereof
US9189230B2 (en) 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7260702B2 (en) * 2004-06-30 2007-08-21 Microsoft Corporation Systems and methods for running a legacy 32-bit x86 virtual machine on a 64-bit x86 processor

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7743193B2 (en) 2007-10-31 2010-06-22 Tpk Touch Solutions Inc. Logic gateway circuit for bus that supports multiple interrupt request signals
CN104603795B (zh) * 2012-09-28 2018-11-06 英特尔公司 实现用户级线程的即时上下文切换的指令和微架构
CN104603795A (zh) * 2012-09-28 2015-05-06 英特尔公司 用于实现用于用户级线程的即时上下文切换的新指令和高效的微架构
CN104375887A (zh) * 2013-08-16 2015-02-25 联想(北京)有限公司 一种信息处理方法及电子设备
CN104375887B (zh) * 2013-08-16 2019-06-25 联想(北京)有限公司 一种信息处理方法及电子设备
WO2015039582A1 (zh) * 2013-09-22 2015-03-26 华为技术有限公司 一种虚拟资源分配方法及装置
CN104461730B (zh) * 2013-09-22 2017-11-07 华为技术有限公司 一种虚拟资源分配方法及装置
CN104461730A (zh) * 2013-09-22 2015-03-25 华为技术有限公司 一种虚拟资源分配方法及装置
CN106233254A (zh) * 2014-03-27 2016-12-14 国际商业机器公司 多线程计算机系统中的地址扩展及缩短
CN107810489A (zh) * 2015-06-18 2018-03-16 微软技术许可有限责任公司 应用与设备之间的无缝转换
CN107810489B (zh) * 2015-06-18 2021-05-18 微软技术许可有限责任公司 应用与设备之间的无缝转换
CN108171862A (zh) * 2018-01-08 2018-06-15 北京值得买科技股份有限公司 一种发号方法及发号器
CN108171862B (zh) * 2018-01-08 2021-03-09 北京值得买科技股份有限公司 一种发号方法及发号器
CN110597606A (zh) * 2019-08-13 2019-12-20 中国电子科技集团公司第二十八研究所 一种高速缓存友好的用户级线程调度方法
CN110597606B (zh) * 2019-08-13 2022-02-18 中国电子科技集团公司第二十八研究所 一种高速缓存友好的用户级线程调度方法

Also Published As

Publication number Publication date
JP2012160202A (ja) 2012-08-23
DE112005000706T5 (de) 2007-02-15
US20130111194A1 (en) 2013-05-02
US20180225117A1 (en) 2018-08-09
JP2007531167A (ja) 2007-11-01
JP2017027627A (ja) 2017-02-02
JP2012094175A (ja) 2012-05-17
US20180321936A1 (en) 2018-11-08
JP2014112438A (ja) 2014-06-19
US20180307484A1 (en) 2018-10-25
US9442721B2 (en) 2016-09-13
WO2005098624A1 (en) 2005-10-20
JP2015015041A (ja) 2015-01-22
JP2014222533A (ja) 2014-11-27
CN102779024A (zh) 2012-11-14
TW200602971A (en) 2006-01-16
CN1938686B (zh) 2012-06-13
US9952859B2 (en) 2018-04-24
US9189230B2 (en) 2015-11-17
TWI321749B (en) 2010-03-11
US20050223199A1 (en) 2005-10-06
JP2018200735A (ja) 2018-12-20
US10585667B2 (en) 2020-03-10
US10635438B2 (en) 2020-04-28
US10613858B2 (en) 2020-04-07
CN102779024B (zh) 2016-09-28
US10628153B2 (en) 2020-04-21
US20180225118A1 (en) 2018-08-09
US20160216971A1 (en) 2016-07-28
JP4949231B2 (ja) 2012-06-06
DE112005000706B4 (de) 2011-02-17

Similar Documents

Publication Publication Date Title
CN1938686B (zh) 提供用户级多线程操作的方法和系统
US10061588B2 (en) Tracking operand liveness information in a computer system and performing function based on the liveness information
US8689215B2 (en) Structured exception handling for application-managed thread units
CN103765400B (zh) 一种乱序执行微处理器中的有条件存储指令
CN101833475B (zh) 用于执行指令原子块的方法和装置
US7676664B2 (en) Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
DE102012216565A1 (de) Decodierzeit-computeranweisungsoptimierung
JPH06208552A (ja) スモール・グレイン機構
Kissell MIPS MT: A multithreaded RISC architecture for embedded real-time processing
Case What’s next for Microprocessor Design
Shimada et al. for the Parallel Inference Machine PIE64
CN116893894A (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

Granted publication date: 20120613

Termination date: 20190331

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