CN100520714C - 多线程处理器 - Google Patents
多线程处理器 Download PDFInfo
- Publication number
- CN100520714C CN100520714C CNB2006800028782A CN200680002878A CN100520714C CN 100520714 C CN100520714 C CN 100520714C CN B2006800028782 A CNB2006800028782 A CN B2006800028782A CN 200680002878 A CN200680002878 A CN 200680002878A CN 100520714 C CN100520714 C CN 100520714C
- Authority
- CN
- China
- Prior art keywords
- register
- registers
- loop
- threads
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000004087 circulation Effects 0.000 claims description 34
- 238000000034 method Methods 0.000 claims description 20
- 238000007616 round robin method Methods 0.000 claims description 3
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一种多线程处理器,包括处理单元(PU),用于并行处理多个线程。提供了具有多个寄存器的寄存器文件装置(RF),其中将第一寄存器(LI)用于存储循环不变量值,以及将N个第二存储器(LV1-LVN)中的每一个用于存储循环变量值。此外,提供了N个程序计数器(PC1-PCN),其中每一个都与多个线程之一相关联,N是正在处理的线程的数量。
Description
技术领域
本发明涉及一种多线程处理器和一种用于编译并行循环的方法,该多线程处理器具有用于并行处理多个任务的处理单元。
背景技术
典型地,处理器执行来自线程的指令,并包括针对指令将参照的数据的寄存器文件、以及用于并行执行的指令的地址程序计数器(即指令地址寄存器)。为了减少处理器因为等待数据或来自存储器的其他指令而不执行指令的时间,在处理器上并行执行多个线程。如果一个线程的执行停止,则切换到下一个线程。这种切换也称为上下文切换。为了能够有效且快速地切换,必须在处理器中保持多个线程的上下文。因此,多线程处理器必须包括针对每个线程的寄存器文件和程序计数器。为了增强多线程处理器的性能,需要附加资源来存储多个上下文。然而,从晶元上所需面积和较高的设计复杂度方面来看,附加资源增加了附加成本。
US 6,351,808 B1涉及一种具有复制的寄存器文件结构的多线程处理器。
US 6,092,175公开了一种支持多个上下文或线程的多线程处理器。为了减少寄存器的数量,寄存器文件中的一些在线程之间共享,并在需要时将其分配到线程。
发明内容
因此,本发明的目的是提供一种硬件成本降低的多线程处理器、以及一种针对多线程处理器的编译并行循环的方法。
因此,多线程处理器包括处理单元,用于并行处理多个线程。提供了具有多个寄存器的寄存器文件装置,其中将至少一个第一寄存器用于存储循环不变量值,以及将N个第二寄存器或N个另外的寄存器集合中的每一个用于存储循环变量值。此外,提供了N个程序计数器,其中的每一个都与多个线程之一相关联,其中N是正在处理的线程的数量。
因此,对于多线程处理器而言,因为只复制程序计数器以及寄存器文件的一部分,所以可以降低硬件复杂度以及硬件成本。
根据本发明的方面,N个第二寄存器中的每一个与多个线程之一相关联,并且在多个线程之间共享至少一个第一寄存器。因此,通过在多个线程之间共享第一寄存器,不需要为每个线程提供这种第一寄存器。这将提高寄存器文件中的寄存器的利用率。只将一个第一寄存器分配到所有线程,即在线程之间共享该第一寄存器,而不是为每个线程分配用于存储该线程的循环不变量值的第一寄存器。
根据本发明的另一方面,在每个循环中,将寄存器文件装置中的多个寄存器划分或分配为第一和第二寄存器。由于每个循环的需求可能变化,所以可以针对每个循环,执行对于循环不变量和循环变量值的寄存器的划分或分配。
本发明还涉及一种方法,用于编译指令集内的并行循环。检测具有寄存器文件的多线程处理器的指令集内循环中的循环不变量和循环变量值。将寄存器文件的多个寄存器划分或分配为至少一个用于存储循环不变量值的第一寄存器、以及每一个都用于存储循环变量值的N个第二寄存器或N个寄存器集合,其中N是正在处理的线程的数量。
本发明基于将循环编译成多个线程的思想。因此,不用复制所有的寄存器文件,而只复制程序计数器。根据现有技术,寄存器文件需要N个循环不变量寄存器和N个循环变量寄存器,而本发明只需要针对循环不变量值的寄存器(在线程之间共享)以及针对循环变量值的、各自与N个线程相关联或专用于该线程的N个寄存器。将寄存器文件中的现有寄存器划划分或分配成针对循环变量寄存器的寄存器以及针对循环不变量寄存器的寄存器,即,将寄存器划分成不相交的子集。通过将并行循环转化为两个或多个循环,将多线程应用于并行循环。
附图说明
参考下文中描述的实施例,本发明的这些和其他方面将变得显而易见,并对其加以说明。
图1示出了根据第一实施例的多线程处理器的基本结构。
具体实施方式
图1示出了根据第一实施例的多线程处理器的基本结构。该处理器包括能够并行处理N个线程的处理单元PU。根据图1的实施例,对三个线程进行处理,即N=3。因此,程序计数器PC实现为包括针对每个线程的程序计数器单元,即,第一、第二和第三程序计数器单元PC1、PC2、PC3。此外,寄存器文件RF具有多个寄存器。这里,只示出了8个寄存器。从寄存器文件RF的多个寄存器中,针对每个线程的循环变量值,对多个寄存器集合LV1-LV3进行划分或分配,即,根据线程的数量来复制针对循环变量值的寄存器LV1-LV3,以使针对循环变量的一个寄存器集合LV1-LV3与线程中的每一个相关联。换言之,执行对寄存器文件中的寄存器的划分,以便给循环变量值分配N个(每个线程一个)寄存器。寄存器文件RF还包括针对循环不变量值的寄存器集合LI(将一个寄存器分配给循环不变量值,并在线程之间共享该寄存器),这样寄存器文件RF包括针对循环不变量值的寄存器LI以及针对循环变量值的3(N)个寄存器集合LV。寄存器中的4个未使用。应该注意,N的值仅作为示例,而并不限制实施例。
例如,寄存器文件RF可以包括32个寄存器。对于一个特定循环,为循环不变量值分配32个寄存器中的10个,为循环变量值分配3×5个寄存器(3个集合,每个集合中有5个寄存器),而7个寄存器未使用。在另一个循环中,为循环不变量值分配4个寄存器,为循环变量值分配3×8个寄存器,而4个寄存器未使用。换言之,可以针对每个待执行的循环,为循环不变量值和循环变量值来分配现有的寄存器。在一些情况下,寄存器文件RF中的所有32个寄存器并未全部使用。应注意的是,分配用以存储循环不变量值的寄存器在多个线程之间共享,而分配用以存储循环变量值的那些寄存器至少在循环的持续时间内是排他性地与多个线程之一相关联的或专用于该线程的。还应注意的是,寄存器文件可以包括不同数量的寄存器。
由于只复制针对循环不变量值的寄存器LV1-LV3的分配,所以可以基于多个线程来处理的应用程序是有限的。例如,因为对寄存器文件RF的要求没有那么严格,所以将多线程应用于处理并行循环。根据本实施例,将并行循环转化为两个循环。
并行循环可以通过以下代码实现:
For(i=0;i<n;i++)
S;
并将其转化为以下代码:
for k L /*create a second thread,initial pc=L */
for(i=0;i<n/2;i++)
S;
Wait /*wait on termination of second thread */
......
L: for(i=n/2;i<n;i++)
S;
Exit /*stop thread*/
将并行循环转化为两个循环,即,一个循环是从0到<n/2,而另一个循环是从n/2到<n。然后,将这两个循环作为两个线程并行进行处理。循环中的数据值可以是循环变量(即在循环处理期间改变)或循环不变量(即在循环期间不改变)。循环不变量值的示例是数组的基址指针。寄存器LI或寄存器集合LI用于分配所有不变量值,并寄存器LV或寄存器集合LV用于分配所有循环变量值。因此,为了实现上述代码,因为存在两个线程,所以需要一个寄存器LI和2个寄存器LV。
根据第二实施例,考虑SAXPY循环类型,,即S,A,X,P,Y,其用于将标量可变量A与矢量X相乘,并将其与矢量Y相加。考虑以下循环:
For(i=0;i<1000;i++)
a[i]=b[i]+s*c[i];
相应的汇编代码可以如下实现:
loadi#a->r10
loadi#b->r11
loadi#c->r12
loadi#s->r13
loadi#0->r14
loadi r11,r14->r15/ *load b[i]*/
loadi r12,r14->r16/ *load c[i]*/
mult r16,r13->r16/ *compute s*c[i]*/
add r16,r15->r16/ *add b[i]*/
store r10,r14<-r16/ *store result in a[i]*/
add#1 r14->r14
bless r14,#1000,L1
在上述循环中,因为r10或r12包括数组a,b和c的基址,所以寄存器LI={r10,r11,r12和r13}包括循环不变量值。寄存器r13用于存储标量值s。因为所有这些值在循环执行期间是不变的,所以它们构成了循环不变量值。寄存器r14或r16包括循环变量值,因为这些值在循环执行期间改变。
根据第二实施例,可以将上述循环转化为以下代码,其中第一线程利用针对不变量值的寄存器LV1={r14-r16},而第二线程利用针对变量值的寄存器LV2={r24-r26}:
loadi#a->r10
loadi#b->r11
loadi#c->r12
loadi#s->r13
loadi#0->r14
for k L2 /*start second thread*/
L1: loadi r11,r14->r15 /*load b[i]*/
loadi r12,r14->r16 /*load c[i]*/
mult r16,r13->r16 /*compute s*c[i]*/
add r16,r15->r16 /*add b[i]*/
store r10,r14<-r16 /*store result in a[i]*/
add#1 r14->r14
bless r14,#500,L1 /*loop until 500*/
wait
...
L2: loadi#500->r24 /*start at i=500*/
loadi r11,r24->r25 /*load b[i]*/
loadi r12,r24->r26 /*load c[i]*/
mult r26,r13->r26 /*compute s*c[i]*/
add r26,r25->r26 /*add b[i]*/
store r10,r24<-r26 /*store result in a[i]*/
add#1 r24->r24
bless r24,#500,L1 /*loop until1000*/
wait
exit /*stop second thread*/
由于通过多线程处理器来并行执行用于实现第一和第二循环(从0到499的循环,以及从500到1000的循环)的两个线程,所以如果一个线程停止,仍然可以处理另一个线程。由此,减少了执行时间,并且提高了处理器的利用率。
通过将并行循环转化为两个或多个循环,可以将多线程应用于并行循环。确定循环变量和循环不变量值。将并行循环化分成或转化为多个循环。从寄存器文件中的寄存器中,将对应于线程数量的多个寄存器分配或划分为是针对循环不变量值的,这样每个线程与一个寄存器相关联,以便存储其变量值。此外,从寄存器文件中的寄存器中,分配至少一个寄存器用于存储循环不变量值,并在线程之间共享该寄存器。
应注意的是,上面所提到的实施例示出而并非限制本发明,在不偏离所附权利要求范围的前提下,本领域的技术人员能够设计许多可选的实施例。在权利要求中,括号之间的任何附图标记不应理解为限制本发明。词“包括”不排除权利要求中所列出的元件或步骤之外的其他元件或步骤的存在。元素之前的冠词“a”或“an”不排除多个这种元件的存在。在列举了多个装置的设备权利要求中,这些装置中的一些可由同一个硬件项来体现。特定措施位于彼此不同的从属权利要求中的这一事实并不表示不能有利地使用这些措施的组合。
此外,权利要求中的任意附图标记不应视作对权利要求的范围有所限制。
Claims (4)
1.一种多线程处理器,包括:
-处理单元(PU),用于并行处理多个线程;
-寄存器文件装置(RF),包括多个寄存器(LI,LV),其中,将至少一个第一寄存器(LI)用于存储循环不变量值,并将N个第二寄存器(LV1-LVN)中的每一个用于存储循环变量值;以及
-N个程序计数器(PC1-PCN),每一个都与多个线程之一相关联;N是正在处理的线程的数量;
其中,N个第二寄存器(LV1-LVN)中的每一个都与多个线程之一相关联,以及在多个线程之间共享所述至少一个第一寄存器(LI)。
2.如权利要求1所述的多线程处理器,其中,针对每个循环,将寄存器文件装置(RF)中的多个寄存器划分成第一和第二寄存器(LI;LV1-LV3)。
3.一种用于编译指令集内的并行循环的方法,包括以下步骤:
-针对具有寄存器文件(RF)的多线程处理器(PU),检测指令集内循环中的循环不变量和循环变量值;以及
-将寄存器文件(RF)的多个寄存器(LI;LV1-LVN)划分成用于存储循环不变量值的至少一个第一寄存器(LI)、以及每一个均用于存储循环变量值的N个第二寄存器(LV1-LVN);N是正在处理的线程的数量;
其中,N个第二寄存器(LV1-LVN)中的每一个都与多个线程之一相关联,以及在多个线程之间共享所述至少一个第一寄存器(LI)。
4.如权利要求3所述的方法,包括步骤:针对至少一个循环,将寄存器文件装置(RF)中的多个寄存器划分成第一和第二寄存器(LI;LV1-LV3)。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP05100455 | 2005-01-25 | ||
EP05100455.4 | 2005-01-25 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101151590A CN101151590A (zh) | 2008-03-26 |
CN100520714C true CN100520714C (zh) | 2009-07-29 |
Family
ID=36604236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006800028782A Active CN100520714C (zh) | 2005-01-25 | 2006-01-17 | 多线程处理器 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8539211B2 (zh) |
EP (1) | EP1844393A2 (zh) |
JP (1) | JP2008529119A (zh) |
CN (1) | CN100520714C (zh) |
WO (1) | WO2006079940A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153589A (zh) * | 2016-12-06 | 2018-06-12 | 国际商业机器公司 | 用于多线程的处理布置中的数据处理的方法和系统 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023844B (zh) * | 2009-09-18 | 2014-04-09 | 深圳中微电科技有限公司 | 并行处理器及其线程处理方法 |
US9672132B2 (en) * | 2009-11-19 | 2017-06-06 | Qualcomm Incorporated | Methods and apparatus for measuring performance of a multi-thread processor |
US8589922B2 (en) | 2010-10-08 | 2013-11-19 | International Business Machines Corporation | Performance monitor design for counting events generated by thread groups |
US8601193B2 (en) | 2010-10-08 | 2013-12-03 | International Business Machines Corporation | Performance monitor design for instruction profiling using shared counters |
US8489787B2 (en) | 2010-10-12 | 2013-07-16 | International Business Machines Corporation | Sharing sampled instruction address registers for efficient instruction sampling in massively multithreaded processors |
US9021237B2 (en) * | 2011-12-20 | 2015-04-28 | International Business Machines Corporation | Low latency variable transfer network communicating variable written to source processing core variable register allocated to destination thread to destination processing core variable register allocated to source thread |
US9904549B2 (en) * | 2015-12-26 | 2018-02-27 | Intel Corporation | Method and apparatus for loop-invariant instruction detection and elimination |
US9875104B2 (en) * | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US10241801B2 (en) * | 2016-12-23 | 2019-03-26 | Intel Corporation | Method and apparatus to create register windows for parallel iterations to achieve high performance in HW-SW codesigned loop accelerator |
US10248908B2 (en) * | 2017-06-19 | 2019-04-02 | Google Llc | Alternative loop limits for accessing data in multi-dimensional tensors |
GB2568776B (en) | 2017-08-11 | 2020-10-28 | Google Llc | Neural network accelerator with parameters resident on chip |
GB2580327B (en) * | 2018-12-31 | 2021-04-28 | Graphcore Ltd | Register files in a multi-threaded processor |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5854922A (en) * | 1997-01-16 | 1998-12-29 | Ford Motor Company | Micro-sequencer apparatus and method of combination state machine and instruction memory |
US6272676B1 (en) * | 1998-01-13 | 2001-08-07 | Intel Corporation | Method and apparatus for finding loop— lever parallelism in a pointer based application |
US6092175A (en) | 1998-04-02 | 2000-07-18 | University Of Washington | Shared register storage mechanisms for multithreaded computer systems with out-of-order execution |
US6351808B1 (en) | 1999-05-11 | 2002-02-26 | Sun Microsystems, Inc. | Vertically and horizontally threaded processor with multidimensional storage for storing thread data |
GB2359641B (en) * | 2000-02-25 | 2002-02-13 | Siroyan Ltd | Mapping circuitry and method |
GB2367406B (en) | 2000-06-13 | 2002-06-05 | Siroyan Ltd | Predicated execution of instructions in processors |
EP1660993B1 (en) * | 2003-08-28 | 2008-11-19 | MIPS Technologies, Inc. | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor |
-
2006
- 2006-01-17 US US11/814,801 patent/US8539211B2/en active Active
- 2006-01-17 WO PCT/IB2006/050167 patent/WO2006079940A2/en active Application Filing
- 2006-01-17 CN CNB2006800028782A patent/CN100520714C/zh active Active
- 2006-01-17 JP JP2007551782A patent/JP2008529119A/ja not_active Withdrawn
- 2006-01-17 EP EP06704491A patent/EP1844393A2/en not_active Withdrawn
Non-Patent Citations (4)
Title |
---|
Distributed and parallel execution of Javaprograms onaDSMsystem. Ting-Wei Hou, Fuh-Gwo Chen, J.L. Lee, Y.L. Cheng.Cluster Computing and the Grid, 2001. Proceedings.. 2001 |
Distributed and parallel execution of Javaprograms onaDSMsystem. Ting-Wei Hou, Fuh-Gwo Chen, J.L. Lee,Y.L.Cheng.Cluster Computing and the Grid,2001.Proceedings. 2001 * |
Micro-threading: A New Approach to Future RISC. Chris Jesshope, Bing Luo.Computer Architecture Conference, 2000. ACAC 2000. 5th Australasian. 2000 |
Micro-threading: A New Approach to Future RISC. Chris Jesshope,Bing Luo.Computer Architecture Conference, 2000. ACAC 2000. 5th Australasian. 2000 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153589A (zh) * | 2016-12-06 | 2018-06-12 | 国际商业机器公司 | 用于多线程的处理布置中的数据处理的方法和系统 |
CN108153589B (zh) * | 2016-12-06 | 2021-12-07 | 国际商业机器公司 | 用于多线程的处理布置中的数据处理的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
JP2008529119A (ja) | 2008-07-31 |
WO2006079940A3 (en) | 2006-11-16 |
CN101151590A (zh) | 2008-03-26 |
WO2006079940A2 (en) | 2006-08-03 |
US20080195851A1 (en) | 2008-08-14 |
US8539211B2 (en) | 2013-09-17 |
EP1844393A2 (en) | 2007-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100520714C (zh) | 多线程处理器 | |
CN105389158B (zh) | 数据处理系统、编译器、处理器的方法和机器可读介质 | |
Nollet et al. | Designing an operating system for a heterogeneous reconfigurable SoC | |
US11467833B2 (en) | Load-store instruction for performing multiple loads, a store, and strided increment of multiple addresses | |
US8521997B2 (en) | Conditional execution with multiple destination stores | |
CA3040896C (en) | Register files in a multi-threaded processor | |
US20140164737A1 (en) | Execution efficiency in a single-program, multiple-data processor | |
US8495649B2 (en) | Scheduling threads having complementary functional unit usage on SMT processors | |
US20080046689A1 (en) | Method and apparatus for cooperative multithreading | |
CN102063286B (zh) | 程序流控制 | |
KR101738640B1 (ko) | 트레이스 데이터 압축 장치 및 방법 | |
KR20160118329A (ko) | 결정론적 및 기회적 멀티스레딩 | |
Liu et al. | Supporting soft real-time parallel applications on multicore processors | |
US20090132787A1 (en) | Runtime Instruction Decoding Modification in a Multi-Processing Array | |
KR20070107814A (ko) | 의존성 명령을 패킷으로 그룹핑하여 실행하는 프로세서 및방법 | |
Yeh et al. | Dimensionality-aware redundant SIMT instruction elimination | |
Själander et al. | A look-ahead task management unit for embedded multi-core architectures | |
US8200944B2 (en) | Method for instruction pipelining on irregular register files | |
US20230367604A1 (en) | Method of interleaved processing on a general-purpose computing core | |
Cho et al. | An FPGA based SIMD processor with a vector memory unit | |
Dümmler et al. | Execution schemes for the NPB-MZ benchmarks on hybrid architectures: a comparative study | |
CN112579272B (zh) | 微指令分发方法、装置、处理器和电子设备 | |
US7149881B2 (en) | Method and apparatus for improving dispersal performance in a processor through the use of no-op ports | |
Yamasaki | Responsive multithreaded processor for distributed real-time processing | |
US20070226454A1 (en) | Highly scalable MIMD machine for java and .net processing |
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 | ||
ASS | Succession or assignment of patent right |
Owner name: NITAI SOFTWARE CO., LTD. Free format text: FORMER OWNER: KONINKL PHILIPS ELECTRONICS NV Effective date: 20120321 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20120321 Address after: Delaware Patentee after: Nytell Software LLC Address before: Holland Ian Deho Finn Patentee before: Koninkl Philips Electronics NV |