管线化可配置处理器的制造方法

文档序号:10475896阅读:373来源:国知局
管线化可配置处理器的制造方法
【专利摘要】一种能够同时处理多个线程的可配置处理电路,该电路包括:线程数据存储器;多个可配置执行单元;可配置路由网,用于将所述线程数据存储器中的位置连接至所述执行单元;配置数据存储器,用于存储配置实例,每个配置实例定义了所述路由网的配置和所述多个执行单元中的一者或多者的配置;管线,该管线形成自所述执行单元、所述路由网和所述线程数据存储器,该管线包括多个管线部分,该多个管线部分被配置以使得每个时钟周期中每个线程从一个管线部分传播到下一个管线部分;所述电路被配置为:(i)将每个线程与配置实例相关联;(ii)针对每一时钟周期对所述多个管线部分中的每一者进行配置以符合所述配置实例,该配置实例与将在该时钟周期期间穿过该管线部分的各自的线程相关联。
【专利说明】管线化可配置处理器
[0001]本发明涉及用于集成电路的处理器设计。
[0002]集成电路一般包括大量通过互联电路连接的功能单元。有时,该功能单元和互联电路是可配置的。这意味着,这些功能单元可以被编程以接受特定的操作,并且该互联电路可以被设计为将电路的不同部分连接在一起。一个众所周知的可配置电路的示例是FPGA(现场可编程门阵列),使用者可以对其进行编程以执行广泛、不同的功能。US 7,276,933,US8493090和US6282627中描述了另一个可编程集成电路的示例。
[0003]很多可配置电路都在速度与灵活性间进行平衡。为了获得最大的灵活性,希望能够尽可能多的获得不同功能单元的组合。如果执行单元之间间隔有芯片,这需要很长的互联路径。一般,集成电路的时钟不可能被设置得比在单一时钟周期内执行的最长运算运行更快。由互联造成的延迟经常会超过任何由功能单元造成的延迟,因此,通过长互联路径传输数据花费的时间从根本上限制了整个电路的时钟速度。
[0004]—种在集成电路中设置时间延迟上限的方法是限制可在一个时钟周期内遍历的所有互联路径的长度。这种方法可以通过在遍历集成电路时管线输送(pipelining)数据实现。US 6,940,308中描述了这样一个实施例,其中至互联网络中切换单元的输入具有锁存器(latch)以在路由互联网络时输送数据。这种方法的问题在于,需要修正使用者的设计以包含该所需的锁存器。
[0005]因此,需要一种更加灵活的处理电路。
[0006]根据一种实施方式,提供了一种能够同时处理多个线程的可配置处理电路,该电路包括:线程数据存储器;多个可配置执行单元;可配置路由网,用于将所述线程数据存储器连接至所述执行单元;配置数据存储器,用于存储配置实例,每个配置实例定义了所述路由网的配置和所述多个执行单元中的一者或多者的配置;管线,该管线形成自所述执行单元、所述路由网和所述线程数据存储器,该管线包括多个管线部分,该多个管线部分被配置以使得每个时钟周期中每个线程从一个管线部分传播到下一个管线部分;所述电路被配置为:(i)将每个线程与配置实例相关联;(ii)针对每一时钟周期对所述多个管线部分中的每一者进行配置以符合所述配置实例,该配置实例与将在该时钟周期期间穿过该管线部分的各自的线程相关联。
[0007]该电路可被配置为将每个配置实例与配置标识符相关联。
[0008]该电路可被配置为将与线程关联的配置标识符通过与该线程相协同的管线进行传播。
[0009]所述配置数据存储器可包括多个存储单元,并且所述电路可被配置为将所述配置实例划分至所述多个存储单元,以使得每个存储单元存储适用于特定管线部分的部分所述配置实例。
[0010]每个管线部分可被配置为通过访问存储了适用于该管线部分的所述部分所述配置实例的存储单元来访问配置实例。
[0011]所述管线的每个部分可被配置为使用与线程关联的配置标识符来访问所述配置数据存储器中与该线程关联的配置实例。
[0012]所述多个线程可以是独立的。
[0013]所述电路可被配置为将多个线程与同一配置标识符相关联。
[0014]所述电路可能够改变与线程关联的配置标识符,从而使线程在一次通过所述电路时与在随后的第二次通过所述电路时能够按照不同的配置。
[0015]所述电路可被配置为根据所述执行单元中的一者对与所述线程相关联的输入进行操作时所生成的输出,改变所述配置标识符。
[0016]所述可配置路由网可包括多个网络输入和多个网络输出,并且可被配置为将每个网络输入与网络输出连接起来。
[0017]所述可配置路由网能够将任意网络输入与任意网络输出连接起来。
[0018]所述可配置路由网能够将任意网络输入与任意一个或多个所述网络输出连接起来。
[0019]所述可配置路由网的输出可与所述执行单元的输入相连接。
[0020]所述可配置路由网可具有多级开关。
[0021]所述多级开关在每一级可具有一个或多个开关,每个开关具有多个开关输入和多个开关输出,并且能够被配置为将每个开关输入与开关输出连接起来。
[0022]所述多级开关每一级中的所述开关可具有相同数量的开关输入和开关输出。
[0023]所述多级开关的一级内所包含的开关与另一级内所包含的开关具有不同数量的开关输入与开关输出。
[0024]所述管线部分可形成自所述多级开关中的一级或多级内所包含的所述开关。
[0025]相比于形成自所述多级开关的外部级内所包含的开关的管线部分,形成自所述多级开关的内部级内的开关的管线部分可包含来自所述多级开关的不同数量的级的开关。
[0026]所述可配置路由网可包括Clos网。
[0027]所述可配置路由网可包括一个或多个交叉开关。
[0028]所述可配置路由网可以是无阻塞的。
[0029]所述可配置路由网可以是完全可配置的。
[0030]所述可配置路由网可以是部分可配置的。
[0031]所述电路的每个执行单元可具有专用片上存储单元。
[0032]所述电路可包括用于检查所述线程数据存储器内存储的数据是否有效的检查单
J L ο
[0033]所述检查单元可被配置为,如果其识别到无效数据,则当所述执行单元正在对已读取该无效数据的线程进行操作时,暂停所述执行单元向所述线程数据存储器进行写入和/或暂停执行存储单元访问操作。
[0034]所述电路可被配置为使已读取到无效数据的线程将在其再次通过该电路时被关联到相同的状态。
[0035]所述线程数据存储器中的位置可以与两个有效比特相关联。
[0036]所述可配置路由网可包括多比特宽度的数据路径,以承载从所述线程数据存储器中读取的数据。
[0037]所述电路可包括两个可配置路由网,该可配置路由网中的一者比另一者具有更宽的数据路径。
[0038]所述电路可包括可分割执行单元。
[0039]所述电路可包括执行单元,该执行单元被配置为使得其输入是可切换的。所述可配置路由网可被配置为将所述线程数据存储器连接至与执行单元可切换输入和执行单元非可切换输入,所述可配置路由网的最外侧级可包括被配置为将所述线程数据存储器连接至所述执行单元可切换输入的第一数量的开关和被配置为将所述线程数据存储器连接至所述执行单元非可切换输入的第二数量的开关,并且对于每个连接的输入,所述第一数量可以小于所述第二数量。
[0040]所述电路能够被动态再配置。
[0041]根据本发明第二实施方式,提供了一种在可配置处理电路中同时处理多个线程的方法,该可配置处理电路包括线程数据存储器、多个可配置执行单元、用于将所述线程数据存储器连接至所述执行单元的可配置路由网、以及形成自所述执行单元、所述路由网和所述线程数据存储器构成的管线,该管线具有多个管线部分,该方法包括:将每一线程与配置实例相关联,该配置实例定义了所述路由网的配置和所述多个执行单元中的一者或多者的配置;促使每一线程在每一时钟周期从一个管线部分传播到下一个管线部分;以及针对每一时钟周期对所述多个管线部分中的每一者进行配置,以使得每一管线部分被配置为符合所述配置实例,该配置实例与在该时钟周期期间穿过该管线部分的各自的线程相关联。
[0042]现参考附图以实施例方式对本发明进行描述。附图中:
[0043]图1示出了可配置处理电路的实施例;
[0044]图2示出了路由网的实施例;
[0045]图3示出了交叉开关的实施例;
[0046]图4示出了执行单元的实施例;
[0047]图5示出了被配置为加法器的执行单元的实施例;
[0048]图6示出了被配置为管线化算术逻辑单元(ALU)的执行单元的实施例;
[0049]图7示出了长延迟执行单元的实施例;
[0050]图8示出了用于为线程设置“配置实例标识符”的执行单元的实施例;
[0051 ]图9示出了可分割执行单元的实施例;以及
[0052]图10示出了两个优化查找表的实施例。
[0053]可配置处理电路优选地能够同时处理多个线程。该电路包括线程数据存储器,一个或多个可配置路由网和一些可配置执行单元。从数据存储器中读取数值然后通过路由网发送到执行单元。执行单元对这些数值执行操作并在他们的输出处传送新的数值。执行单元的输出被写回所述数据存储器。
[0054]所述电路还包括管线。该管线形成自所述数据存储器、路由网和执行单元。该管线包括多个管线部分,使得在每个时钟周期内每个线程从一个管线部分传到下一个管线部分。该电路优选被布置为对每一时钟周期的管线部分进行配置以满足在该时刻所处理的线程。线程的配置可以被看作是利用该线程“时钟穿过”电路,从而引导该线程的数据从自己的特定路径通过处理电路。
[0055]所述电路还包括用于存储大量配置实例的片上存储单元。所述电路被配置为根据所述配置实例,选择在数据存储器中哪个位置进行读取,并且执行单元在该数据存储器的哪个位置进行写入。所述电路还被配置为使用配置实例布置通过路由网的路径和控制执行单元的行为。每个配置实例可以通过配置实例标识符被唯一地引用。该电路可以被配置为通过为线程关联特定的配置实例标识符来选择将哪一配置实例用于所述线程。
[0056]随着GPU(图形处理器)的出现,程序员们已经习惯于使用大量相互影响较小的线程来解决运算问题。理论上,大量这些独立的线程适合由如下所述的多线程、可再配置处理器来进行处理。GPU通常由多个相同的处理器构成,这被称作齐性计算。与GPU不同,如下所述的电路允许使用多个不同的执行单元,这是齐性运算的一种形式。在该电路的特定实例中,可以选择执行单元的数量与性能以适应某些类型的问题。与GPU相比,对于某一给定的任务,这将获得更高效的执行。
[0057]电路概述
[0058]图1示出了可配置处理电路的实施例。该电路包括可配置路由网(在本实施例中被实施为两个路由网111,112)。该电路还包括一些可配置执行单元(115,116)。该电路是管线化的,其在图中用点线102表示。在所示实施例中,该管线包括8级,其由沿图底部的数字示出。适当地选择管线部分间的边界以限制在任一管线部分所花费的最长时间,从而适应最大时钟速度。
[0059]在以下描述中,假定时钟上升沿触发线程通过该管线传播。应该理解的是,这只是出于示例性的目的,时钟下降沿可以同样被使用。同样的,上升和下降沿的混合可以在管线中使用。每个管线级可以具有自己的时钟(假设这些时钟是同步的,以使在每个管线级中时钟沿发生在相同的时刻)。
[0060]所述电路被配置为在同一时间处理多个线程。在硬件中,线程通常被看作是一系列独立于其他线程执行的动作。此外,线程经常具有一些仅用于该线程的状态。线程通常包含在进程中。进程可以包含多个线程。存在于同一进程中的线程可以共享资源,如存储单
J L ο
[0061]在每个时钟周期,线程计数器101使新线程进入电路。在一些情况下,该新线程可以是刚刚结束的、通过管线传播的线程的重复。在每个时钟周期,线程号(thread number)可以从一个管线部分传播到下一个管线部分。一种传送该线程号的方法是在每个管线部分使用寄存器108,该寄存器108存储该管线部分当前线程的线程号。
[0062]所述线程计数器本身可以是可配置的。通常,其可以通过外部处理器进行配置,如改变序列和/或序列的长度。
[0063]每个配置实例可以包括数千个比特。在本实施例中,每个配置实例与标识符关联,该标识符由比配置实例少很多的比特构成,从而可以被方便地速记。管线的第一级被配置为从寄存存储器103中查找当前线程将要使用的配置实例标识符。配置实例标识符将通过使用寄存器(105)而被通过过管线传播。该配置实例标识符被用于每个管线级,以查找该管线级所需的配置实例部分。这可以通过将配置实例划分至每个管线级单独的片上存储单元
(104)来实现。管线级通过在其存储单元的特定部分查找线程的配置标识符来检索特定线程所需的配置实例。在每个线程穿过管线时,其只可以看到与其配置实例标识符关联的配置实例。
[0064]线程间分享包含配置实例的片上存储单元,使得任何线程都能使用任何配置实例。一个线程可以使用与其他线程相同的配置实例。线程间可以使用不同的配置实例。在很多情况下,线程可以使用与在其之前穿过电路的线程完全不同的配置实例。因此,在任一时亥IJ,多个配置实例有可能(并且实际可以)在电路中被激活。线程的执行可以改变其将在下一次通过电路时将使用哪个配置实例标识符(以及哪个配置实例)。
[0065]线程号和一些配置实例比特被用于访问数据存储器内的值,该数据存储器在本实施例中通过寄存存储器(106)而被方便地实施。在本发明的一个实施方式中,线程不能访问寄存存储器中由其他线程使用的值。该寄存存储器值在下一个时钟周期中进入数据路由网111。该数据路由网能够将该值路由到特定执行单元。该数据路由网可被配置为:从一个时钟周期到下一个时钟周期,路由网中的至少一些切换可以被改变的。每一输入在其从路由网络的一管线级传播至下一管线级时所经历的切换是由从随其通过网络传输的配置实例标识符导出的配置实例决定的。
[0066]通过数据路由网的数据路径最好是多比特宽度的。该数据路径的准确带宽可以针对特定应用而被调整。通过任意给定路由网的数据路径不需要都具有相同的宽度。例如,数据路径的一些部分可以比其他部分容纳较宽输入。这可能会在如下一些情况限制路由的灵活性:输入可能需要经由数据路径的足够宽的部分进行传送,这可能会限制线程的其他输入可用的路由路径。输入不需要利用数据路径的全部宽度,但是网络输出应该能够容纳与数据路由网中的最宽路径相同的比特数。
[0067]在本发明的一些实施方式中,采用多个分离的路由网而非单一庞大路由网是很方便的。在本发明一个实施方式中,将控制值和数据值分离,它们各自具有自己的寄存存储器组(106和107)和路由网(111和112)。在一个实施例中,路由网(111)可以具有用于控制值的仅有I比特宽度的数据路径,而另一个路由网(112)可以具有用于数据值的32比特宽度的数据路径。路由网的大小由输入和输出的量决定,因此,不同的路由网需要不同的管线深度。图1中的路由网仅示出了一个或两个管线级。实际上,路由网一般可以具有十二个左右的管线级。
[0068]输入选择单元将路由网的每个输出端与执行单元(115)的输入端连接起来。该执行单元可被配置以使其对它们的输入执行的具体操作由配置实例的比特决定。该执行单元执行的具体操作也可以由来自线程数据(例如,包含在该数据中的控制值)的一个或多个比特决定。通常,执行单元将构成管线的单个部分,但是一些执行单元(116)也可以被配置为执行需要多于一个时钟周期的较长的操作,并且这些执行单元可以构成两个或更多管线部分。同样,执行单元可以在管线末端被链接在一起,以使线程可以从一个执行单元传播到另一执行单元(未示出)。
[0069]每个执行单元可以向其可写入的寄存存储器(117)写入结果值。每个寄存存储器只能由一个执行单元写入。执行单元可以对多于一个寄存存储器进行写入。一些执行单元可以对公共共享资源(例如外部存储单元)进行读写。对共享资源(片上或外部的)进行读写就像是可变延迟的操作,该可变延迟的操作可以花费多于一个时钟周期的时间。
[0070]—些寄存存储器中的寄存器位置可以与有效比特相关联,该有效比特声明该位置存储的数据是否有效。通常,只有与可变延迟执行单元关联的寄存存储器需要额外的比特来标识每个位置是有效还是无效。其他的寄存存储器通常可以被认为保持有效值。
[0071]所述有效比特可以在写操作开始时被设置为“无效”,并且只有在写操作完成时才能改回“有效”。所述电路可以包含用于在线程到达执行单元前,确定该线程将从中读取的寄存器位置有效的装置(110)。这些装置可以随路由网被有效地设置在相同管线部分中。上述功能可以由检查单元执行,该检查单元被配置用于在线程进入执行单元前,为该线程读取适合的有效比特。在线程进入执行单元时,该检查单元可以禁用所有这些将要对无效数据进行操作的执行单元(或者至少禁用这些执行单元执行存储单元写入和寄存存储器写入)。这可以防止对“无效”数据执行的操作的结果被写入寄存器或其他存储单元。
[0072]在一个实施例中,两个有效比特被分配给需要它们的每个寄存存储器位置。如果上述两个有效比特不一致,那么该寄存存储器位置存储的数据可以被认为是无效的,如果上述两个有效比特是一致的,那么该寄存存储器位置存储的数据可以被认为是有效的(或者反之亦然)。由于具有两个有效比特,从而使它们可以在同一时间由两个不同的管线级写入。通常,想使寄存存储器中的数据无效的管线级将被配置为翻转其中一个有效比特,并且另外一个想使寄存存储器中的数据有效的管线级将被配置为翻转另一个有效比特。
[0073]执行单元(118)也可以通过改变与特定线程关联的配置实例标识符(119)来改变该特定线程再次通过电路时所使用的配置实例。当该线程再次通过电路时,该新的配置实例标识符将被用于该线程。
[0074]执行单元有时需要基于线程的在先执行结果来执行操作。一个实施例是累加操作。该电路可以包括一个或多个专用于执行这些操作的单元。一个实施例可以是累加寄存存储器。这些寄存存储器(例如:114)不需要经过路由网,因此可以缩小所需路由网的规模。
[0075]这些执行单元通常在其内部得不到任何反馈。通过执行改变寄存存储器或外部存储单元中数据和/或改变线程配置实例标识符的线程,可以在电路范围基础上实现反馈。
[0076]寄存存储器
[0077]每个寄存存储器具有大量存储不同值的位置。所述电路可以使用寄存存储器地址来选择位置。在本发明一个实施方式中,线程访问每个寄存存储器中的不同位置集合。这可通过确保至寄存存储器的部分读写地址是基于线程号(在适当的管线级)以及零个或多个配置实例比特的而被实施。在该实施方式中,线程不能访问寄存存储器中所保持的与另一个线程关联的值。
[0078]由于寄存存储器通常在不同的管线级中被读取和写入,因此在任何给定时钟周期内,至该寄存存储器的读写地址经常不同。因此,最好在片上存储单元中实施寄存存储器,该片上存储单元能够在一个时钟周期内分别执行读写操作。
[0079]路由网
[0080]该路由网本质上是用于连接多个输入端与输出端的开关。输入端可以被连接到单个输出端或多个输出端。该路由网优选是可配置的,从而通过配置实例的比特,该路由网的至少部分切换是可以随时钟周期而被设定的。
[0081]该路由网能够将任一输入端与任一输出端连接起来(并且在一些实施方式中,可将任一输入端连接至多于一个输出端)。该路由网还可以是非阻塞的,从而可以采用任一组合连接输入端与输出端。
[0082]用于实施可配置路由网的合适开关的一实施例是交叉开关。术语“交叉开关”有时用来指代全灵活开关,但是它也用来指代有能力将每个并且所有的输入端连接到一个(并且只有一个)输出端的开关。对于大型开关来说,克洛斯网(Clos network)是适合的<Xlos网是一个多级开关。构建Clos网的一种方法是用大量交叉开关。通常,Clos网可以不受限制地将每个并且所有的输入端连接到一个输出端。它还能够根据所要求的连通性,将一个输入端连接到多个输出端,尽管这并非总是可行的。
[0083]图2示出用于实施路由网的合适的开关的实施例。该图示出了NXNClos网,在该Clos网中,至少该网的两个外部级采用2 X 2交叉开关(201)来实施。如图所示,该网的内部部分采用两个N/2交叉开关(203)来实施。这些较大的交叉开关可以是“巢式”的,例如,这些开关自身可以是采用的多级交叉开关(或者一些其他开关)的Clos网。如寄存器202所示,开关可以是管线化的。该寄存器被配置为将线程数据从一个时钟周期保持到下一个时钟周期。
[0084]路由网管线化的一个优势在于能够将长数据路径分解为较短的部分。这些较短的部分能够较快地被遍历,因此,即使是使用较快的时钟,经过这些较短部分的路程也能被容纳在单个时钟周期之内。一种方法是使巢式、多级开关的所有层都具有寄存器(从而使每一级开关都代表管线的一部分)。然而,实际上,这可能是不必要的,因为内部级开关之内的距离有可能非常短,并且在因此不可能限制时钟速度。因此,单一管线部分可以包含多级开关的多个内部级,从而不需要在开关的每一级都设置寄存器。
[0085]图3示出了2X2交叉开关的实施例。该开关被布置为接收两个输入301并输出两个输出304。该开关包括两个多路复用器302。每个多路复用器都接收该两个输入的每一者,并选择其中一者作为输出。每个多路复用器都由配置实例比特303控制以选择一个特定的输入作为其输出。因此,配置实例控制由输入301到输出304的映射。2 X 2交叉开关是简单的实施例,但是从中可以看出,通过建立多层2X2交叉开关,可以构建灵活的路由网,该路由网可以具有多个输入并将它们路由路由到多个输出。因此,输入可以被输送到电路中合适的位置以进行进一步处理。
[0086]2X2交叉开关只是交叉开关的一个实施例。也可以使用其他规模的交叉开关(如3X3、4X4、或更大的规模)。多级开关可以在不同级使用不同规模的交叉开关。
[0087]执行单元
[0088]执行单元可以被设计用来执行一组操作,包括但不限于,数学、逻辑或偏移操作,或存储单元读或写操作。除了来自其数据输入的比特(例如,线程的控制值)之外,该执行单元可以使用来自配置实例的比特来决定将为特定线程执行哪个操作。一些执行单元可以具有不同于其他执行单元的内在性能,例如,它们能够执行其他执行单元不能执行的操作。可以调整执行单元的数量与性能以适应特定应用。
[0089]图4示出了执行单元的实施例。执行单元401可被配置为根据配置实例比特407执行操作。该配置实例比特407决定执行单元如何对数据进行操作。该执行单元还具有数据输入405。通常,这些输入接收应经数据路由网路由至执行单元的线程数据。这些输入中的一些也可以与执行单元如何操作相关。执行单元也可以接收时钟信号402和线程号403。该时钟信号控制管线。该线程号标识执行单元当前处理的线程。最终输入404启动寄存器写入,这将在以后详细描述。
[0090]执行单元输出用于写入其专用寄存存储器(408、409)中的数据。该输出数据代表执行单元已对其输入执行的操作的结果。每个数据输出412优选被提供有两个随附的输出:写启动410和写入地址411。该写启动410由启动寄存器写入的输入404设定。只有当写启动被保持在合适的值(通常是I或O)时,数据才可以被写入寄存器。如果写启动不在合适的值,那么禁用写操作。这可以当发现寄存器位置为无效时使用,以禁用所有寄存器写入,直到该位置再次有效(这将在以下“管线”部分中详细描述)。该写入地址411通常是线程号和一些配置实例比特的函数。
[0091]图5到图10示出了一些特定执行单元的实施例。
[0092]图5示出了被配置为简易加法器的执行单元。该执行单元包括用于启动写操作的输入501和用于标识线程号的输入502。该执行单元还包括用于相加的数据的输入503、504。在本实施例中,执行单元只能执行加法(507)。来自于配置实例的配置实例比特(505)决定是否将加法器的结果写入寄存存储器。启动寄存器写入的输入(在当前线程的任一值非有效时,被驱动至高位)也可以阻止写入加法器的结果。执行单元508的输出输出写入数据、寄存存储器的写入地址和写入启动。
[0093]图6示出了被配置为管线化ALU的执行单元。在这个较复杂的实施例中,执行单元可以执行多个不同的操作。多个配置实例比特和来自输入601的比特控制ALU(603)执行什么。例如,在一个配置中,该ALU可以作为乘法器,在另一个配置中,ALU可使用作为进位的控制输入执行加法运算,以及在另一个配置中,控制输入可以选择是让ALU执行加法还是减法运算。寄存器602被提供以管线输送其他输入以匹配ALU管线。该ALU产生输出604和数据值。例如,当ALU结果为O时,该I比特输出可以是高位。
[0094]图7示出了具有长延迟操作器701的执行单元。在该实施例中,多个寄存器702被提供以管线输送写入启动值和写入地址值。这些值将在每个时钟周期通过寄存器传播,以启动新线程进入该执行单元,并且在每个时钟周期启动长延迟运算。寄存器的数量优选与操作的延迟匹配。该操作器701可以管线化也可以不管线化。一些操作器不需要管线化,因为部分操作是长延迟的,这些长延迟的操作不是由这操作器自身来执行。例如,该操作可以是对外部存储单元的读或写操作,在这种情况下,延迟将与经由系统总线对外部存储单元进行访冋相关联。
[0095]图8示出了用于改变线程在下次通过电路时将使用的线程配置实例标识符的执行单元的实施例。在该实施例中,通过三个控制比特801进行控制以从8个配置实例标识符802中选择一个配置实例标识符。该执行单元具有用于存储所选择的配置实例标识符的输出803。
[0096]执行单元也可以是可分割的,例如,它们可以根据线程需要而被分为较小的、可独立执行的单元。图9示出了实施例。图9中的执行单元包括64位ALU 901,该64位ALU 901被分为两个32位ALU。输入902、903可以用于两对32位值或一对64位值。配置实例比特设置ALU是作为64位ALU还是作为两个32位ALU进行操作。可分割执行单元的优势在于,它们比两个或多个独立单元的实施成本低。
[0097]—些执行单元通常要求按照特定的顺序输入。有可能的话,这些执行单元优选是可配置的,从而使输入顺序无关紧要。图10示出了两个包含查找表的实施例。该查找表可以被配置为对输入顺序不敏感,这样使得可以从路由网中移除一些开关。
[0098]
[0099]完成指令所花费的时间依赖于任一寄存存储器读操作和与之相应的寄存存储器写操作之间的管线级的最大数量(以后用“P”表示),以及处理器的时钟频率(用“f”表示)。每条指令的延迟是p/f。然而,在每一时钟周期内,管线可以处理来自P个或更多不同线程的指令。线程被不停地循环,每个时钟周期都有一个线程流入管线。
[0100]任何时候,如果从寄存存储器中读出的值被认为是无效的,那么将阻止该线程对任何寄存存储器进行写入或者改变其配置实例标识符。因此,该线程不能改变该线程可见的状态,从而当其再次流入管线时,该线程将从相同的状态重新开始。优选地,电路被配置以使每个线程只访问自己的寄存存储器(如上所述)。此后,所有其他线程都可以不受影响地通过该管线(假设它们的值被读取为有效),而与其他线程是否遇到无效值无关。执行单元产生的无效寄存器值具有可变延迟,因此最终无效寄存器值将变为有效,并且以前被阻止更新状态的线程现在可以更新状态了。通过这种方法,即使个别线程通过管线一直在传播数值,但该该个别线程可以看做是被“停止” 了。
[0101]使用者看不到管线寄存器。这使得程序可以在根据本说明书描述的原则设计的不同电路上运行,而不需要做任何修改,即使这些电路具有不同的管线。唯一的区别在于完成每条指令所花费的时间。
[0102]配置实例
[0103]一组配置实例存储在片上存储单元中。在本发明的一个实施方式中,外部处理器可以访问该配置实例存储单元。通过对该配置实例存储单元进行写入可以加载个别配置实例。如果可以在同一时钟周期内对配置存储单元进行读取和写入,那么可以在线程持续通过管线的同时加载配置实例。在管线中正在被任何线程使用的配置实例不应该被加载。这可以由操作系统或一些用来监视所有正在使用的配置实例标识符的额外硬件来执行。
[0104]—个配置实例可以促使不改变任何寄存存储器并且不访问任何存储单元。这个“空”配置实例可以用于管线中当线程未激活时(例如在开始时)的时隙。
[0105]在本发明一个实施方式中,可以动态改变特定执行单元或部分路由的电路。必须配置操作系统,以保证没有线程使用正在被动态改变的电路。能够动态改变电路的技术的一实施例是FPGA。通常,这类再编程将涉及从芯片外下载程序文件以重新配置全部或部分电路。通常,该过程的时间花费是毫秒级的(与之相比,针对每个线程对电路进行配置的时间花费是纳秒级的)。如果电路被要求暂时执行一些专业处理,例如加密或其他一些集约处理操作,那么该延迟是可以说得过去的。由于自带执行单元,此处所描述的电路特别适用于此类动态再配置。不需调整周边电路的结构,就可以改变这些电路。
[0106]在本发明范围内可对如上所述的特定实施例可以以各种方式进行修改。例如,如上所述的电路能够通过改变线程再次通过该电路时所使用的配置实例标识符或通过写入控制数据来调整线程的配置实例。其他将来可能的应用包括允许线程改变将用到另一线程上的配置实例标识符,或者允许线程直接对配置实例存储单元进行写入。
[0107]
【申请人】在此单独公开了本文描述的每个单独的特征,以及两个或多个这些特征的任意组合,在某种程度上,不需考虑这些特征或特征组合是否解决了本文所公开的任何问题,基于本说明书并结合本领域技术人员所知的常规知识,能够将这些特征或组合作为整体来实施,并且这些特征或组合并不对权利要求所限定的范围造成限制。
【申请人】表明本发明的各个方面可以包括任意单独的特征或特征组合。如上所述,本领域技术人员清楚在本发明范围内可以做各种修改。
【主权项】
1.一种能够同时处理多个线程的可配置处理电路,该电路包括: 线程数据存储器; 多个可配置执行单元; 可配置路由网,用于将所述线程数据存储器连接至所述执行单元; 配置数据存储器,用于存储配置实例,每个配置实例定义了所述路由网的配置和所述多个执行单元中的一者或多者的配置; 管线,该管线形成自所述执行单元、所述路由网和所述线程数据存储器,该管线包括多个管线部分,该多个管线部分被配置以使得每个时钟周期中每个线程从一个管线部分传播到下一个管线部分; 所述电路被配置为:(i)将每个线程与配置实例相关联;(ii)针对每一时钟周期对所述多个管线部分中的每一者进行配置以符合所述配置实例,该配置实例与将在该时钟周期期间穿过该管线部分的各自的线程相关联。2.如权利要求1所述的可配置处理电路,该电路被配置为将每个配置实例与配置标识符相关联。3.如权利要求2所述的可配置处理电路,该电路被配置为将与线程关联的配置标识符通过与该线程相协同的管线进行传播。4.如上述任一个权利要求所述的可配置处理电路,所述配置数据存储器包括多个存储单元,并且所述电路被配置为将所述配置实例划分至所述多个存储单元,以使得每个存储单元存储适用于特定管线部分的部分所述配置实例。5.如权利要求4所述的可配置处理电路,每个管线部分被配置为通过访问存储了适用于该管线部分的所述部分所述配置实例的存储单元来访问配置实例。6.如权利要求2-5中任一项所述的可配置处理电路,所述管线的每个部分被配置为使用与线程关联的配置标识符来访问所述配置数据存储器中与该线程关联的配置实例。7.如上述任一个权利要求所述的可配置处理电路,其中该多个线程是独立的。8.如上述任一个权利要求所述的可配置处理电路,该电路被配置为将多个线程与同一配置标识符相关联。9.如上述任一个权利要求所述的可配置处理电路,该电路能够改变与线程关联的配置标识符,从而使线程在一次通过所述电路时与在随后的第二次通过所述电路时能够按照不同的配置。10.如权利要求9所述的可配置处理电路,该电路被配置为根据所述执行单元中的一者对与所述线程相关联的输入进行操作时所生成的输出,改变所述配置标识符。11.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网包括多个网络输入和多个网络输出,并且能够被配置为将每个网络输入与网络输出连接起来。12.如权利要求11所述的可配置处理电路,所述可配置路由网能够将任意网络输入与任意网络输出连接起来。13.如权利要求11或12所述的可配置处理电路,所述可配置路由网能够将任意网络输入与任意一个或多个所述网络输出连接起来。14.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网的输出与所述执行单元的输入相连接。15.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网具有多级开关。16.如权利要求15所述的可配置处理电路,所述多级开关在每一级具有一个或多个开关,每个开关具有多个开关输入和多个开关输出,并且能够被配置为将每个开关输入与开关输出连接起来。17.如权利要求16所述的可配置处理电路,所述多级开关每一级中的所述开关具有相同数量的开关输入和开关输出。18.如权利要求16所述的可配置处理电路,所述多级开关的一级内所包含的开关与另一级内所包含的开关具有不同数量的开关输入与开关输出。19.如权利要求15-18所述的可配置处理电路,管线部分形成自所述多级开关中的一级或多级内所包含的所述开关。20.如权利要求19所述的可配置处理电路,相比于形成自所述多级开关的外部级内所包含的开关的管线部分,形成自所述多级开关的内部级内的开关的管线部分包含来自所述多级开关的不同数量的级的开关。21.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网包括Clos网。22.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网包括一个或多个交叉开关。23.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网是无阻塞的。24.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网是完全可配置的。25.如上述权利要求1-23中任一项所述的可配置处理电路,所述可配置路由网是部分可配置的。26.如上述任一个权利要求所述的可配置处理电路,该电路的每个执行单元具有专用片上存储单元。27.如上述任一个权利要求所述的可配置处理电路,该电路包括用于检查所述线程数据存储器内存储的数据是否有效的检查单元。28.如权利要求27所述的可配置处理电路,所述检查单元被配置为,如果其识别到无效数据,则当所述执行单元正在对已读取该无效数据的线程进行操作时,暂停所述执行单元向所述线程数据存储器进行写入和/或暂停执行存储单元访问操作。29.如权利要求27或28所述的可配置处理电路,该电路被配置为使已读取到无效数据的线程将在其再次通过该电路时被关联到相同的状态。30.如上述任一个权利要求所述的可配置处理电路,其中所述线程数据存储器中的位置与两个有效比特相关联。31.如上述任一个权利要求所述的可配置处理电路,所述可配置路由网包括多比特宽度的数据路径,以承载从所述线程数据存储器中读取的数据。32.如上述任一个权利要求所述的可配置处理电路,该电路包括两个可配置路由网,该可配置路由网中的一者比另一者具有更宽的数据路径。33.如上述任一个权利要求所述的可配置处理电路,该电路包括可分割执行单元。34.如权利要求15至33中任一项权利要求所述的可配置处理电路,所述可配置路由网被配置为将所述线程数据存储器连接至与执行单元可切换输入和执行单元非可切换输入,所述可配置路由网的最外侧级包括被配置为将所述线程数据存储器连接至所述执行单元可切换输入的第一数量的开关和被配置为将所述线程数据存储器连接至所述执行单元非可切换输入的第二数量的开关,并且对于每个连接的输入,所述第一数量小于所述第二数量。35.如上述任一个权利要求所述的可配置处理电路,该电路能够被动态再配置。36.—种在可配置处理电路中同时处理多个线程的方法,该可配置处理电路包括线程数据存储器、多个可配置执行单元、用于将所述线程数据存储器连接至所述执行单元的可配置路由网、以及形成自所述执行单元、所述路由网和所述线程数据存储器的管线,该管线具有多个管线部分,该方法包括: 将每一线程与配置实例相关联,该配置实例定义了所述路由网的配置和所述多个执行单元中的一者或多者的配置; 促使每一线程在每一时钟周期从一个管线部分传播到下一个管线部分;以及针对每一时钟周期对所述多个管线部分中的每一者进行配置,以使得每一管线部分被配置为符合所述配置实例,该配置实例与在该时钟周期期间穿过该管线部分的各自的线程相关联。37.基本上如在此参考附图描述的可配置处理电路。38.基本上如在此参考附图描述的方法。
【文档编号】G06F9/38GK105830054SQ201480070217
【公开日】2016年8月3日
【申请日】2014年10月28日
【发明人】P·梅岑
【申请人】斯利肯泰勒有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1