CN1938686A - 提供用户级多线程操作的方法和系统 - Google Patents
提供用户级多线程操作的方法和系统 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000003860 storage Methods 0.000 claims description 36
- 238000004891 communication Methods 0.000 claims description 19
- 230000004044 response Effects 0.000 claims description 5
- 238000013519 translation Methods 0.000 claims description 4
- 230000011664 signaling Effects 0.000 claims 1
- 230000007246 mechanism Effects 0.000 description 31
- 230000006870 function Effects 0.000 description 20
- 238000012545 processing Methods 0.000 description 20
- 238000011084 recovery Methods 0.000 description 16
- 230000001360 synchronised effect Effects 0.000 description 15
- 230000008569 process Effects 0.000 description 13
- 238000004321 preservation Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 9
- 230000006399 behavior Effects 0.000 description 7
- 230000002159 abnormal effect Effects 0.000 description 6
- 230000006378 damage Effects 0.000 description 6
- 230000004888 barrier function Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 101100016034 Nicotiana tabacum APIC gene Proteins 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 241000894007 species Species 0.000 description 2
- 241000435574 Popa Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 238000005352 clarification Methods 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 230000019771 cognition Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000005469 granulation Methods 0.000 description 1
- 230000003179 granulation Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000003079 width control Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent 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的并行执行。
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)
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)
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)
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 |
-
2004
- 2004-03-31 US US10/816,103 patent/US9189230B2/en not_active Expired - Fee Related
-
2005
- 2005-03-31 TW TW094110320A patent/TWI321749B/zh not_active IP Right Cessation
- 2005-03-31 WO PCT/US2005/010923 patent/WO2005098624A1/en active Application Filing
- 2005-03-31 JP JP2007506565A patent/JP4949231B2/ja not_active Expired - Fee Related
- 2005-03-31 CN CN201210105283.7A patent/CN102779024B/zh not_active Expired - Fee Related
- 2005-03-31 CN CN2005800100530A patent/CN1938686B/zh not_active Expired - Fee Related
- 2005-03-31 DE DE112005000706T patent/DE112005000706B4/de not_active Expired - Fee Related
-
2012
- 2012-01-06 JP JP2012001179A patent/JP2012094175A/ja active Pending
- 2012-04-19 JP JP2012095473A patent/JP2012160202A/ja active Pending
- 2012-12-20 US US13/722,481 patent/US9442721B2/en not_active Expired - Lifetime
-
2014
- 2014-03-12 JP JP2014048903A patent/JP2014112438A/ja active Pending
- 2014-07-30 JP JP2014154360A patent/JP2014222533A/ja active Pending
- 2014-09-11 JP JP2014185017A patent/JP2015015041A/ja active Pending
-
2016
- 2016-03-31 US US15/088,043 patent/US9952859B2/en not_active Expired - Fee Related
- 2016-11-07 JP JP2016217176A patent/JP2017027627A/ja active Pending
-
2018
- 2018-02-20 US US15/900,030 patent/US10585667B2/en not_active Expired - Lifetime
- 2018-04-02 US US15/943,614 patent/US10635438B2/en not_active Expired - Lifetime
- 2018-04-02 US US15/943,609 patent/US10613858B2/en not_active Expired - Lifetime
- 2018-04-02 US US15/943,611 patent/US10628153B2/en not_active Expired - Lifetime
- 2018-10-02 JP JP2018187423A patent/JP2018200735A/ja active Pending
Cited By (15)
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 |