CN104049937A - 裸露向量管线之间的链接 - Google Patents
裸露向量管线之间的链接 Download PDFInfo
- Publication number
- CN104049937A CN104049937A CN201410078424.XA CN201410078424A CN104049937A CN 104049937 A CN104049937 A CN 104049937A CN 201410078424 A CN201410078424 A CN 201410078424A CN 104049937 A CN104049937 A CN 104049937A
- Authority
- CN
- China
- Prior art keywords
- sub
- instructions
- pipeline
- result
- clock period
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 65
- 230000008569 process Effects 0.000 claims description 28
- 230000005540 biological transmission Effects 0.000 claims description 7
- 238000000926 separation method Methods 0.000 claims 2
- 238000012545 processing Methods 0.000 abstract description 16
- 238000010586 diagram Methods 0.000 description 33
- 238000003860 storage Methods 0.000 description 24
- 238000004891 communication Methods 0.000 description 19
- 238000003475 lamination Methods 0.000 description 16
- 230000006870 function Effects 0.000 description 14
- 238000004590 computer program Methods 0.000 description 11
- 238000013519 translation Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000005587 bubbling Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 235000019580 granularity Nutrition 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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/30079—Pipeline control instructions, e.g. multicycle NOP
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- 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/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- 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/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
- G06F9/3828—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明涉及裸露向量管线之间的链接。各实施例包括一种用于在裸露管线处理元件中链接数据的方法。所述方法包括:将多指令字分隔成第一子指令和第二子指令;在所述裸露管线处理元件中接收所述第一子指令和所述第二子指令。所述方法还包括在第一时间发出所述第一子指令;在不同于所述第一时间的第二时间发出所述第二子指令,所述第二时间被偏移以考虑所述第二子指令对来自所述第一子指令的第一结果的依赖性;第一管线在第一时钟周期执行所述第一子指令以及将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送。
Description
技术领域
本发明一般地涉及计算机处理和存储器,更具体地说,涉及裸露向量管线之间的链接。
背景技术
计算机系统通常需要大量高速存储器,例如随机存取存储器(RAM)以在启动和操作计算机时保存信息(例如,数据和程序)。随着计算机系统性能和复杂性的提高,对存储器件的需求也在持续增长。
从主处理器到存储器件上某些位置的通信可能会涉及相对较长的数据存取时间和延迟。主处理器访问存储器所花费的时间例如可以是数百个周期,其中包括认识到数据不在高速缓存内(例如,内存读取)的时间、跨模块或其它封装从主处理器的处理器核到I/O的时间、在多处理器/共享存储系统中建立到存储器的通道的仲裁时间,以及将数据放入存储单元或从存储单元取出数据的时间。
当代存储系统包括能够并行地支持多个存储访问的向量处理器。支持对多个存储位置的并行存储访问通常导致存储系统中的带宽增加。
发明内容
各实施例包括一种用于在裸露管线处理元件中链接数据的系统和方法。所述方法包括将多指令字分隔成第一子指令和第二子指令;在所述裸露管线处理元件中接收所述第一子指令和所述第二子指令。所述方法还包括在第一时间发出所述第一子指令;在不同于所述第一时间的第二时间发出所述第二子指令,所述第二时间被偏移以考虑所述第二子指令对来自所述第一子指令的第一结果的依赖性;第一管线在第一时钟周期执行所述第一子指令以及将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送,所述第一管线和第二管线位于不同的寄存器文件空间内。所述方法包括所述第二管线在所述第二时钟周期接收所述第二子指令以及在所述第二时钟周期执行所述第二子指令,所述执行基于经由所述链接总线接收到所述第一结果。
其它示例性实施例包括一种用于在裸露管线处理元件中链接数据的系统和方法。所述方法包括在所述裸露管线处理元件的指令缓冲器中接收多指令字,所述多指令字包括第一子指令和第二子指令;第一管线接收所述第一子指令;第二管线接收所述第二子指令,所述第一管线和第二管线位于不同的寄存器文件空间内。所述方法还包括所述第一管线在第一时钟周期执行所述第一子指令;在所述第一时钟周期暂停执行所述第二子指令,所述第二子指令依赖于来自所述第一子指令的第一结果;所述第一管线将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送;以及在所述第二时钟周期执行所述第二子指令,所述执行基于经由所述链接总线接收到所述第一结果。
附图说明
图1示出根据一个实施例的用于有源存储器的系统的框图;
图2示出根据一个实施例的具有有源存储器的存储系统的框图;
图3示出根据一个实施例的具有有源存储器的存储系统的示意图;
图4示出根据一个实施例的有源存储器件中的处理元件的框图;
图5示出根据一个实施例的有源存储器件中的处理元件的示意图;
图6示出根据一个实施例的用于在管线之间链接数据的方法的流程图;
图7示出根据一个实施例的用于在管线之间链接数据的方法的流程图;以及
图8示出根据一个实施例的用于在管线之间链接数据的逻辑操作的示意图。
具体实施方式
一个实施例涉及通过互锁链接总线上的管线,以使管线在所有必要的结果到达之前无法开始执行其指令,而在裸露向量管线之间执行链接。在一个实施例中,功能单元之间的结果数据的有效交换在横向微编码向量处理器中提供,该向量处理器具有编译器排定的依赖性距离而不需要附加指令空间。编译器可以分解横向微编码指令(也称为“多指令字”)以提供子指令执行延迟,直到每个子指令的所有结果可用。各实施例不需要将指令分割成单独时间槽以能够考虑生成结果时的管线延迟,以便指示依赖管线中的指令何时可开始使用链接结果。在包括多个处理管线并支持在不将结果保存到寄存器的情况下,使来自一个管线的结果与另一结果相链接的处理元件中,可通过传统的微处理器设计实现每次计算的能耗改进。所述处理元件可通过本地元件索引计数器提供对向量寄存器元件的访问。向量指令执行的每次迭代与指向向量寄存器的索引元件的索引关联,其中索引元件被用于指令执行的特定迭代。暴露处理元件的管线序列允许编译器或用户调节软错误。
在各示例性实施例中,依赖于来自另一管线的链接结果的管线被暂停,直到可从其它管线链接该结果。该暂停由指令中的一组位实现,这组位指示指令必须等待哪些链接结果总线作为其操作数。一旦指令所需的所有结果在链接总线上被标记为有效,指令便可继续。该暂停协议实施例需要管线中的所有指令在同一周期中启动,步伐一致地执行操作,并且生成其结果时具有相同的延迟。另外还需要单独的当前指令地址寄存器和单独的向量长度计数器以便横向微编码指令的每个子指令在向量操作中跟踪其指令地址和索引。此类暂停协议的优点在于无需将横向微编码向量指令分解为多个子指令以考虑生成链接结果的延迟,从而节省了指令缓冲空间。
在其它实施例中,互锁协议被用于允许生成要链接的结果的管线具有不同的延迟。但是,指令必须同时发出以允许需要链接结果的指令在生成结果之前设置互锁。在这种互锁技术中,生产管线必须在生成结果之后暂停,直到接收链接结果的指令所需的所有结果到达该指令的管线。使用互锁链接的一个优点是例如可使用具有不同延迟的管线来允许早期绕过,或允许链接需要不同周期数才能完成的来自不同类型指令或管线的结果,而不必执行将横向微编码向量指令分解为子向量(这些子向量具有适当的偏移以便与来自不同管线的链接数据的到达合拍)的复杂操作。将横向微编码向量指令分解为子向量可能在横向微编码处理元件中占用大量额外的指令缓冲空间。互锁链接也允许使用具有未知延迟的指令或管线,例如但不限于在检测到零操作数或短位范围操作数时提前生成结果。与暂停链接协议相比,使用互锁链接协议的另一优点是来自下一属于未暂停管线的横向微编码指令的子指令可被读出并执行,这消除了被暂停的链接协议的冒泡(bubble)开销。
裸露管线处理元件之间的链接可在有源存储器件中实现。有源存储器件可以是任何适当的存储器件,包括多个与逻辑部和处理元件相连的存储元件(例如,芯片)。在一个实施例中,有源存储器件包括存储层,这些层形成三维(“3D”)存储器件(例如,存储立方体),其中各个芯片列形成与处理元件和逻辑通信的库(Vault)。有源存储器件可以包括多个被配置为与芯片和其它处理元件通信的处理元件。在一个实施例中,处理元件通过互联网络访问库中的选定地址。此外,互联网络提供有源存储器件上的处理元件与库之间,以及处理元件与主处理器之间的通信路径。每个库具有关联的存储控制器或逻辑单元,这些控制器和逻辑单元也与互联网相连。
各实施例包括可以执行复杂操作集的有源存储器件,这些操作集使用有源存储器件中的多个位置(例如,存储在特定位置上的数据)作为操作数。此外,提供处理,从而对有源存储器件内的这些操作数自主地执行指令和操作。具体而言,指令存储在有源存储器件本身内,并且不由主存储器执行。所存储的指令被提供给处理元件,以便由有源存储器件中的处理元件处理。在一个实施例中,处理元件是可编程引擎,包括指令缓冲器、具有分支功能和指令解码功能的指令单元、向量、标量和屏蔽寄存器文件的混合物、多个用于在存储器与寄存器文件之间移动数据的加载/存储单元,以及多个用于各种数据类型的算术和逻辑处理的执行单元。有源存储器件另外还包括用于将虚拟地址转换为物理地址的地址转换功能、排列存储器与处理元件之间的数据移动的统一加载/存储队列,以及用于与主处理器通信的处理器通信单元。
在一个实施例中,有源存储器件被配置为在接收来自外部请求者(例如,主处理器或另一处理元件)的命令之后,将来自有源存储器件的一部分的配置信息或指令加载到处理元件中。此外,处理元件可以执行虚-实地址转换,这些转换在执行已加载的指令之时计算。在一个实例中,当执行加载指令时,主动式存储器件从存储位置存取操作数并将操作数置于处理元件中的寄存器内。存储位置的虚拟地址由加载指令生成并被处理元件转换为实地址。类似地,当执行存储指令时,有源存储器件将具有内容(例如,操作数)的存储位置写入处理元件的寄存器。存储位置的虚拟地址由存储指令生成并被处理元件转换为实地址。
有源存储器件的处理元件实施例还具有通过互联网络对有源存储器的任意部分中的操作数执行读写操作的能力。具体而言,处理元件可以使用互联网络访问有源存储器件中的其它库。在一个实施例中,处理元件形成池并经由互联网络与库相连,其中处理元件并非物理地位于库叠层中。在一个实施例中,互联网络是连接设备,例如交叉开关,该设备被配置为将任何处理元件连接到任何存储库,前提是处理元件和存储库与互联网络相连。在一个实施例中,互联网络可以连接多个有源存储器件,其中互联网络提供单独器件的处理元件与存储库之间的通信路径。
在一个实施例中,处理元件与存储控制器一起被包括为叠层的一部分。此外,处理元件可以对操作数执行复杂的算术和逻辑运算,并且读取最终结果以及将最终结果写回存储器中的位置。有源存储器件可以将单个结果值或信号返回到主处理器以指示所需复杂运算的结果在有源存储器件中已就绪,从而对有源存储器件执行高带宽处理并在有源存储器件与主处理器之间使用较低带宽的通信。
有源存储器件内的处理能力可以缩短当位于单独芯片中的处理器访问存储器时可能经历的存储延迟和能耗。并不是通过低带宽通信路径将数据从存储器传送到单独的处理芯片,对数据执行非常简单的计算,然后将已处理的数据传送回存储器,而是,主处理器可以配置有源存储器件内的处理元件,然后指示它们执行数据处理任务。可通过将一个或多个命令从主处理器发送到有源存储器件实现此目的。在此情况下,执行数据处理的位置与存储器之间的数据移动大幅降低,不仅是从存储器到数据处理位置的移动距离缩短,而且遍历存储层次结构的缓存层数也减少。
图1示出根据一个实施例的用于在存储器中存储和检索数据的系统的框图。图1所示的系统100包括计算机处理器(CPU)102、具有存储器件的存储器106,以及用于接收和处理来自计算机处理器102并要存储在存储器106中的数据的存储控制器104和处理元件108。
存储控制器104可以在不使用处理元件108的功能的情况下,与计算机处理器102通信并从计算机处理器102接收写请求。写操作包含要写入存储器106的数据和用于识别存储器106中要写入数据的位置的实地址。存储控制器104在存储器106内的实地址处存储数据。当存储或检索数据时,计算机处理器102可以将虚拟地址映射到存储器106内的实地址。给定虚拟地址的实地址可以在每次修改存储器106中的数据时更改。
在一个实施例中,处理元件108与计算机处理器102通信并且从计算机处理器102接收命令。命令可以对应于存储器106中存储的指令以执行对将要写入存储器106的数据的写请求。命令还可以包括虚拟地址,用于识别存储器106中将要写入数据的位置。存储控制器104和/或处理元件108在存储器106内的实地址处存储数据。在一个实施例中,当存储或检索数据时,处理元件108将虚拟地址映射到存储器106中的实地址。如下面进一步详细描述地那样,计算机处理器102将命令提供给存储器106,在此,处理元件108接收命令并从存储器106取回对应的指令。系统100是可用于执行此处描述的处理的配置的一个实例。尽管系统100被示为仅有一个存储器106、存储控制器104、处理元件108和计算机处理器102,将理解,其它实施例也可以在具有存储器106、存储控制器104、处理元件108或计算机处理器102中的两个或更多的其它系统中操作。在一个实施例中,存储器106、存储控制器104、处理元件108和计算机处理器102不位于同一计算机内。例如,存储器106、处理元件108和计算机处理器102可以位于一个物理位置内(例如,位于一个存储模块上),而计算机处理器102位于另一物理位置内(例如,计算机处理器102经由网络访问存储控制器104和/或处理元件108)。此外,此处描述的处理的各部分可以跨存储器106、存储控制器104、处理元件108和计算机处理器102中的一个或多个。
图2是实现有源存储器的计算机系统200的一个实施例的示意图。在一个实施例中,计算机系统200包括有源存储器件202、有源存储器件203和有源存储器件204。有源存储器件202包括存储库(memory vault)206,存储控制器208和处理元件210。在一个实施例中,处理元件210、存储库206和存储控制器208经由互联网络212连接和通信。具体而言,处理元件210通过互联网络212与存储库206、存储控制器208和诸如有源存储器件203和204之类的其它存储器件通信。互联网络212还通过处理器链路220和222与主处理器222相连。互联网络212提供快速的高带宽路径以实现器件的各部分(例如,处理元件、存储控制器和存储器)之间的通信,从而提供有源存储器的改进性能并缩短其延迟。
有源存储器件203包括存储库226、存储控制器228和处理元件230。在一个实施例中,处理元件230、存储库226和存储控制器228均位于互联网络212的同一侧,例如位于单个叠层内。通过将处理元件230与存储库226置于同一叠层内,在访问存储库226内的位置时缩短延迟,这样进一步提高性能。在一个实施例中,有源存储器204包括存储库214和通过互联网络212与处理元件210和处理元件218相连的存储控制器216。如图所示,处理元件218位于互联网络212的另一侧,与存储控制器216和存储库214不在一侧。在各实施例中,有源存储器件202、203和204包括多层层叠的可寻址存储元件。进一步地,叠层存储器可被分成存储库206、226和214,或者存储器件的三维分块区域,这些三维分块区域共享公共存储控制器和/或存储元件,并且能够将存储访问请求相互独立地提供给它们各自的存储域。
在各实施例中,处理元件、存储库和存储控制器可以通过适当的方式排列,具体取决于应用。例如,诸如处理元件218之类的一个或多个处理元件可以位于互联网络212的一侧,并且可以作为处理元件池执行操作,这些处理元件可用于访问与互联网络212相连的存储系统中的任何存储器。形成池的处理元件不限于访问特定的存储库,因此,可在从主处理器224接收命令时使用一个或多个元件。相应地,处理元件218可被配置为访问每个存储库206、226和214。在另一实施例中,诸如处理元件230之类的一个或多个处理元件作为包括存储库226和存储控制器228的叠层的一部分放置。在这样的配置中,处理元件230被配置为访问与互联网络212相连的存储库226,其中包括存储库206和214。在一个实施例中,诸如处理元件210之类的一个或多个处理元件被置于互联网络212的另一侧,与存储库206和存储控制器208不在一侧。在该配置中,处理元件210被配置为访问任何与互联网络212相连的存储器,其中包括存储库226和214。
在一个实施例中,计算机系统可以包括多个有源存储器件,例如有源存储器件202、203和204。此外,每个有源存储器件可以包括多个叠层,每个叠层包括存储库、存储控制器和关联的处理元件。在一个实例中,处理元件的数量可以大于存储库的数量。在另一实施例中,存储器件可以包括少于存储库的处理元件。在一个实施例中,处理元件形成池并可用于访问系统中的任何存储器。例如,存储器件可以包括16个存储库和存储控制器,但是仅包括八个处理元件。八个处理元件形成池,被用作访问与互联网络相连的任何存储库的资源。在另一实例中,存储器件可以是无源存储器件,其中该器件由与互联网络相连的有源存储器件的处理元件控制。
图3是实现有源存储器的一个示例性计算机系统300的示意图。计算机系统300包括电路板302、主处理器304、有源存储器件306和有源存储器件308。有源存储器件306、有源存储器件308和主处理器304位于电路板302上。如图所示,有源存储器件306和308的各部分被进行分解以示出计算机系统300的排列细节。有源存储器件306和308分别通过信号路径324和344与主处理器304通信。如图所示,有源存储器件306排列为多个层,其中基层311包括多个存储控制器310和处理元件312。例如,有源存储器件306包括存储层309,该层位于基层311上面,其中层309均具有多个存储元件。如图所示,基层311还包括互联网络346以实现器件中的存储器、存储控制器与处理元件之间的高带宽通信。
在一个实施例中,有源存储器件306包括多个存储库314,其中每个存储库314包括来自每个层309的存储元件,存储库314邻近存储控制器310和处理元件312放置。具体而言,示例性有源存储器件306包括存储元件层16,其中各个元件层形成叠层,包括叠层316,其中叠层316包括被置于存储控制器318和处理元件320之上的存储库322。高带宽通信路径236提供存储库322内的处理元件320与存储位置之间的高带宽通信路径,该路径为直连路径,长度大幅缩短(例如,与路径324、344相比),这缩短了用于存储访问的延迟并降低了功耗。例如,处理元件320可以从主处理器304接收命令,基于该命令加载来自有源存储器件306的指令,并且作为已加载指令的一部分,访问存储库314中某个位置上的数据,然后在处理元件320中对该数据执行复杂运算。此外,处理元件320还可以将诸如结果之类的数据存储在存储库314中,然后在执行命令之后将值或信号发送到主处理器304。在一个实施例中,处理元件320存储数据(例如,操作数)或将数据从处理元件320中的寄存器写入存储库314。作为读取或存储操作的一部分,处理元件320还被配置为将地址从虚拟地址转换为实地址以及从实地址转换为虚拟地址。这样,处理元件320提供指令加载、地址转换、复杂运算和存储器本地的其它任务以缩短延迟、节省电力并释放主处理器304以执行其它任务。
类似地,有源存储器件308包括多个被置于基层331上的存储控制器328和处理元件330。在一个实施例中,有源存储器件308包括被置于基层331上面的存储器件层329,其中层329均具有多个存储器件。基层331还包括互联网络346以实现器件内的存储器与处理元件之间的高带宽通信。在一个实施例中,有源存储器件306和有源存储器件308的互联网络346相连并允许处理元件与单独器件上的存储器之间的通信。
在一个实施例中,有源存储器件308包括多个存储库332,其中每个存储库332包括来自每个层309的存储元件,存储库332邻近存储控制器328和处理元件330放置。示例性有源存储器件308包括16个叠层,其中包括叠层334,叠层334包括被置于存储控制器340和处理元件338上方的存储库336。高带宽通信路径342提供处理元件330与存储库336内的存储位置之间的通信。
图4示出与互联网络402相连的处理元件实例400,作为图1-3的处理元件之一的一个实施例。处理元件400(也称为裸露管线处理元件400)可位于有源存储器件(例如图1-3的有源存储器件之一)中。处理元件400的管线序列裸露,以便编程器或编译器可以在处理元件400内建立低级指令的执行序列。在图4的实例中,处理元件400包括与互联网络402和指令缓冲器406相连的加载-存储队列(LSQ)404。指令缓冲器406还与通道控制单元(LCU)408和解码器410相连。处理器通信单元(PCU)412通过互联网络402提供处理元件400与主处理器或其它处理元件之间的通信接口。LSQ404还与向量计算寄存器文件(VCR)414和标量计算寄存器文件(SCR)416相连。VCR414和SCR416通过多个复用器与算术逻辑单元(ALU)418和存储器访问单元420(也称为加载-存储单元(LSU)420)相连。ALU418通过复用器与自身以及LSU420相连,并且还与VCR414和SCR416相连。LSU420还可以与自身、LSQ404、有效-实地址转换单元(ERAT)422、VCR414和SCR416相连(所有连接均未示出)。ERAT422还与LSQ404相连。将理解,处理元件400中可包括大量其它连接和元件。例如,为了清晰起见,未示出解码器410与其它元件之间的连接。此外,可修改或省略图4所示的连接,例如所示的解码器410与PCU412之间的连接。
处理元件400支持指令集架构,包括针对许多数据类型的广泛算术功能。处理元件400的向量处理能力支持时间维度的单指令多数据(SIMD),同时也支持空间维度的SIMD。指令缓冲器406保存指令(也称为“通道指令”),这些指令将针对分支被取回和按序执行。
在一个实施例中,每个通道指令包含9个子指令,用于在处理元件400内的各个单元中执行。迭代计数可以包括在通道指令内,它允许子指令重复执行到预定的次数(例如,达到32次)。这促进时间维度上的SIMD。LCU408可以管理迭代计数并判定何时前进到下一指令或重复执行同一指令。在一个实施例中,ALU418的算术管线为64位宽,并且借助作为多个执行槽同时并行地执行小于64位的数据类型来支持空间SIMD。例如,假设通道指令包括9个子指令,则这些子指令的执行可以在LCU408中实施,从而实现通道控制,在四个处理片中,每个处理片都包括ALU418和LSU420。VCR414和SCR416对可以根据处理片实现并且由每个ALU418和LSU420对访问。相应地,VCR414、SCR416、ALU418、LSU420以及关联的复用器被示为叠层,这些叠层具有四个元件以指示图4的实例中的4个处理片。
在处理片级,计算可以在浮点和定点数据类型上执行,这些计算例如在64位向量元件上以时间SIMD的方式,以及在较窄的向量子元件(例如,可以是32位、16位或8位宽)上以时间和空间SIMD的方式通过64位粒度实现。
处理元件400内的每个处理片包括存储访问管线(加载/存储管线)和算术管线。通过作为加载/存储管线的LSU420管理流可允许按向量数据元件或子元件计算一个地址。处理元件400提供执行关联的定点有效地址(即,虚拟地址)计算的能力。通过ALU418的算术管线可以包括稳定的浮点和定点运算组合以支持各种工作负荷。
LSU420可以支持与具有封装数据的寄存器之间进行例如8、4、2和1字节加载和存储操作以及4、2和1字节的加载和存储操作。
ALU可以支持寄存器文件之间的复制操作、对双精度(64位)和单精度(32位)浮点数据类型的算术、舍入和转换、比较以及最大化和最小化运算,以及对双字(64位)、字(32位)、半字(16位)以及字节(8位)的定点数据类型的算术、旋转/移位、比较、逻辑、前导零计数和1填充计数运算。
在一个实施例中,处理元件400内处理片的计算模型是具有VCR414和SCR416的向量单指令多数据(SIMD)模型。VCR414可以支持多维寄存器,而SCR416支持单维寄存器。例如,VCR414可以包括16个带有32个元件的向量寄存器项,每个元件具有64位,SCR416可以包括16个带有1个元件的寄存器项,每个元件具有64位,但是也支持多种其它配置。可使用数量变化的执行槽,对相等数量的子元件执行操作,借此使子元件加在一起成为一个寄存器元件(VCR414或SCR416),在该实例中,此元件具有64位。执行槽的数量以及对应的向量子元件的数量取决于指令的数据类型。数据类型及各种格式大小的实例包括:具有双精度(64-位)和单精度(32-位)的浮点数据类型以及双字(64位)、字(32位)、半字(16位)以及字节(8位)的定点数据类型。
图5是具有提供管线之间操作数传送的链接总线502的示例性处理元件500的示意图。处理元件500包括第一管线504、第二管线506和第三管线508。在一个实施例中,管线504、506、508均具有六个级,其中管线表示图4的ALU418的裸露管线。在另一实施例中,管线504、506、508表示图4的LSU420的裸露管线。在一个实施例中,管线可以从指令缓冲器接收指令,其中单独的子指令被提供给每个管线。在第一管线504中执行的指令的结果可以作为操作数经由链接总线502提供给第二管线504。在图6详细描述的实施例中,编译器将多指令字分隔成多个子指令,其中每个子指令将在单独的管线上执行。编译器还在执行一个或多个选定的子指令时提供移位或延迟,这些选定的子指令依赖于来自另一子指令的结果。在一个实施例中,无操作指令(“nop”)在第一时钟周期期间由这样一个管线来执行:该管线所具有的子指令需要来自另一子指令的结果作为操作数来执行。这样,在一个实施例中,指令缓冲器504针对周期(例如,对应于子指令的每次执行的输入)中的每个时刻保存每个管线的指令,其中延迟的管线的指令为无操作指令。在各实施例中,多指令字(MIW,例如,横向微编码指令)被从指令缓冲器540取回并且在指令解码逻辑542中解码。
在图7所述的另一实施例中,指令缓冲器保存整个多子指令字,其中每个管线级之前的硬件暂停依赖于来自另一子指令的结果的子指令。已暂停的子指令具有指示该子指令需要来自另一子指令的输入才能继续的字段(例如,子指令中的位),从而导致硬件中等待执行的暂停,直到操作数出现在链接总线502上。在一个实施例中,在第一管线中执行的第一子指令具有目的地字段,该字段指示将接收第一子指令的结果作为依赖于第一子指令的第二子指令的输入的第二管线的位置。此外,第二子指令具有源字段,该字段指示第二子指令具有在第一管线上执行的第一子指令的结果作为输入。在一个实施例中,子指令可以分别在每个管线504、506、508的复用器522、524、526处或附近暂停。裸露向量管线的每个实施例利用链接总线502上的操作数传送执行依赖子指令。链接总线502可以包括必要的通信链路。如图所示,处理元件500具有三个管线并且链路总线502具有三个对应的链接总线线路510、512、514。
在一个实施例中,第一管线504在第一时间周期执行第一子指令,其中要由第二管线执行的第二子指令依赖于第一子指令的结果。因此,在第一结果(例如“A”)被通过通信链路528提供给链接总线502之后,第二子指令由第二管线506在第二时间周期执行。第二管线506可以在第一时间周期执行无操作指令,然后当第一结果在链接总线502上可用时,在第二时间周期执行第二子指令。在一个实施例中,第一结果经由通信链路528被提供给链接总线502和第一寄存器文件516。类似地,第二子指令可由第二管线506执行并且产生通过通信链路530提供给链接总线502和第二寄存器文件518的第二结果。来自第二子指令的第二结果可用作由第三管线508在第三时间周期执行的第三子指令的操作数。如此出所述,第一时间周期在第二时间周期之前发生并且第二时间周期在第三时间周期之前发生。在一个实施例中,第三子指令可由第三管线508执行并且产生通过通信链路532提供给链接总线502和第三寄存器文件520的第三结果。执行子指令的结果可提供给寄存器文件以便在程序或运算中使用。处理元件500可以具有任何适当数量的带有依赖子指令的管线,这些子指令使用一个或多个经由链接总线502提供的结果。
图6是用于在裸露管线处理元件中链接数据的示例性方法、计算机程序产品和系统的流程图600。在方框602,多指令字被分隔成第一子指令和第二子指令。在一个实施例中,编译器将多指令字分隔成多个子指令,其中一个或多个子指令依赖于一个子指令的结果。在方框604,在裸露管线处理元件中接收第一子指令和第二子指令,其中第一子指令和第二子指令的发出存在执行时间偏移以考虑第二子指令对来自第一子指令的第一结果的依赖性。在方框606,第一管线接收第一子指令。在方框608,第一管线在第一时钟周期执行第一子指令。在方框610,第一管线将在第二时钟周期执行第一子指令的第一结果传送到与第一管线和第二管线相连的链接总线,其中第二时钟周期对应于第一管线中的锁存管线级的总数。在方框612,第二管线在第二时钟周期接收第二子指令,第二时钟周期位于第一时钟周期之后。在方框614,第二管线基于经由链接总线接收到第一结果,在第二时钟周期执行第二子指令。在方框616,执行子指令以经由链接总线提供依赖子指令的操作数的过程(类似于步骤604至614)可针对第二子指令(产生结果或操作数)和在第三管线上执行的第三子指令(依赖于该结果)重复。在一个实施例中,编译器接收多指令字并插入“nop”作为依赖于执行子指令的其它管线结果的管线指令。这样,当第一子指令在第一时钟周期在第一管线中执行时,第二管线在第一时钟周期执行nop。之后,例如在第二时钟周期,第二管线接收第一子指令的结果并执行第二子指令(而不是nop)。此外,第一子指令仍可以在第二时钟周期在第一管线处执行,其中索引计数到来自向量寄存器的第二元件输入,以便由第一管线再次执行第一指令。第一指令针对第二输入的结果然后经由链接总线502传送或者在第三时钟周期链接到第二管线,在第二管线处,使用该结果针对第二索引执行第二子指令。
需要指出,此处描述的链接方法和系统(例如,图6和7)在具有两个管线的系统中执行,其中这两个管线位于不同的寄存器文件空间内。不同的寄存器文件空间意味着在没有链接机制的实施例中,第一管线不能通过访问写入第二管线的寄存器文件,反之亦然(即,两个管线无法访问彼此的数据集)。在使用链接机制的实施例中,结果数据经由链路总线直接被传送到另一管线,不需要将数据写入文件位置,这提高了指令执行速度。对于具有不同寄存器文件空间的实施例,结果数据被管线提供给另一管线,后者一般无权经由公共寄存器访问结果。在管线位于不同寄存器文件空间内的实施例中,管线针对与另一寄存器文件空间内的管线关联的寄存器文件只能执行读取功能。这样,链接机制允许在无法将数据写入不同寄存器文件空间的管线之间提供数据。
图7是用于在裸露管线处理元件中链接数据的示例性方法、计算机程序产品和系统的流程图700。在方框702,在裸露管线处理元件的指令缓冲器中接收多指令字,其中多指令字包括第一子指令和第二子指令。在方框704,第一管线接收要在第一时钟周期执行的第一子指令。在方框706,第二管线接收要在第一时钟周期之后的第二时钟周期执行的第二子指令。在方框708,第一管线在第一时钟周期执行第一子指令。在方框710,暂停在第一时钟周期执行第二子指令,其中第二子指令依赖于来自第一子指令的结果。当在管线处暂停子指令时,管线不在指令暂停的时钟周期执行指令。第二子指令可以在第二管线处暂停或者在第二管线之前暂停(例如,在位于504、506、508的锁存器级之后或者在管线前面的复用器544、546、548之前的锁存器中)。暂停可以通过对锁存器执行时钟门控,以便它们在管线解除暂停(离开已暂停状态)之前保持当前状态来实现。在方框712,第一管线将在第二时钟周期执行第一子指令的第一结果传送到与第一管线和第二管线连接的链接总线,其中第二时钟周期对应于第一管线中的锁存管线级的总数。在方框714,第二管线基于经由链接总线接收到第一结果,在第二时钟周期执行第二子指令。在方框716,执行子指令以经由链接总线提供依赖子指令的操作数的过程(类似于步骤704至714)可针对第二子指令(产生结果或操作数)和在第三管线上执行的第三子指令(依赖于所述结果)重复。
图8是硬件中执行在裸露管线处理元件中链接数据的方法的逻辑操作800的示意图。在方框802,启动在处理元件上执行的程序,其中第一多指令字(MIW)被从指令缓冲器540取回并在指令解码逻辑542中被解码。在一个实施例中,MIW是横向微编码指令。第一MIW包含两个子指令:用于在管线0中执行的第一子指令和用于在管线1中执行的第二子指令。这两个子指令均包含源字段和目的地字段,它们指示是否链接结果以及应该将结果链接到哪个管线。一旦管线0接收到第一子指令(在锁存器544中),它便在方框804检查其源操作数中的任一者是否对应于将在管线1中执行的第二子指令的结果。该检查在方框804通过查看子指令的源字段(scrp1)执行。如果第一子指令的源操作数对应于第二子指令的结果,则管线0在方框806暂停发出第一子指令,直到来自第二子指令的结果可用(通过将p1vld0信号设定为逻辑“1”来指示)。一旦第二子指令的结果在链接总线502上可用,便在方框808中检测到此状况,并且管线0解除暂停并将第一子指令发出到管线504的管线级1,并且在方框812递增其向量迭代计数器。管线0在方框820继续被计时并且在方框818检查向量索引计数器是否等于第一MIW中指定的迭代数。如果尚未执行完所有迭代,则检查方框804中的状况以查看是否可将第一子指令的下一迭代发出到带有源操作数的下一向量元件索引的管线0,或者查看管线0是否因为依赖第二子指令的第二迭代结果而需要被暂停。针对第一MIW指定的迭代数重复所描述的步骤序列。在方框818检测到第一子指令的所有迭代已执行之后,在方框816检查第一MIW是否包含分支指令,如果包含,则处理元件等待所有管线完成执行其子指令的所有迭代,然后在方框802取回第二MIW。如果第一MIW不包含分支指令,则管线0可用于从指令缓冲器540中的第二MIW取回并解码第三子指令,不需要等待管线1完成执行其当前的子指令。类似地,如果第一MIW不包含分支指令,则一旦第二子指令完成其所有迭代,管线1便可用于从指令缓冲器540中的第二MIW取回并解码第四子指令,不需要等待管线0完成执行其当前子指令的所有迭代。管线中的子指令执行因此可以在分支之间异步地继续,并且仅当子指令之间存在依赖性时,执行才被同步。
此处使用的术语只是为了描述特定的实施例并且并非旨在作为本发明的限制。如此处所使用的,单数形式“一”、“一个”和“该”旨在同样包括复数形式,除非上下文明确地另有所指。还将理解,当在此说明书中使用时,术语“包括”和/或“包含”指定了声明的特征、整数、步骤、操作、元素和/或组件的存在,但是并不排除一个或多个其他特征、整数、步骤、操作、元素、组件和/或其组合的存在或增加。
以下的权利要求中的对应结构、材料、操作以及所有功能性限定的装置或步骤的等同替换,旨在包括任何用于与在权利要求中具体指出的其它单元相组合地执行该功能的结构、材料或操作。所给出的对本发明的描述其目的在于示意和描述,并非是穷尽性的,也并非是要把本发明限定到所表述的形式。对于所属技术领域的普通技术人员来说,在不偏离本发明范围和精神的情况下,显然可以作出许多修改和变型。对实施例的选择和说明,是为了最好地解释本发明的原理和实际应用,使所属技术领域的普通技术人员能够明了,本发明可以有适合所要的特定用途的具有各种改变的各种实施方式。
而且,所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是—但不限于—电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括例如在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括—但不限于—电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括—但不限于—无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的各个方面的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
以上参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article ofmanufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
Claims (24)
1.一种用于在裸露管线处理元件中链接数据的方法,所述方法包括:
将多指令字分隔成第一子指令和第二子指令;
在所述裸露管线处理元件中接收所述第一子指令和所述第二子指令;
在第一时间发出所述第一子指令;
在不同于所述第一时间的第二时间发出所述第二子指令,所述第二时间被偏移以考虑所述第二子指令对来自所述第一子指令的第一结果的依赖性;
由第一管线在第一时钟周期执行所述第一子指令;
由所述第一管线将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送,所述第一管线和第二管线位于不同的寄存器文件空间内;
由所述第二管线在所述第二时钟周期接收所述第二子指令;以及
由所述第二管线在所述第二时钟周期执行所述第二子指令,所述执行基于经由所述链接总线接收到所述第一结果。
2.根据权利要求1的方法,其中将所述多指令字分隔成所述第一子指令和所述第二子指令进一步包括:由编译器将所述多指令字分隔成所述第一子指令和所述第二子指令。
3.根据权利要求2的方法,其中将所述多指令字分隔成所述第一子指令和所述第二子指令进一步包括:在所述第二管线在所述第二时钟周期执行所述第二子指令之前,插入无操作指令以便由所述第二管线在所述第一时钟周期执行,并且其中所述第一管线在所述第二时钟周期期间执行所述第一子指令的第二索引。
4.根据权利要求1的方法,其中发出所述第一子指令包括接收具有目的地字段的子指令,该目的地字段指示所述第二管线具有所述第一子指令的所述第一结果作为输入。
5.根据权利要求4的方法,其中发出所述第二子指令包括接收具有源字段的子指令,该源字段指示所述第二子指令具有来自所述第一管线的所述第一结果作为输入。
6.根据权利要求1的方法,其中分隔所述多指令字进一步包括将所述多指令字分隔成所述第一子指令、所述第二子指令和第三子指令;以及
所述方法还包括:
由所述第二管线将在第三时钟周期执行所述第二子指令的第二结果传送到与第三管线相连的所述链接总线,所述第三时钟周期对应于所述第二管线中的锁存管线级的总数;
在所述第三时钟周期接收所述第三子指令,所述第三时钟周期位于所述第二时钟周期之后;以及
由所述第三管线基于经由所述链接总线接收到所述第二结果而执行所述第三子指令。
7.根据权利要求1的方法,其中分隔所述多指令字进一步包括将所述多指令字分隔成所述第一子指令、所述第二子指令和第三子指令;
所述方法还包括:
在第三时钟周期接收所述第三子指令,所述第三时钟周期在所述第一时钟周期之后并且在所述第二时钟周期之前;
由第三管线执行所述第三子指令;
由所述第三管线将在第三时钟周期执行所述第三子指令的第二结果传送到与所述第三管线相连的所述链接总线,所述第三时钟周期对应于所述第三管线中的锁存管线级的总数;并且
其中由所述第二管线基于经由所述链接总线接收到所述第一结果而执行所述第二子指令进一步包括:基于经由所述链接总线接收到所述第一结果和第二结果而执行所述第二子指令。
8.一种用于在裸露管线处理元件中链接数据的系统,所述系统包括:
位于不同寄存器文件空间内的第一管线和第二管线,所述系统被配置为执行一种方法,所述方法包括:
将多指令字分隔成第一子指令和第二子指令;
在所述裸露管线处理元件中接收所述第一子指令和所述第二子指令;
在第一时间发出所述第一子指令;
在不同于所述第一时间的第二时间发出所述第二子指令,所述第二时间被偏移以考虑所述第二子指令对来自所述第一子指令的第一结果的依赖性;
由第一管线在第一时钟周期执行所述第一子指令;
由所述第一管线将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送,所述第一管线和第二管线位于不同的寄存器文件空间内;
由所述第二管线在所述第二时钟周期接收所述第二子指令;以及
由所述第二管线在所述第二时钟周期执行所述第二子指令,所述执行基于经由所述链接总线接收到所述第一结果。
9.根据权利要求8的系统,其中将所述多指令字分隔成所述第一子指令和所述第二子指令进一步包括:由编译器将所述多指令字分隔成所述第一子指令和所述第二子指令。
10.根据权利要求9的系统,其中将所述多指令字分隔成所述第一子指令和所述第二子指令进一步包括:在所述第二管线在所述第二时钟周期执行所述第二子指令之前,插入无操作指令以便由所述第二管线在所述第一时钟周期执行,并且其中所述第一管线在所述第二时钟周期期间执行所述第一子指令的第二索引。
11.根据权利要求8的系统,其中发出所述第一子指令包括接收具有目的地字段的子指令,该目的地字段指示所述第二管线具有所述第一子指令的所述第一结果作为输入。
12.根据权利要求11的系统,其中发出所述第二子指令包括接收具有源字段的子指令,该源字段指示所述第二子指令具有来自所述第一管线的所述第一结果作为输入。
13.根据权利要求8的系统,其中分隔所述多指令字进一步包括将所述多指令字分隔成所述第一子指令、所述第二子指令和第三子指令;以及
所述方法还包括:
由所述第二管线将在第三时钟周期执行所述第二子指令的第二结果传送到与第三管线相连的所述链接总线,所述第三时钟周期对应于所述第二管线中的锁存管线级的总数;
在所述第三时钟周期接收所述第三子指令,所述第三时钟周期位于所述第二时钟周期之后;以及
由所述第三管线基于经由所述链接总线接收到所述第二结果而执行所述第三子指令。
14.根据权利要求8的系统,其中分隔所述多指令字进一步包括将所述多指令字分隔成所述第一子指令、所述第二子指令和第三子指令;
所述方法还包括:
在第三时钟周期接收所述第三子指令,所述第三时钟周期在所述第一时钟周期之后并且在所述第二时钟周期之前;
由第三管线执行所述第三子指令;
由所述第三管线将在第三时钟周期执行所述第三子指令的第二结果传送到与所述第三管线相连的所述链接总线,所述第三时钟周期对应于所述第三管线中的锁存管线级的总数;并且
其中由所述第二管线基于经由所述链接总线接收到所述第一结果而执行所述第二子指令进一步包括:基于经由所述链接总线接收到所述第一结果和第二结果而执行所述第二子指令。
15.一种用于在裸露管线处理元件中链接数据的方法,所述方法包括:
在所述裸露管线处理元件的指令缓冲器中接收多指令字,所述多指令字包括第一子指令和第二子指令;
由第一管线接收所述第一子指令;
由第二管线接收所述第二子指令,所述第一管线和第二管线位于不同的寄存器文件空间内;
由所述第一管线在第一时钟周期执行所述第一子指令;
在所述第一时钟周期暂停执行所述第二子指令,所述第二子指令依赖于来自所述第一子指令的第一结果;
由所述第一管线将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送;以及
由所述第二管线在所述第二时钟周期执行所述第二子指令,所述执行基于经由所述链接总线接收到所述第一结果。
16.根据权利要求15的方法,其中所述第二子指令包括源字段,该源字段指示所述第二子指令具有所述第一结果作为操作数,其中所述第二管线基于读取所述源字段而暂停执行所述第二子指令。
17.根据权利要求16的方法,其中所述第一子指令包括目的地字段,该目的地字段指示所述第二管线要接收所述链接总线上的所述第一结果。
18.根据权利要求15的方法,其中所述第二管线在所述第一时钟周期期间不执行任何指令。
19.根据权利要求15的方法,其中所述第一管线在所述第二时钟周期期间执行所述第一子指令的第二索引。
20.一种用于在裸露管线处理元件中链接数据的系统,所述系统包括:
指令缓冲器、位于不同寄存器文件空间内的第一管线和第二管线,所述系统被配置为执行一种方法,所述方法包括:
在所述裸露管线处理元件的指令缓冲器中接收多指令字,所述多指令字包括第一子指令和第二子指令;
由第一管线接收所述第一子指令;
由第二管线接收所述第二子指令,所述第一管线和第二管线位于不同的寄存器文件空间内;
由所述第一管线在第一时钟周期执行所述第一子指令;
在所述第一时钟周期暂停执行所述第二子指令,所述第二子指令依赖于来自所述第一子指令的第一结果;
由所述第一管线将执行所述第一子指令的所述第一结果传送到与所述第一管线和第二管线相连的链接总线,在位于所述第一时钟周期之后且与所述第一管线中的锁存管线级的总数对应的第二时钟周期执行所述传送;以及
由所述第二管线在所述第二时钟周期执行所述第二子指令,所述执行基于经由所述链接总线接收到所述第一结果。
21.根据权利要求20的系统,其中所述第二子指令包括源字段,该源字段指示所述第二子指令具有所述第一结果作为操作数,其中所述第二管线基于读取所述源字段而暂停执行所述第二子指令。
22.根据权利要求21的系统,其中所述第一子指令包括目的地字段,该目的地字段指示所述第二管线要接收所述链接总线上的所述第一结果。
23.根据权利要求20的系统,其中所述第二管线在所述第一时钟周期期间不执行任何指令。
24.根据权利要求20的系统,其中所述第一管线在所述第二时钟周期期间执行所述第一子指令的第二索引。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/795,435 US9250916B2 (en) | 2013-03-12 | 2013-03-12 | Chaining between exposed vector pipelines |
US13/795,435 | 2013-03-12 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104049937A true CN104049937A (zh) | 2014-09-17 |
Family
ID=51502863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410078424.XA Pending CN104049937A (zh) | 2013-03-12 | 2014-03-05 | 裸露向量管线之间的链接 |
Country Status (2)
Country | Link |
---|---|
US (2) | US9250916B2 (zh) |
CN (1) | CN104049937A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017088458A1 (zh) * | 2015-11-24 | 2017-06-01 | 中国科学院计算技术研究所 | 流水级运算装置、数据处理方法及片上网络芯片 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10318427B2 (en) * | 2014-12-18 | 2019-06-11 | Intel Corporation | Resolving memory accesses crossing cache line boundaries |
US10216430B2 (en) | 2015-07-01 | 2019-02-26 | Cavium, Llc | Local ordering of instructions in a computing system |
GB2540939B (en) * | 2015-07-31 | 2019-01-23 | Advanced Risc Mach Ltd | An apparatus and method for performing a splice operation |
US11294688B2 (en) | 2017-06-16 | 2022-04-05 | Drivenets Ltd. | Parallel information processing on multi-core computing platforms |
CN109117184A (zh) | 2017-10-30 | 2019-01-01 | 上海寒武纪信息科技有限公司 | 人工智能处理器及使用处理器执行平面旋转指令的方法 |
CN107861757B (zh) * | 2017-11-30 | 2020-08-25 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
US10664287B2 (en) * | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US11990137B2 (en) | 2018-09-13 | 2024-05-21 | Shanghai Cambricon Information Technology Co., Ltd. | Image retouching method and terminal device |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993008526A1 (en) * | 1991-10-21 | 1993-04-29 | Intel Corporation | Cross coupling mechanisms for microprocessor instructions using pipelining systems |
GB9412439D0 (en) * | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction pipelining |
US20040181651A1 (en) * | 2003-03-11 | 2004-09-16 | Sugumar Rabin A. | Issue bandwidth in a multi-issue out-of-order processor |
CN101201734A (zh) * | 2006-12-13 | 2008-06-18 | 国际商业机器公司 | 预解码用于执行的指令的方法及装置 |
CN101907984A (zh) * | 2009-08-07 | 2010-12-08 | 威盛电子股份有限公司 | 指令处理方法以及其所适用的超纯量管线微处理器 |
CN101965554A (zh) * | 2008-03-11 | 2011-02-02 | 高通股份有限公司 | 选择性地提交已执行指令的结果的系统和方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6237082B1 (en) * | 1995-01-25 | 2001-05-22 | Advanced Micro Devices, Inc. | Reorder buffer configured to allocate storage for instruction results corresponding to predefined maximum number of concurrently receivable instructions independent of a number of instructions received |
US6076154A (en) * | 1998-01-16 | 2000-06-13 | U.S. Philips Corporation | VLIW processor has different functional units operating on commands of different widths |
DE19859389C1 (de) * | 1998-12-22 | 2000-07-06 | Systemonic Ag | Verfahren zur Ansteuerung von Funktionseinheiten in einem Prozessor und Prozessoranordnung zur Durchführung des Verfahrens |
US7340590B1 (en) * | 2003-12-11 | 2008-03-04 | Sun Microsystems, Inc. | Handling register dependencies between instructions specifying different width registers |
WO2005111793A2 (en) * | 2004-05-13 | 2005-11-24 | Koninklijke Philips Electronics N.V. | Run-time selection of feed-back connections in a multiple-instruction word processor |
US7668979B1 (en) * | 2005-03-25 | 2010-02-23 | Tilera Corporation | Buffering data in a parallel processing environment |
US20070083736A1 (en) * | 2005-10-06 | 2007-04-12 | Aravindh Baktha | Instruction packer for digital signal processor |
US7805577B1 (en) * | 2006-04-14 | 2010-09-28 | Tilera Corporation | Managing memory access in a parallel processing environment |
US8127114B2 (en) * | 2007-03-28 | 2012-02-28 | Qualcomm Incorporated | System and method for executing instructions prior to an execution stage in a processor |
US9135005B2 (en) * | 2010-01-28 | 2015-09-15 | International Business Machines Corporation | History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties |
-
2013
- 2013-03-12 US US13/795,435 patent/US9250916B2/en not_active Expired - Fee Related
- 2013-08-14 US US13/966,408 patent/US9400656B2/en active Active
-
2014
- 2014-03-05 CN CN201410078424.XA patent/CN104049937A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993008526A1 (en) * | 1991-10-21 | 1993-04-29 | Intel Corporation | Cross coupling mechanisms for microprocessor instructions using pipelining systems |
GB9412439D0 (en) * | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction pipelining |
EP0689130A1 (en) * | 1994-06-21 | 1995-12-27 | STMicroelectronics Limited | Computer instruction pipelining |
US20040181651A1 (en) * | 2003-03-11 | 2004-09-16 | Sugumar Rabin A. | Issue bandwidth in a multi-issue out-of-order processor |
CN101201734A (zh) * | 2006-12-13 | 2008-06-18 | 国际商业机器公司 | 预解码用于执行的指令的方法及装置 |
CN101965554A (zh) * | 2008-03-11 | 2011-02-02 | 高通股份有限公司 | 选择性地提交已执行指令的结果的系统和方法 |
CN101907984A (zh) * | 2009-08-07 | 2010-12-08 | 威盛电子股份有限公司 | 指令处理方法以及其所适用的超纯量管线微处理器 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017088458A1 (zh) * | 2015-11-24 | 2017-06-01 | 中国科学院计算技术研究所 | 流水级运算装置、数据处理方法及片上网络芯片 |
Also Published As
Publication number | Publication date |
---|---|
US20140281403A1 (en) | 2014-09-18 |
US9250916B2 (en) | 2016-02-02 |
US20140281386A1 (en) | 2014-09-18 |
US9400656B2 (en) | 2016-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104049937A (zh) | 裸露向量管线之间的链接 | |
Fang et al. | swdnn: A library for accelerating deep learning applications on sunway taihulight | |
TWI803030B (zh) | 可中斷及可重啟矩陣乘法指令、處理器、方法和系統 | |
US9104532B2 (en) | Sequential location accesses in an active memory device | |
US9632778B2 (en) | Gather/scatter of multiple data elements with packed loading/storing into /from a register file entry | |
TWI731892B (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
KR20230100755A (ko) | 벡터 계산 유닛 | |
CN109564508A (zh) | 处理器的事务寄存器文件 | |
CN103810125A (zh) | 有源存储器件聚集、分散和过滤 | |
JP6306729B2 (ja) | ストアをソート及びリタイアする命令及びロジック | |
WO2017048662A1 (en) | Predicated read instructions | |
CN103810111A (zh) | 有源存储器件中的地址生成的方法及其处理元件 | |
TW201723817A (zh) | 用於取得多重向量元素操作之指令及邏輯 | |
CN107925420A (zh) | 用于经优化压缩比的异构压缩架构 | |
CN106575284A (zh) | 用于内核模块的多核存储器数据记录器 | |
TW201729077A (zh) | 用於設置多重向量元素操作之指令及邏輯 | |
CN110419030A (zh) | 测量非均匀存储器访问(numa)系统内按节点的带宽 | |
CN108351785A (zh) | 用于部分减少操作的指令和逻辑 | |
TW201723815A (zh) | 用於偶數與奇數向量取得操作之指令及邏輯 | |
CN108475192A (zh) | 分散减少指令 | |
CN108369517A (zh) | 聚合分散指令 | |
CN104008021A (zh) | 针对多数据体系结构的精确的异常信号发送 | |
US9569211B2 (en) | Predication in a vector processor | |
US9575755B2 (en) | Vector processing in an active memory device | |
KR102145457B1 (ko) | 방향 인디케이터 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140917 |