CN100520714C - 多线程处理器 - Google Patents

多线程处理器 Download PDF

Info

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
Application number
CNB2006800028782A
Other languages
English (en)
Other versions
CN101151590A (zh
Inventor
J·胡格布鲁格
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.)
Nytell Software LLC
Original Assignee
Koninklijke Philips Electronics NV
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 Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of CN101151590A publication Critical patent/CN101151590A/zh
Application granted granted Critical
Publication of CN100520714C publication Critical patent/CN100520714C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address 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
    • 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

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)。
CNB2006800028782A 2005-01-25 2006-01-17 多线程处理器 Active CN100520714C (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108153589A (zh) * 2016-12-06 2018-06-12 国际商业机器公司 用于多线程的处理布置中的数据处理的方法和系统

Families Citing this family (12)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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