CN111381883A - 多线程处理器中的指令高速缓存 - Google Patents
多线程处理器中的指令高速缓存 Download PDFInfo
- Publication number
- CN111381883A CN111381883A CN201910559689.4A CN201910559689A CN111381883A CN 111381883 A CN111381883 A CN 111381883A CN 201910559689 A CN201910559689 A CN 201910559689A CN 111381883 A CN111381883 A CN 111381883A
- Authority
- CN
- China
- Prior art keywords
- thread
- instruction
- repeat
- threads
- processor
- 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
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
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- 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, look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline, 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1028—Power efficiency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
一种处理器,包括:用于执行并发线程的桶型线程执行单元,以及在并发线程之间共享的重复高速缓存。处理器的指令集包括采用重复计数操作数的重复指令。当重复高速缓存不被要求,并且在第一线程中执行重复指令时,将来自第一线程的代码部分高速缓存到重复高速缓存中,改变重复高速缓存的状态以将其记录为被要求,并且执行高速缓存的代码多次。然后,当在其他线程执行重复指令时,再次执行已经高速缓存的代码部分相应的次数,每次来自重复高速缓存。对于第一指令和其他指令中的每一个,相应指令中的重复计数操作数指定执行高速缓存的代码的次数。
Description
技术领域
本公开涉及一种指令高速缓存,用于在多线程处理器中高速缓存机器代码的一部分。
背景技术
对开发为特定应用而设计的处理器(例如图形处理器(GPU)及数字信号处理器(DSP))的兴趣正在上升。另一类最近受到关注的特定于应用的处理器是专用于机器智能应用的处理器,其被申请人命名为“IPU”(智能处理单元)。这些处理器可以被采用为例如加速器处理器,该加速器处理器布置为执行主机分配的工作,例如训练或帮助训练知识模型,例如神经网络,或者执行或帮助执行基于这种模型的预测或推断。
机器智能算法是基于对“知识模型”执行迭代更新,这可以由多个互连节点的图形表示。每个节点表示其输入的函数。一些节点接收对图形的输入,一些接收来自一个或多个其他节点的输入,而一些节点的输出形成其他节点的输入,一些节点的输出提供图形的输出(在一些情况下,给定节点甚至可能具有以下全部:对图形的输入、来自图形的输出和对其他节点的连接)。此外,由一个或多个相应参数(例如权重)对每个节点的函数进行参数化。在学习级期间,目标是基于经验输入数据集,找到各个参数的值,使得图形作为整体针对可能输入范围而生成期望的输出。用于这样做的各种算法在本领域中是已知的,例如基于随机梯度下降(stochastic gradient descent)的反向传播算法(back propagationalgorithm)。在基于输入数据的多次迭代中,逐渐调整参数以减少它们的误差,并且因此图形收敛于解(solution)。在随后的阶段,学习的模型然后可以用于对在给定的指定输入集的情况下对输出进行预测,或者在给定的指定输出集的情况下对输入(原因)进行推断。
每个节点的实现将涉及数据的处理,并且图形的互连对应于要在节点之间交换的数据。通常,每个节点的至少一些处理可以独立于图形中的一些或所有其他节点来执行,因此大的图形显露出巨大的并发(concurrency)和/或并行(parallelism)的机会。
因此,设计为用于机器智能应用的处理器可包括对并发执行多个程序线程的支持。这种支持通常包括用于每个线程的相应上下文寄存器组,其中每组用于保持要并发执行的多个线程中的相应一个的程序状态(“上下文”(context))。保持在给定的线程的上下文寄存器中的程序状态通常包括该线程的程序计数器、记录线程的状态(例如暂停、运行等)的一个或多个控制状态寄存器,以及多个操作数寄存器,包括算术操作数寄存器,用于暂时保持相应线程的算术指令用于操作和输出的值。不同并发线程通过不同的相应执行时隙中的共同执行流水线在时间上交错,每个时隙仅使用不同的相应一组上下文寄存器的寄存器。
在另一方式中,设计为用于机器智能的处理器可包括多个并行执行单元,每个包括单独的流水线(即,真正的并行,与相当于交错的并发相反)。处理器可被划分为瓦片阵列,每个包括其自己的执行单元和由该执行单元使用的存储器,从而在同一芯片上或甚至多个芯片上实现并行处理器模块的阵列。处理器甚至还可以将这布置与并发方式结合,即,从而包括多个瓦片的阵列,其中每个瓦片配置为运行多个并发线程。
发明内容
本文认识到,可能发生需要多个不同线程运行同一代码的情况。示例在可以机器学习应用中发生,其中每个线程执行不同相应节点的处理。在这情况下,本文认识到,一些节点事实上可能执行一些相同的计算。如果该代码不用由所有这些节点的线程从存储器独立地获取,将会节省功耗。在不同并发过程包括一些或所有相同操作的其他应用中,可能发生类似的问题。
根据本文公开的一方面,提供了一种处理器,包括:执行单元,其配置为执行指令集中定义的指令类型的实例,其中该执行单元是配置为运行多个并发线程的桶型线程执行单元,每个并发线程在重复序列的交错时隙的不同的相应一个中运行;和具有相关状态的重复高速缓存,该相关状态记录重复高速缓存当前是否被其中一个线程要求。指令集中定义的指令类型包括采用重复计数操作数的重复指令,该执行单元配置为:a)当根据所述状态重复高速缓存当前不被要求,并且重复指令的相应实例在第一个相应的所述线程中执行时,将来自第一线程的代码部分高速缓存到重复高速缓存中,修改所述状态以将重复高速缓存记录为被要求,以及执行所述代码部分相应的次数,每个连续的重复取自重复高速缓存,和b)当根据所述状态重复高速缓存当前被要求,并且然后作为任何其他相应的所述线程的一部分,执行重复指令的另一个实例,直至所述状态之后被重置以再次将重复高速缓存记录为不被要求时,执行已经高速缓存的代码部分相应的次数,每次来自重复高速缓存。对于第一指令和其他指令中的每一个,相应指令中的重复计数操作数指定执行代码部分的相应次数,该重复计数操作数能够为执行代码部分的相应次数指定多个正整数值中的任何一个。
因此,本公开的处理器有利地提供了一种机构(mechanism),透过该机构,不仅第一线程可以基于重复高速缓存重用其自己的代码多次,而且其他线程还可以重用已经由第一线程高速缓存的同一代码,而不用独立地从存储器获取该同一代码。
在实施例中,所述代码部分可以是跟随第一线程中的重复指令的实例之后的部分。
在实施例中,重复指令可采用重复大小操作数,用于指定所述代码部分的大小,其中所述代码部分可从跟随第一线程中的重复指令的实例之后的预定点运行至由第一线程中的重复指令的相应实例的大小操作数定义的后续点。
重复大小操作数可以就跟随所述预定点之后的单独指令的数量而言,或者就跟随所述预定点之后的指令束的数量(每束包括多个指令,例如每个指令两个或四个指令)而言来指定尺寸。
在实施例中,重复计数操作数可附加地能够采用零值,其中如果重复计数是零,则重复指令使执行单元跳过执行相应线程中的代码部分,这包括第一线程的情况。
在实施例中,如果重复计数是一,则重复指令可使执行单元执行代码部分,作为相应线程的一部分,仅一次而没有重复。
在实施例中,重复计数操作数可以是立即操作数,和/或重复大小操作数可以是立即操作数。
在实施例中,重复计数操作数可通过参考从中读取执行代码部分的相应次数的寄存器来指定该相应次数,和/或重复大小操作数可通过参考从中读取大小的寄存器来指定大小。
在实施例中,处理器可包括硬件机构,用于:一旦第一线程和其他线程中的至少一个已经完成执行高速缓存的代码部分其相应的次数,则自动地重置所述状态以将重复高速缓存再次记录为不被要求。
在实施例中,该机构可配置为在第一线程已经完成执行高速缓存的代码部分其相应的次数时,自动地重置所述状态。
替代地,该机构可配置为在第一线程和其他线程全部已经完成执行高速缓存的代码部分其相应的次数时,自动地清除对重复高速缓存的要求。
重复高速缓存的记录其是否被要求的状态可以例如实现为重复高速缓存或执行单元的内部状态(内部电路中的一个或多个锁存器(latch)),或者替代地它可以在寄存器文件中的寄存器(例如,监督者或第一线程的其中一个上下文寄存器,见下文)中实现。
在一些情况下,可能期望多个不同的线程运行同一代码,但以不同的数据操作。同样,示例可以在机器学习应用中发生。例如,再次考虑每个线程执行不同的相应节点的处理的情况。事实证明,许多节点实际上可以包括相同的过程但是作用于其自己的相应输入数据,例如,其中相关的节点表示完全相同的函数,但在图形中具有不同的输入连接(边缘)。
因此,在实施例中,处理器可包括多组上下文寄存器,每组布置为保持相应一个并发线程的程序状态;并且执行单元可配置为:响应于第一线程和其他线程中的每一个中的重复指令,执行同一所述代码部分,但以一个或多个相应线程自己的相应上下文寄存器组上保持的一个或多个相应操作数值操作。
在实施例中,所述并发线程可包括多个工作者线程,并且执行单元还可布置为至少在一些时间运行监督者子程序,该监督者子程序包括至少一个配置为管理工作者线程的监督者线程。
在实施例中,对于每个可以并发执行的工作者线程,上下文寄存器可包括相应一组上下文寄存器,并包括布置为保持监督者子程序的程序状态的额外上下文寄存器组。
在实施例中,监督者子程序可布置为通过最初在所有时隙中运行来开始,然后通过将监督者子程序最初在其中运行的一些或所有时隙中的每一个放弃给相应的工作者线程,从而启动工作者线程。
在实施例中,指令集可包括运行指令,该运行指令作为监督者子程序的一部分执行时,导致其中执行运行指令的时隙被放弃给其中一个工作者线程,使得工作者线程取代监督者子程序在该时隙中启动。
在实施例中,指令集可包括退出指令,该退出指令在作为其中一个工作者线程的一部分执行时,导致其中执行退出指令的时隙被交回给监督者子程序,使得监督者子程序取代工作者线程再次在该时隙中继续运行。
在一些情况下,可能出现如下的应用:线程可能事实上以一些相同的操作数值操作,但还以特定于单独线程的一些其他操作数操作。示例可以是作为卷积的一部分执行的向量或矩阵乘法,由此每个线程中的指令将共同权重集(在线程之间共享)乘以特定于单独线程的输入数据。这种情况的一个特定示例可以在卷积神经网络中发生,其中许多节点实际上包括相同的权重但具有不同的连接。考虑例如这样的场景:每个线程配置为执行神经网络中不同的相应节点的处理,例如卷积共同权重内核(kernel)与相应的输入数据以检测特定特征。在这些情形下,提供允许给定算术指令以线程之间共享的一个或多个共同权重操作数和特定于单独相应线程的一个或多个操作数的组合操作的机构是有利的。问题绝不是特定于神经网络的,并且可能出现在任何最终使用一些共享操作数值和一些线程特定操作数的应用中。
因此,在实施例中,所述代码部分中的至少一个指令可以是以下面各项的组合操作的类型:i)来自相应上下文寄存器组中的至少一个寄存器的至少操作数值,和ii)来自共同于工作者线程的共同操作数寄存器组中的至少一个寄存器的至少一个操作数值。
在实施例中,共享的寄存器文件组可配置为使得只有监督者子程序可以将值写入共同寄存器组,而工作者线程可能仅能够从共同寄存器组读取。
根据本发明的另一方面,提供了一种体现在计算机可读存储上的计算机程序,包括配置为在任何前述发明概念所述的处理器上运行的代码,其中代码包括所述线程,至少一些线程包括重复指令的实例,其布置为使得至少一个线程重用由其他线程高速缓存于重复高速缓存中的代码部分。
根据本发明的另一方面,提供了一种方法,该方法包括通过执行单元在处理器上运行包括所述线程的程序,至少一些线程包括重复指令的实例,其布置为使得至少一个线程重用由其他线程高速缓存于重复高速缓存中的代码部分。
在实施例中,程序还可配置为根据本文公开的任何配置操作。
附图说明
为了协助理解本公开的实施例和示出可以如何实现这些实施例,将参考附图作为示例,其中:
图1是示例性多线程处理器的示意框图,
图2示意性地示出了交错时隙的方案,
图3示意性地示出了在多个交错的时隙中运行的监督者线程和多个工作者线程,
图4是示出根据实施例的示例性处理器的更多细节的示意框图,
图5是包括组成处理器的阵列的处理器的示意框图,
图6是用于机器智能算法的图形的示意图,和
图7是示出根据本文公开的实施例的示例性重复高速缓存的示意框图。
具体实施方式
图1示出了根据本公开实施例的处理器4的示例。处理器4包括采用桶形线程处理单元形式的多线程处理单元10,以及本地存储器11(即,在多瓦片阵列的情况下在同一瓦片上,或者在单一处理器芯片的情况下在同一芯片上)。桶形线程处理单元是一种多线程处理单元,其中流水线的执行时间被划分为重复序列的交错时隙,每个都可以由给定的线程拥有。这还可以称为并发执行,将在稍后更详细地讨论。存储器11包括指令存储器12和数据存储器22(其可以在不同的可寻址存储器单元或同一可寻址存储器单元的不同区域中实现)。指令存储器12存储将由处理单元10执行的机器代码,而数据存储器22存储以执行的代码操作的数据和由执行的代码输出的数据(例如,作为这些操作的结果)。
存储器12存储程序的多个不同线程,每个线程包括用于执行特定任务的相应一系列指令。注意,本文所引用的指令是指机器代码指令,即处理器指令集的基本指令之一的实例,由单一操作码和零个或更多个操作数组成。在实施例中,程序包括多个工作者线程,以及可构造为一个或多个监督者线程的监督者子程序。这些将在稍后更详细地讨论。
多线程处理器是能够通常以并发方式并排执行多个程序线程的处理器。并发执行指线程共享共同执行流水线(或至少流水线的共同部分),并且不同线程通过重复周期中不同的交错时隙中的这个相同的共享执行流水线交错。由于隐藏流水线延迟的机会增加,这提高了性能。处理器包括共同于多个不同线程的一些硬件(例如共同指令存储器、数据存储器和/或执行单元);但是为了支持多线程,处理器还包括一些特定于每个线程的专用硬件。
对于至少每个可以并发执行的线程,专用硬件包括单独上下文寄存器组26,即,周期中每个时隙一组。当谈到多线程处理器时,“上下文”指的是相应一个被并排执行的线程的程序状态(例如程序计数器值、状态和当前操作数值)。上下文寄存器指的是用于表示相应线程的这种程序状态的相应寄存器。寄存器文件中的寄存器与通用存储器的不同之处在于:寄存器地址被固定为指令字(instruction word)中的位(bit),而存储器地址可以通过执行指令来计算。
在处理单元10内,来自指令存储器12的多个不同的线程可以通过单一执行流水线13交错(尽管在整个程序的任何给定的时间点,通常只有存储在指令存储器中的总线程的子集可以交错)。多线程处理单元10包括多个上下文寄存器组26,每组26布置为表示不同的相应一个可以并发执行的线程的状态(上下文)。多线程处理单元10还包括共同于并发执行的线程的共享执行流水线13,以及调度器24,用于以交错方式(例如轮循(round robin)方式)通过共享流水线调度并发线程以便执行。处理单元10连接到共同于多个线程的共享指令存储器12,以及也共同于多个线程的共享数据存储器22。
执行流水线13包括获取级14、解码级16和执行级18,该执行级18包括执行单元,该执行单元可以执行算术和逻辑操作、地址计算、加载和存储操作,以及其他操作,如指令集架构所定义。
每个上下文寄存器组26包括相应的一个或多个控制寄存器,其至少包括相应线程的程序计数器(PC)(用于跟踪线程当前正在执行的指令地址),并且在实施例中还有一个或多个控制状态寄存器(CSR)组,其记录相应线程的当前状态(例如它当前正在运行还是暂停)。每个上下文寄存器文件组26还包括相应的操作数寄存器组,用于临时保持由相应线程执行的指令的操作数,即,在执行时,相应线程的指令的操作码定义的操作用以操作或从其产生的值。每组寄存器26可实现在一个或多个寄存器文件中。
获取级14可以访问每个上下文的程序计数器(PC)。对于每个相应的线程,获取级14从程序存储器12中的下一个地址获取该线程的下一个指令,如程序计数器所指示。程序计数器自动地递增每个执行周期,除非由分支指令分支。然后,获取级14将获取的指令传递给解码级16以进行解码,然后解码级16将解码的指令的指示(indication)连同指令中所指定的任何操作数寄存器的解码地址一起传递给执行单元18,从而执行指令。执行单元18可以访问操作数寄存器和控制状态寄存器,它可以将其用于基于解码的寄存器地址执行指令,例如在算术指令的情况下(例如通过加、乘、减或除两个操作数寄存器中的值,并将结果输出到相应线程的另一个操作数寄存器中)。或者,如果指令定义了存储器访问(加载或存储),则执行单元18的加载/存储逻辑根据指令将来自数据存储器的值加载到相应线程的操作数寄存器中,或者将来自相应线程的操作数寄存器的值存储到数据存储器22中。
连接获取级14以在调度器24的控制下从指令存储器12中获取要执行的指令。调度器24配置为控制获取级14在重复序列的时隙中依次从并发执行线程集中的每一个获取指令,从而将流水线13的资源划分为多个时间上交错的时隙,如将在稍后更详细地讨论。例如,调度方案可以是轮循或加权轮循。以这种方式操作的处理器的另一个术语是桶形线程处理器。
图2示出了由调度器24实现的交错方案的示例。这里根据轮循方案交错并发线程,由此在方案的每个轮次内,轮次被分为时隙序列S0、S1、S2......SJ-1(例如J=4,或J=6),每个时隙用于执行相应的线程。通常,每个时隙是一个执行周期长,并且不同的时隙是均匀的大小,尽管在所有可能的实施例中不一定如此,例如加权轮循方案也是可能的,由此一些线程在每个执行轮次中比其他线程获得更多循环。通常,桶形线程可以采用偶数轮循或加权的轮循调度,其中在后一种情况下,加权可以是固定或自适应的。
然后,不管每次执行轮次的序列,重复这种模式,每一轮次包括每个时隙的相应实例。因此,请注意,本文所指的时隙指序列中的重复分配位置,而不是序列的给定重复中时隙的特定实例。换句话说,调度器24将流水线13的执行周期分配到多个时间交错(时分多路复用)的执行信道中,其中每个包括重复时隙序列中的相应时隙的重现。在所示的实施例中,有四个时隙,但这仅用于说明目的,其他数量也是可能的。例如,在一个优选实施例中,实际上有六个时隙。
在实施例中,对于J个(在示出的示例中J=3,但这不是限制性的)可以并发执行的线程中的每一个,上下文寄存器26具有相应的工作者上下文寄存器组CX0...CX(J-1),以及一个额外的监督者上下文寄存器文件CXS。工作者上下文寄存器文件保持工作者线程的上下文,并且监督者上下文寄存器文件保持监督者线程的上下文。注意,在实施例中,监督者上下文与每个工作者具有不同数量的寄存器。因此,处理单元10包括比时隙数量多一个的上下文寄存器文件26,即它支持比它能够进行桶形线程的交错时隙的数量多一个的上下文。
工作者上下文CX0...CXJ-1中的每一个用于表示当前分配给J个(例如4个)执行时隙S0...SJ-1之一的多个工作者线程中的相应一个的状态,用于执行程序员所期望的任何特定于应用的计算任务(再次注意,这可能只是存储在指令存储器12中的程序的工作者线程总数的子集)。额外的上下文CXS用于表示″监督者线程″(SV)的状态,其角色是至少在以下意义上协调工作者线程的执行:在整个程序中的哪一点在时隙S0、S1、S2...中的哪一个中分配要执行哪个工作者线程W。可选地,监督者线程可具有其他″监视者″或协调责任,例如执行外部交换或屏障同步。注意,当然所示J=4的个案只是用于说明目的的一个示例性实现。例如,在另一个实现中,J=6(6个时隙、6个工作者上下文和一个监督者上下文)。
参考图3,在实施例中,监督者线程SV在交错执行时隙的方案中本身不具有其自己的时隙。工作者也是这样,因为工作者线程的时隙分配是灵活定义的。相反,每个时隙都有其自己的上下文寄存器组,用于存储工作者上下文,其在时隙被分配给工作者时由工作者使用,但在时隙被分配给监督者时不被使用。当给定的时隙被分配给监督者时,该时隙反而使用监督者的上下文寄存器文件CXS。注意监督者总是可以访问其自己的上下文,而没有工作者能够拥有监督者上下文寄存器文件CXS。
监督者线程SV具有在任何和所有时隙S0...S3(或更一般地S0...SJ-1)中运行的能力。调度器24配置成:当程序作为整体开始时,通过将监督者线程分配给所有时隙来开始,即,使得监督者SV开始时在所有S0...SJ-1中运行。但是,向监督者线程提供了一种机构,用于在某个后续点(直接或者在执行一个或多个监督者任务之后)将从中监督者线程正在运行的每个时隙暂时放弃给相应一个工作者线程,例如图3所示的示例中的初始工作者W0...W3(或更一般地W0...WJ-1)。这通过监督者线程执行运行指令来实现,该运行指令至少采用指令存储器12中的工作者线程的地址作为操作数。工作者线程是可以彼此并发运行的代码部分,每个表示要执行的一个或多个相应计算任务。
运行指令作用于调度器24,从而将当前时隙(该指令本身在该时隙中被执行)放弃给由操作数指定的工作者线程。注意,在运行指令中隐含的是,在其中执行该指令的时隙正被放弃(在机器代码指令的上下文中,隐含指不需要操作数来指定这点----从操作码本身隐含地理解)。因此,交出的时隙是其中监督者执行运行指令的时隙。
监督者线程SV在一个或多个其他时隙中的每一个中执行类似的操作,以将其一些或全部时隙分配给工作者线程W0...WJ-1中的不同的相应工作者线程(从指令存储器12中较大组的可能工作者线程中选择)。一旦它对最后时隙这样做,监督者就会被暂停(后来当工作者W将其中一个时隙交还时,将从它停下来的地方继续)。因此,监督者线程SV能够将不同的工作者线程分配给不同交错执行时隙S0...SJ-1(例如,如图所示J=4,或J=6),每个工作者线程执行一个或多个任务。当监督者线程确定是时候运行工作者线程时,它使用运行指令将该工作者分配给其中执行运行指令的时隙。
在一些实施例中,指令集还包括运行指令的变型:“全部运行”(run-all)。这个指令用于一起启动多于一个工作者的集,全部都执行相同的代码。在实施例中,这在处理单元的时隙S0...S3(或更一般地S0...S(J-1))的每一个中启动工作者。
一旦启动,当前分配的工作者线程W0...WJ-1中的每一个继续执行在由相应的运行指令指定的代码中定义的一个或多个计算任务。在此结束时,相应的工作者线程然后将其中它正在运行的时隙交给监督者线程。这是通过在相应工作者线程中执行退出指令来实现的。退出指令作用于调度器24,从而将当前时隙(该指令本身在该时隙被执行)交回监督者线程。然后,作为响应,调度器24继续在该时隙中运行监督者。
图4示出处理器4的更多示例性细节,包括执行单元18和上下文寄存器26的细节。对于监督者上下文和M个工作者上下文的每个,上下文寄存器26包括相应的主要寄存器文件(MRF)26M。对于至少每个工作者上下文,上下文寄存器还包括相应的辅助寄存器文件(ARF)26A。上下文寄存器26还包括共同的权重寄存器文件(WRF)26W,所有并发执行的工作者线程可以访问该共同的权重寄存器文件以从其读取。WRF可以与监督者上下文相关联,因为监督者线程是唯一可以写入WRF的线程。对于每个监督者和工作者上下文(未示出),上下文寄存器26还可包括相应控制状态寄存器组。执行单元18包括加载-存储单元(LSU)55、整数算术逻辑单元(IALU)56和浮点算术单元(FPU)59。
在J个交错时隙S0...SJ-1中的每一个中,调度器24控制获取级14将相应线程的至少一个指令从指令存储器11获取到对应于当前时隙的J个指令缓冲器(未示出)中的相应一个中。在实施例中,每个时隙是处理器的一个执行周期,尽管不排除其他方案(例如加权的轮循)。在处理器4的每个执行周期中(即为程序计数器提供时钟的处理器时钟的每个周期),获取级14视乎实现方式,获取单一指令或小“指令束”(例如二指令束或四指令束)。然后,经由解码级16将每个指令发布到LSU 55、IALU 56或FPU 59之一,这分别视乎指令(根据其操作码)是存储器访问指令、整数算术指令,还是浮点算术指令。在实施例中,LSU 55和IALU 56使用来自MRF 26M的寄存器执行其指令,其中MRF 26M内的特定寄存器由指令的操作数指定。FPU 59使用ARF 26A和WRF 26W中的寄存器执行操作,其中ARF内的特定寄存器由指令的操作数指定。在实施例中,WRF中的寄存器可以在指令类型中是隐含的(即,对于该指令类型是预定的)。
每个工作者线程上下文具有其自己的主要寄存器文件(MRF)26M和辅助寄存器文件(ARF)26A的实例(即,对于每个桶型线程时隙具有一个MRF和一个ARF)。本文关于MRF或ARF描述的功能应理解为以每个上下文为基础而操作。然后,在实施例中,线程之间共享单一共享权重寄存器文件(WRF)。每个线程仅可以访问其自己的上下文26的MRF和ARF。然而,所有当前运行的工作者线程可以访问共同WRF。因此,WRF提供由所有工作者线程使用的共同权重集。在实施例中,只有监督者可以写入WRF,而工作者仅可以从WRF读取。
处理器4的指令集包括至少一种加载指令,其操作码在执行时使LSU 55从数据存储器22加载数据到其中执行加载指令的线程的相应ARF 26A中。ARF内目的地的位置由加载指令的操作数指定。加载指令的另一个操作数指定相应MRF 26M中的地址寄存器,其保持指针,该指针指向数据存储器22中从其加载数据的地址。处理器4的指令集还包括至少一种存储指令,其操作码在执行时使LSU 55从其中执行存储指令的线程的相应ARF存储数据到数据存储器22。ARF中存储的源的位置由存储指令的操作数指定。存储指令的另一个操作数指定MRF中的地址寄存器,其保持指针,该指针指向数据存储器22中存储数据的地址。一般而言,指令集可包括独立的加载和存储指令类型,和/或至少一种加载-存储指令类型,其将一个或多个加载操作和/或一个或多个存储操作结合在单一指令中。
处理器4的指令集还包括用于执行算术操作的一种或多种算术指令。例如,这些可以包括加、乘指令、布林(Boolean)逻辑指令等。每个算术指令采用:一个或多个源操作数,其指定相应线程的一个寄存器文件26中的一个或多个源寄存器;和一个或多个目的地操作数,其指定相应线程的一个寄存器文件26中的一个或多个目的地寄存器。当执行时,算术指令以来自一个或多个源寄存器的一个或多个源操作数值执行算术操作,并将结果放在目的地寄存器中。通过一个或多个先前的加载指令或加载-存储指令将源操作数值加载到源操作数寄存器中。通过一个或多个后续的存储指令或加载-存储指令从目的地寄存器储存结果。算术指令优选地包括一个或多个浮点算术指令,其一个或多个源操作数值是浮点值,并且其一个或多个结果是浮点值。浮点算术指令由FPU 59执行。在实施例中,FPU 59配置为对于算术指令的源寄存器和目的地寄存器使用ARF 26A。即,隐含(预定)的是,源操作数和目的地操作数指定ARF内的寄存器位置。在实施例中,指令集还可包括由IALU 56执行的一个或多个整数算术指令。在实施例中,它们使用MRF 26M中的源寄存器和目的地寄存器。
根据本文公开的特定实施例,浮点算术指令可包括至少一种使用共同权重寄存器文件WRF 26W的浮点算术指令。这种指令采用至少一个操作数,该操作数指定其中执行算术指令的线程的相应ARF 26A中的对应算术操作的至少一个源。然而,算术指令的至少一个其他源在共同于所有工作者线程的共同WRF中。优选地,这个源在相关算术指令中是隐含的(即,对于这种算术指令是隐含的)。在机器代码指令的意义上,隐含是指不需要操作数来指定。即,在这情况下,WRF中的源的位置是操作码固有的(对于该特定操作码是预定的)。响应于操作码,FPU 59执行算术操作,如操作码所指定,该算术操作包括以线程的相应ARF中指定的源寄存器和WRF中的隐含源寄存器中的值操作。它还将算术操作的结果输出到线程的相应ARF中的目的地寄存器,其由算术指令的目的地操作数明确地指定。
可采用共同WRF 26W中的隐含源的算术指令的示例性类型可包括:一个或多个向量乘法指令类型、一个或多个矩阵乘法指令类型、一个或多个累加向量乘法指令类型和/或累加矩阵乘法指令类型(其将乘法的结果从指令的一个实例累加至下一个),和/或一个或多个卷积指令类型。例如,向量乘法指令类型可以将来自ARF 26A的明确输入向量乘以来自WRF的权重的预定向量;或者,矩阵乘法指令类型可以将来自ARF的明确输入向量乘以来自WRF的权重的预定矩阵。作为另一示例,卷积指令类型可以卷积来自ARF的输入矩阵与来自WRF的预定矩阵。具有对多个线程共同的共享权重寄存器文件WRF使每个线程能够将共同内核与其自己的相应数据相乘或卷积。这是有用的,因为这是机器学习应用中时常出现的情况,例如,其中每个线程表示神经网络中不同的节点,而共同内核表示正被搜索或训练的特征(例如,图像数据的区域或体积中的边缘或特定形状)。
在实施例中,WRF 26W中的值可以由监督者线程写入。监督者(其在实施例中通过在所有时隙S0...SM中运行来开始)首先执行一系列放置指令来将一些共同权重的值写入WRF中的预定位置中。然后,它执行运行指令(或全部运行指令)来在一些或所有时隙S0...SJ-1中启动相应的工作者。然后,每个工作者包括上面讨论的类型的一个或多个算术指令的一个或多个实例,从而以其加载到其相应ARF 26A中的相应输入数据执行对应的算术操作,但使用由监督者写入WRF26W中的共同权重。当每个线程完成其相应任务时,它执行退出指令以将其时隙交回给监督者。当所有启动的线程已经完成其相应的任务,监督者可以将新的值写入WRF,并启动新线程集(或启动新集以继续使用WRF中的现有值)。
应当理解,标签“主要”、“辅助”和“权重”不一定是限制性的。在实施例中,它们可以是任何第一寄存器文件(每个工作者上下文)、第二寄存器文件(每个工作者上下文)和共享第三寄存器文件(例如监督者上下文的一部分,但所有工作者可访问)。ARF 26A和辅助执行单元18还可被称为算术寄存器文件和算术执行单元,因为它们用于算术指令(或者至少用于浮点算术指令)。MRF 26M和辅助执行单元18还可称为存储器地址寄存器文件和算术执行单元,因为它们其中一个用途是访问存储器。权重寄存器文件(WRF)26W有这样的名称,是因为它用于保持用于特定类型的算术指令的乘法权重,将在稍后更详细地讨论。例如,它们可以用于表示神经网络中节点的权重。从另一方面看,MRF可以称为整数寄存器文件,因为它用于保持整数操作数,而ARF可以称为浮点寄存器文件,因为它用于保持浮点操作数。然而,在替代实施例中,注意不一定为了这些不同的目的而将寄存器空间26划分成这些独立的寄存器文件。反而,通过主要和辅助执行单元执行的指令可能能够从同一共享寄存器文件中指定寄存器(在多线程处理器的情况下,每个上下文一个寄存器文件)。
在实施例中,处理器4可以与处理器和/或外部装置(例如网络接口或网络附加存储(NAS)设备)的一个或多个其他实例连接在一起。如图5所示,在实施例中,处理器4可以形成其中一个互连处理器瓦片的阵列6,每个瓦片运行较宽程序的一部分。因此,单独的处理器4(瓦片)形成较宽处理器或处理系统6的一部分。瓦片4可以经由互连子系统34连接在一起。瓦片4可以在同一芯片(即管芯)或不同芯片或其组合上实现(即,阵列可以由多个芯片形成,每个芯片包括多个瓦片4)。因此,互连系统34和交换接口51可以相应地包括内部(芯片上)互连机构和/或外部(芯片间)交换机构。
在多线程和/或多瓦片处理器或系统的一个示例性应用中,在多个线程和/或瓦片4运行的程序包括机器智能算法,例如配置为训练神经网络和/或基于神经网络进行推断的算法。在这些实施例中,每个工作者线程,或在每个瓦片上运行的程序的一部分,或每个瓦片上的每个工作者线程用于表示神经网络(一种图形)中不同的节点102;并且,线程和/或瓦片之间的通信相应地表示图形中节点102之间的边缘104。这在图6中说明。
机器智能从学习级开始,其中机器智能算法学习知识模型。该模型包括互连节点(即顶点)102和边缘(即链路)104的图形。图形中的每个节点102具有一个或多个输入边缘和一个或多个输出边缘。一些节点102的一些输入边缘是一些其他节点的输出边缘,从而将节点连接在一起以形成图形。此外,一个或多个节点102的一个或多个输入边缘作为整体形成对图形的输入,而一个或多个节点102的一个或多个输出边缘作为整体形成图形的输出。有时,给定的节点甚至可能具有以下所有这些:对图形的输入、图形的输出和对其他节点的连接。每个边缘104传送值或更常传送张量(n维矩阵),这些值分别形成在其输入边缘和输出边缘上提供给节点102和从节点102提供的输入和输出。
每个节点102表示在其输入边缘上接收的一个或多个输入的函数,该函数的结果是在输出边缘上提供的输出。由一个或多个相应参数(有时称为权重,尽管它们不需要一定是乘法权重)对每个函数进行参数化。通常,由不同节点102表示的函数可以是不同形式的函数和/或可以通过不同参数来参数化。
此外,每个节点的函数的一个或多个参数中的每一个的特征在于相应的误差值。此外,相应的条件可以与每个节点102的参数中的误差相关联。对于表示由单一参数参数化的函数的节点102,条件可以是简单阈值,即如果误差在指定的阈值内,则满足条件,但如果误差超出阈值,则不满足条件。对于由多于一个相应参数参数化的节点102,对于该节点102达到了可接受的误差水平的条件可能更复杂。例如,仅当该节点102的每个参数都落入相应阈值内时,才可以满足条件。作为另一示例,可以组合相同节点102的不同参数的误差来定义组合度量,并且在组合度量的值落入指定阈值的条件下可以满足条件,但是如果组成度量值超出阈值,则不满足条件(或者反之亦然,取决于度量的定义)。无论条件如何,这都给出了节点的参数中的误差是否低于某一可接受程度或水平的度量。通常,可以使用任何合适的度量。条件或度量对于所有节点可以是相同的,或者对于不同的相应节点可以是不同。
在学习级中,算法接收经验数据,即,表示对图形的输入的不同可能组合的多个数据点。随着接收到越来越多的经验数据,算法基于经验数据逐渐调整图形中各节点102的参数,以试图最小化参数中的误差。目标是找到参数的值,使得图形的输出尽可能接近给定输入的期望输出。由于图形作为整体倾向于这种状态,因此图形会被形容为收敛。在适当程度的收敛之后,图形可以用于执行预测或推断,即预测某些给定输入的结果或推断某些给定输出的原因。
学习级可以采用多种不同的形式。例如,在监督方法中,输入经验数据采用训练数据的形式,即对应于已知输出的输入。对于每个数据点,算法可以调整参数,使得输出更接近地匹配给定输入的已知输出。在随后的预测级中,图形然后可以用于将输入查询映射到近似预测输出(或者如果进行推断,则反之亦然)。其他方法也是可能的。例如,在无监督的方法中,不存在每个输入数据一个参考结果的概念,而是改为将机器智能算法留下来在输出数据中识别其自己的结构。或者在强化方法中,算法针对输入经验数据中的每个数据点试验至少一个可能的输出,并且被告知该输出是正还是负(以及潜在地它是正还是负的程度),例如赢或输、奖励或惩罚等等。在许多试验中,算法可以逐渐调整图形的参数,以便能够预测将导致正结果的输入。用于学习图形的各种方法和算法对于机器学习领域的技术人员来说是已知的。
根据本文所公开的技术的示例性应用,每个工作者线程被编程为执行与机器智能图形(例如神经网络)中相应的单独一个节点102相关联的计算。在这种情况下,节点102之间的至少一些边缘104对应于线程之间的数据交换,并且一些可以涉及瓦片之间的交换。在每个瓦片4多个线程的多瓦片布置6的情况下,每个瓦片4运行图形的子图。每个子图包括包含一个或多个监督者线程的监督者子程序,以及表示相应子图的节点102的工作者线程集。
图7示出了根据本发明的实施例的有利重复高速缓存机构的示例性实现方式。这可以在机器学习中找到应用,但不限于这些应用。该机构基于在处理器4的指令集中提供重复指令(“rpt”)。重复指令的功能配置为使得不仅a)执行它的第一线程高速缓存其自己代码的一部分,并重复该代码部分,而且b)下一个执行重复指令的线程也会重复从第一线程高速缓存的代码部分。因此,同一代码可以在多个线程重用和复制(duplicate),而不需要从存储器12重新获取。在实施例中,同一代码在多个不同的线程中重用,每个以其自己相应的寄存器文件26(例如其自己相应的ARF 26A)中其自己相应的操作数值操作。
发明人识别出机器学习和神经网络领域中出现在线程之间重用代码的机会,其中每个线程表示图形(例如神经网络)中不同的相应节点,而一些节点执行一些或所有相同的计算过程。例如,表示一些节点的线程可以以其自己相应的输入数据执行一个或多个相同的操作。事实上,在一些情况下,一些节点的线程可以彼此以一些相同的操作数值进行相同的操作,但又以一些特定于单独线程的其他操作数进行相同的操作。示例可以是作为卷积的一部分执行的向量或矩阵乘法,由此每个线程中的指令将共同权重集(在线程之间共享)乘以特定于单独线程的输入数据。这可以在卷积神经网络中发生,其中许多节点实际上包括相同的权重但具有不同的连接。每个线程可配置为执行神经网络中不同的相应节点的处理,例如卷积共同权重内核与相应的输入数据以检测特定特征。
在这些情况下,提供如下所述的机构是有利的:允许在一个或多个其他线程中重用来自一个线程的代码部分,而每个线程不用从存储器中独立地重新获取它,从而在线程执行一些或所有相同操作的情况下减少功耗。例如,这可以用于以下情况:相同的操作由每个线程以线程之间共享的一个或多个共同权重操作数与特定于单独相应线程的一个或多个操作数的组合执行。
在这些情况中重复高速缓存的好处是,从存储器12获取指令将消耗大量能量。例如,由于神经网络等应用中的许多内部循环(loop)(例如那些循环是用于卷积的)都是小的(少量指令或束),并且由于工作者执行这些相同的循环是常见的,这提供了通过在瓦片4内实现小、本地和节能的高速缓存31来节省功率的机会。因此,对于同一代码,所有工作者可以使用较节能的高速缓存,而不是耗能地对存储器进行获取。
如图7所示,根据本公开,处理器4包括至少包含重复高速缓存31的指令高速缓存。重复高速缓存31包括临时存储区域33,用于依次临时保持多个高速缓存的指令。重复高速缓存31还具有记录高速缓存状态的相关装置35,该状态至少包括高速缓存当前是否由其中一个线程“要求”(或“拥有”)的记录。这一点的含义很快就会显现出来。状态35可以实现为重复高速缓存31的内部状态(即,采用一个或多个内部锁存器形式的硬件电路)。替代地,状态35可以实现为寄存器文件中的寄存器,例如上下文(例如监督者上下文)之一的控制状态寄存器28。
流水线13的指令获取级14可以操作为从指令存储器12或重复高速缓存31获取指令。在任何给定时间使用哪个指令源取决于重复指令及其操作数,稍后将更详细地讨论。
如图7所示,可以并发执行的J个工作者线程中的每一个被分配给多个J组上下文寄存器26(CX0...CXJ-1)中不同的相应一个,每组布置为保持其相应的工作者的程序状态。在实施例中,提供了额外的上下文寄存器26(CXS)的组来保持监督者线程的程序状态。每组上下文寄存器包括相应的程序计数器(PC)21,用于保持相应线程的当前PC值。程序计数器指定线程的相应代码中当前从其获取指令的点。每组上下文寄存器还包括操作数寄存器32,用于临时保持相应线程的指令用于操作的操作数。每个工作者线程的操作数寄存器32可以包括相应线程的MRF 26M和ARF 26A。监督者的操作数寄存器32可包括WRF 26W。每组上下文寄存器还可包括相应的一个或多个控制状态寄存器(CRS)28,用于记录相应线程的状态,例如它当前是否被暂停。
对于每个线程,流水线13通过根据其相应的程序计数器(PC)获取和执行来自指令存储器12的指令来开始。在优选实施例中,重复指令(rpt)采用以下语法(syntax):
Rpt$size,$count
即,它采用两个操作数:重复大小操作数,其指定重复代码的一部分的大小;以及重复计数操作数,其指定该部分要重复的次数。在实施例中,这些操作数通过参考寄存器来指定其相应的值。即,直接地包括在指令的操作数字段中的值识别寄存器$size或$count(例如在相应线程的MRF 26M中),分别从中获取实际重复大小或重复计数值。然而,替代地,它们其中一个或两个都可以是立即操作数(即,重复大小和/或重复计数值直接编码到重复指令的相关操作数字段中)。
在操作中,执行单元18和获取级14配置为响应于重复指令以下述方式操作。执行rpt$size,$count的第一线程将要求重复高速缓存31。这可被描述为锁定重复高速缓存31,或“拥有”该重复高速缓存。实际上,这代表执行单元18设置重复高速缓存31的状态35,以记录它已被要求。之后,执行重复指令的任何后续工作者不能要求重复高速缓存,直至状态35被重置(见下文)。
当工作者执行rpt,该指令通知指令获取器逻辑14在重复高速缓存中查找指令获取。在第一工作者中执行重复指令将使执行单元18在代码中定位重复指令之后立即用该工作者的后续N个指令或指令束填充重复高速缓存31,其中N在$size中被指定(除非$size大于重复高速缓存的容量,在这种情况下,只有重复主体(repeat body)的第一部分存储在重复缓存31中)。执行单元18还在那些指令被高速缓存时第一次执行它们。随后,在N个指令的一部分结束之后,立即使获取级14返回并开始从指令高速缓存31的存储区域33获取代码,然后从那里重复高速缓存的代码部分$count中指定的次数。这可能涉及分支相应线程的程序计数器PC 21。在最后一次重复结束后,程序从紧接着高速缓存的代码部分之后的点继续。
如果重复指令的另一个实例作为第二个工作者线程的一部分执行,而重复高速缓存根据其状态35仍然被要求(锁定),则重复指令的执行使执行单元18执行相对于第二线程不同的功能。也就是说,控制获取级14以开始从指令高速缓存31的存储区域31获取高速缓存的代码部分(从第一线程高速缓存的代码部分)。然后它将重复执行这高速缓存代码部分,但是次数由第二工作者线程的相应$count操作数指定。
因此,重复指令提供零开销(zero-overhead)循环工具,使得后续序列的指令或执行束(重复主体)重复执行。重复计数可以提供为立即数或无符号寄存器源值。重复主体的大小以完整数指令或执行束表示,并由立即数提供(例如,重复主体大小为(立即数+1)执行)。
注意:重复高速缓存中的查找仍然可以通过两种方式失败。第一个是:第二工作者已经执行了重复指令的不同实例(驻留在存储器中的不同位置),因此重复循环的主体不在高速缓存31中。在这种情况下,指令获取逻辑14将转为从存储器12中获取。第二种方式是:重复主体的长度超过重复高速缓存的容量,在这种情况下,重复主体的尾端将不会在重复高速缓存中找到,并且仍然必须对指令存储器12进行获取。
重复高速缓存31提供小的(大多数)架构上不可见的指令高速缓存,旨在减少代码开销,从而减少例如高计算内核内部循环期间的功耗,特别是当多个工作者上下文执行相同任务时。高速缓存31在工作者上下文之间共享,并且在实施例中专门保留为仅高速缓存重复指令的实例的重复主体内的指令或束。
在实施例中,重复高速缓存的存储区域33包括多个独立的行(line),每个行的大小与指令(在单独指令发布的情况下)或指令束(在处理器4执行共同发布的指示束的情况下)的大小相同。每行可能有效或无效。所有行最初都是无效的。在实施例中,由于执行束在重复指令的重复主体内,所以这些束优选地也应在瓦片存储器中对齐(例如,8字节对齐)。
重复高速缓存31被锁定或解锁。当解锁时(初始状态),重复高速缓存被锁定是工作者线程(锁定上下文)执行重复指令的实例的副作用。如果在工作者上下文执行重复指令时已经锁定了重复高速缓存31,则在这方面不采取进一步的动作。
实现用于重置状态35的机构至少有两种可能性,从而可以再次释放重复高速缓存的要求(锁定)。
第一种可能性是:当拥有重复高速缓存的工作者线程执行重复循环中最后一个指令时,重复高速缓存31被解锁,所有行33被标为无效。任何其他并发使用重复高速缓存31的工作者上下文现在将从存储器12而不是重复高速缓存31获取代码。这需要记录哪些工作者线程(或者哪个上下文,或哪个时隙)要求指令高速缓存31(即,哪一个导致它被锁定)的装置。这可以实现为高速缓存31的内部状态或其中一个寄存器文件26的寄存器中的状态。
第二个优选的替代方案是为每个上下文(每个并发线程,或每个时隙)保持标志(flag)41。例如,这可以在相应上下文的其中一个控制状态寄存器28中实现。一旦锁定了重复高速缓存,则为每个使用(击中(hit))重复高速缓存的工作者线程设置标志。每当上下文在其重复循环中执行最后指令时,如果所设置的唯一标志是该线程拥有的标志(即,所有其他标志都是清空的),则重复高速缓存31被解锁。无论哪种方式,该线程拥有的标志41都被清除。即,当使用重复高速缓存的最后一个上下文完成其重复循环时,重复高速缓存31被解锁。
注意:在说哪个线程要求高速缓存31的情况下,这意味着哪个并发线程,即当前分配给时隙之一和相关联的上下文寄存器组26的并发线程。等效地,可以说上下文26(CX0...CXJ-1)中哪个要求高速缓存,或时隙S0...SJ-1中哪个要求高速缓存。本领域中的“上下文”有时也用作保持上下文(在程序状态的意义上)的寄存器组26或其中相应线程执行的时隙的简写;或者确实是线程、时隙、程序状态和上下文寄存器的整个布置。
锁定重复高速缓存31启动高速缓存填充操作。也就是说,当锁定时,执行在锁定上下文的重复主体头部的每个连续的执行指令或束会导致:i)单行被分配给该指令或束地址,ii)指令或执行束数据被写入所分配的行,以及iii)行被设置为有效。如果重复主体的大小大于重复缓存的容量,则仅缓存重复主体头部的执行束。
锁定时,当$count(锁定上下文)的值变为0(第一重置机构)或清除相关标志(第二重置机构)时,重复高速缓存将被解锁。对于所有工作者上下文,当$count为非零时(即,工作者正在执行重复主体),指令获取机构将检查是否存在分配给指令或执行束地址的有效行,并且在击中的情况下,使用高速缓存行的内容而不是从瓦片存储器进行获取。
在实施例中,如果重复计数最初为零,则重复指令将充当重复主体上的分支。否则,后续的重复主体执行束将被执行$count次数。
在执行共同发布指令的束的实施例中,与重复指令共同发布的任何指令仅执行一次,并且不是重复主体的一部分。
在实施例中,可能不允许执行重复主体内某些类型的指令。在这种情况下,尝试执行此类指令时将引发异常。
应当理解,仅通过示例方式描述了上述实施例。
例如,在替代实现方式中,重复指令的语法不一定需要重复大小操作数。相反,高速缓存部分的大小可以是固定的(隐含的)或由某些其他状态部分指定,例如,由监督者设置的重复高速缓存设置。另请注意,重复主体的大小不必与重复高速缓存的大小相匹配。
或者在更复杂的实现方式中,高速缓存的指令(重复主体)不一定需要在重复指令之后立即从指令或束开始。例如,相反,重复指令的语法可以允许指定重复主体的起点和终点。或者作为另一个示例,处理器可以以滚动方式连续地高速缓存最后M个指令,然后重复计数操作数使导致重复指令之前的最后N个指令被高速缓存。即,重复指令可以在循环的主体之后,而不是之前执行。
在进一步的替代或另外的变型中,处理器4不一定需要专用硬件机构41来重置对重复高速缓存31的要求(即,解锁重复高速缓存)。在替代实施方式中,这可以由监督者或工作者之一中的软件明确地重置,例如在实现为寄存器文件中的可写寄存器的情况下,通过执行放置指令以写入链接到重复高速缓存的寄存器,例如35。
此外,本公开的范围是上述架构,其中为监督者线程提供独立的上下文,或者其中监督者线程在时隙中运行然后将其时隙放弃给工作者。监督者可以改为使用通用上下文。或者,在另一布置中,监督者可以在其自己的专用时隙中运行。此外,实现方式不限于甚至具有监督者角色的特定一个线程。此外,本公开的范围不限于处理器4是瓦片阵列中的瓦片。在替代实施例中,处理器4可以例如是独立处理器或单芯片处理器。
实现方式不仅限于独立的MRF和ARF。它也不仅限于使用独立的WRF。通常,寄存器可以来自任何一个或多个寄存器文件,这些寄存器文件可以在不同的存储器访问和算术操作之间共享,或者是独立的。
此外,本公开的范围不限于机器学习应用。还有许多其他应用可能需要在线程之间重用代码以减少代码开销并因此提高代码密度。
一旦给出本文的公开内容,所公开技术的其他变型或用例对于本领域技术人员而言将变得显而易见。本公开的范围不由所描述的实施例来限定,而是仅由所附权利要求来限制。
Claims (20)
1.一种处理器,包括:
执行单元,其配置为执行指令集中定义的指令类型的实例,其中所述执行单元是配置为运行多个并发线程的桶型线程执行单元,每个并发线程在重复序列的交错时隙的不同的相应一个中运行;和
具有相关状态的重复高速缓存,所述相关状态记录重复高速缓存当前是否被其中一个线程要求;
其中所述指令集中定义的指令类型包括采用重复计数操作数的重复指令,所述执行单元配置为:
a)当根据所述状态重复高速缓存当前不被要求,并且重复指令的相应实例在第一个相应的所述线程中执行时,将来自第一线程的代码部分高速缓存到重复高速缓存中,修改所述状态以将重复高速缓存记录为被要求,以及执行所述代码部分相应的次数,每个连续的重复取自重复高速缓存,和
b)当根据所述状态重复高速缓存当前被要求,并且然后作为任何其他相应的所述线程的一部分,执行重复指令的另一个实例,直至所述状态之后被重置以再次将重复高速缓存记录为不被要求时,执行已经高速缓存的代码部分相应的次数,每次来自重复高速缓存;和
其中对于第一指令和其他指令中的每一个,相应指令中的重复计数操作数指定执行代码部分的相应次数,所述重复计数操作数能够为执行代码部分的相应次数指定多个正整数值中的任何一个。
2.如权利要求1所述的处理器,其中所述代码部分是跟随第一线程中的重复指令的实例之后的部分。
3.如权利要求2所述的处理器,其中所述重复指令采用重复大小操作数,用于指定所述代码部分的大小,并且其中所述代码部分从跟随第一线程中的重复指令的实例之后的预定点运行至由第一线程中的重复指令的相应实例的大小操作数定义的后续点。
4.如权利要求1、2或3所述的处理器,其中所述重复计数操作数附加地能够采用零值,并且如果重复计数是零,则重复指令使执行单元跳过执行相应线程中的代码部分,这包括第一线程的情况。
5.如权利要求1、2或3所述的处理器,其中如果重复计数是一,则重复指令使执行单元执行代码部分,作为相应线程的一部分,仅一次而没有重复。
6.如权利要求1、2或3所述的处理器,其中所述重复计数操作数是立即操作数,和/或所述重复大小操作数是立即操作数。
7.如权利要求1、2或3所述的处理器,其中:
所述重复计数操作数通过参考从中读取执行代码部分的相应次数的寄存器来指定所述相应次数,和/或
所述重复大小操作数通过参考从中读取所述大小的寄存器来指定所述大小。
8.如权利要求1、2或3所述的处理器,包括硬件机构,用于:一旦第一线程和其他线程中的至少一个已经完成执行高速缓存的代码部分其相应的次数,则自动地重置所述状态以将重复高速缓存再次记录为不被要求。
9.如权利要求8所述的处理器,其中所述机构配置为在第一线程已经完成执行高速缓存的代码部分其相应的次数时,自动地重置所述状态。
10.如权利要求8所述的处理器,其中所述机构配置为在第一线程和其他线程全部已经完成执行高速缓存的代码部分其相应的次数时,自动地清除对重复高速缓存的要求。
11.如权利要求1、2或3所述的处理器,包括多组上下文寄存器,每组布置为保持相应一个并发线程的程序状态;
其中所述执行单元配置为:响应于第一线程和其他线程中的每一个中的重复指令,执行同一所述代码部分,但以一个或多个相应线程自己的相应上下文寄存器组上保持的一个或多个相应操作数值操作。
12.如权利要求11所述的处理器,其中所述并发线程包括多个工作者线程,并且所述执行单元进一步布置为至少在一些时间运行监督者子程序,所述监督者子程序包括至少一个配置为管理工作者线程的监督者线程。
13.如权利要求12所述的处理器,其中对于每个可以并发执行的工作者线程,所述上下文寄存器包括相应一组上下文寄存器,并包括布置为保持监督者子程序的程序状态的额外上下文寄存器组。
14.如权利要求13所述的处理器,其中所述监督者子程序布置为通过最初在所有时隙中运行来开始,然后通过将监督者子程序最初在其中运行的一些或所有时隙中的每一个放弃给相应的工作者线程,从而启动工作者线程。
15.如权利要求14所述的处理器,其中所述指令集包括运行指令,所述运行指令作为监督者子程序的一部分执行时,导致其中执行运行指令的时隙被放弃给其中一个工作者线程,使得工作者线程取代监督者子程序在该时隙中启动。
16.如权利要求15所述的处理器,其中所述指令集包括退出指令,所述退出指令在作为其中一个工作者线程的一部分执行时,导致其中执行退出指令的时隙被交回给监督者子程序,使得监督者子程序取代工作者线程再次在该时隙中继续运行。
17.如权利要求11所述的处理器,其中所述代码部分中的至少一个指令是以下面各项的组合操作的类型:i)来自相应上下文寄存器组中的至少一个寄存器的至少一个操作数值,和ii)来自共同于工作者线程的共同操作数寄存器组中的至少一个寄存器的至少一个操作数值。
18.如权利要求17所述的处理器,其中:
所述并发线程包括多个工作者线程,并且所述执行单元进一步布置为至少在一些时间运行监督者子程序,所述监督者子程序包括至少一个配置为管理工作者线程的监督者线程;和
共享的寄存器文件组配置为使得只有监督者子程序可以将值写入共同寄存器组,而工作者线程只可以从共同寄存器组读取。
19.一种体现在计算机可读存储上的计算机程序,包括配置为在任何前述权利要求所述的处理器上运行的代码,其中所述代码包括所述线程,至少一些线程包括重复指令的实例,其布置为使得至少一个线程重用由其他线程高速缓存于重复高速缓存中的代码部分。
20.一种操作根据权利要求1至18中任一项配置的处理器的方法,所述方法包括通过执行单元在处理器上运行包括所述线程的程序,至少一些线程包括重复指令的实例,其布置为使得至少一个线程重用由其他线程高速缓存于重复高速缓存中的代码部分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1821229.0A GB2580316B (en) | 2018-12-27 | 2018-12-27 | Instruction cache in a multi-threaded processor |
GB1821229.0 | 2018-12-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111381883A true CN111381883A (zh) | 2020-07-07 |
CN111381883B CN111381883B (zh) | 2023-09-29 |
Family
ID=65364666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910559689.4A Active CN111381883B (zh) | 2018-12-27 | 2019-06-25 | 多线程处理器中的指令高速缓存 |
Country Status (7)
Country | Link |
---|---|
US (2) | US11567768B2 (zh) |
JP (1) | JP6918051B2 (zh) |
CN (1) | CN111381883B (zh) |
CA (1) | CA3040901C (zh) |
DE (1) | DE102019112301A1 (zh) |
FR (1) | FR3091362B1 (zh) |
GB (1) | GB2580316B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112379928A (zh) * | 2020-11-11 | 2021-02-19 | 海光信息技术股份有限公司 | 指令调度方法以及包括指令调度单元的处理器 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11314515B2 (en) | 2019-12-23 | 2022-04-26 | Intel Corporation | Instructions and logic for vector multiply add with zero skipping |
CN116090383A (zh) * | 2022-12-27 | 2023-05-09 | 广东高云半导体科技股份有限公司 | 实现静态时序分析的方法、装置、计算机存储介质及终端 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7178013B1 (en) * | 2000-06-30 | 2007-02-13 | Cisco Technology, Inc. | Repeat function for processing of repetitive instruction streams |
CN101038567A (zh) * | 2006-03-16 | 2007-09-19 | 国际商业机器公司 | 执行高速缓存线轮询操作的方法、系统和设备 |
DE102012222394A1 (de) * | 2011-12-14 | 2013-06-20 | Nvidia Corporation | Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden |
US20150220347A1 (en) * | 2014-02-06 | 2015-08-06 | Optimum Semiconductor Technologies, Inc. | Deterministic and opportunistic multithreading |
CN107003859A (zh) * | 2014-12-22 | 2017-08-01 | 森蒂彼得塞米有限公司 | 通过连续监控重复指令序列的运行时代码并行化 |
CN107980118A (zh) * | 2015-06-10 | 2018-05-01 | 无比视视觉技术有限公司 | 使用多线程处理的多核处理器设备 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60241136A (ja) | 1984-05-16 | 1985-11-30 | Mitsubishi Electric Corp | デ−タ処理装置 |
JPH06243036A (ja) * | 1993-02-12 | 1994-09-02 | Hitachi Ltd | キャッシュ制御システム |
JPH07160585A (ja) | 1993-12-13 | 1995-06-23 | Hitachi Ltd | 低電力データ処理装置 |
JP2926045B2 (ja) | 1997-06-18 | 1999-07-28 | 松下電器産業株式会社 | マイクロプロセッサ |
US6567895B2 (en) * | 2000-05-31 | 2003-05-20 | Texas Instruments Incorporated | Loop cache memory and cache controller for pipelined microprocessors |
US7065636B2 (en) | 2000-12-20 | 2006-06-20 | Intel Corporation | Hardware loops and pipeline system using advanced generation of loop parameters |
JP3796124B2 (ja) | 2001-03-07 | 2006-07-12 | 株式会社ルネサステクノロジ | スレッド間優先度可変プロセッサ |
GB0524720D0 (en) * | 2005-12-05 | 2006-01-11 | Imec Inter Uni Micro Electr | Ultra low power ASIP architecture II |
US7987347B2 (en) | 2006-12-22 | 2011-07-26 | Broadcom Corporation | System and method for implementing a zero overhead loop |
WO2008155834A1 (ja) | 2007-06-20 | 2008-12-24 | Fujitsu Limited | 処理装置 |
US8868888B2 (en) * | 2007-09-06 | 2014-10-21 | Qualcomm Incorporated | System and method of executing instructions in a multi-stage data processing pipeline |
US20120079303A1 (en) | 2010-09-24 | 2012-03-29 | Madduri Venkateswara R | Method and apparatus for reducing power consumption in a processor by powering down an instruction fetch unit |
JP2011070695A (ja) | 2010-12-03 | 2011-04-07 | Hitachi Ltd | プロセッサ |
JP2017228213A (ja) * | 2016-06-24 | 2017-12-28 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10241794B2 (en) | 2016-12-27 | 2019-03-26 | Intel Corporation | Apparatus and methods to support counted loop exits in a multi-strand loop processor |
JP6960479B2 (ja) | 2017-03-14 | 2021-11-05 | アズールエンジン テクノロジーズ ヂュハイ インク.Azurengine Technologies Zhuhai Inc. | 再構成可能並列処理 |
GB201717303D0 (en) | 2017-10-20 | 2017-12-06 | Graphcore Ltd | Scheduling tasks in a multi-threaded processor |
-
2018
- 2018-12-27 GB GB1821229.0A patent/GB2580316B/en active Active
-
2019
- 2019-02-15 US US16/276,895 patent/US11567768B2/en active Active
- 2019-04-23 CA CA3040901A patent/CA3040901C/en active Active
- 2019-05-10 DE DE102019112301.1A patent/DE102019112301A1/de active Pending
- 2019-06-07 FR FR1906121A patent/FR3091362B1/fr active Active
- 2019-06-19 JP JP2019113318A patent/JP6918051B2/ja active Active
- 2019-06-25 CN CN201910559689.4A patent/CN111381883B/zh active Active
-
2022
- 2022-03-11 US US17/654,449 patent/US20220197645A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7178013B1 (en) * | 2000-06-30 | 2007-02-13 | Cisco Technology, Inc. | Repeat function for processing of repetitive instruction streams |
CN101038567A (zh) * | 2006-03-16 | 2007-09-19 | 国际商业机器公司 | 执行高速缓存线轮询操作的方法、系统和设备 |
DE102012222394A1 (de) * | 2011-12-14 | 2013-06-20 | Nvidia Corporation | Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden |
US20150220347A1 (en) * | 2014-02-06 | 2015-08-06 | Optimum Semiconductor Technologies, Inc. | Deterministic and opportunistic multithreading |
CN107003859A (zh) * | 2014-12-22 | 2017-08-01 | 森蒂彼得塞米有限公司 | 通过连续监控重复指令序列的运行时代码并行化 |
CN107980118A (zh) * | 2015-06-10 | 2018-05-01 | 无比视视觉技术有限公司 | 使用多线程处理的多核处理器设备 |
Non-Patent Citations (2)
Title |
---|
DEIAN STEFAN ET AL.: ""Eliminating Cache-Based Timing Attacks with Instruction-Based Scheduling"" * |
张振华等: ""基于多核多线程处理器的网络设备设计与实现"" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112379928A (zh) * | 2020-11-11 | 2021-02-19 | 海光信息技术股份有限公司 | 指令调度方法以及包括指令调度单元的处理器 |
Also Published As
Publication number | Publication date |
---|---|
US20220197645A1 (en) | 2022-06-23 |
FR3091362A1 (fr) | 2020-07-03 |
CN111381883B (zh) | 2023-09-29 |
JP2020107306A (ja) | 2020-07-09 |
US20200210192A1 (en) | 2020-07-02 |
GB2580316B (en) | 2021-02-24 |
GB201821229D0 (en) | 2019-02-13 |
CA3040901C (en) | 2021-05-04 |
GB2580316A (en) | 2020-07-22 |
CA3040901A1 (en) | 2020-06-27 |
DE102019112301A1 (de) | 2020-07-02 |
JP6918051B2 (ja) | 2021-08-11 |
FR3091362B1 (fr) | 2023-04-21 |
US11567768B2 (en) | 2023-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102159730B1 (ko) | 멀티-스레드 프로세서에서의 태스크 스케줄링 | |
US5471593A (en) | Computer processor with an efficient means of executing many instructions simultaneously | |
US8935515B2 (en) | Method and apparatus for vector execution on a scalar machine | |
US20220197645A1 (en) | Repeat Instruction for Loading and/or Executing Code in a Claimable Repeat Cache a Specified Number of Times | |
KR102201935B1 (ko) | 로드-저장 명령 | |
US9811340B2 (en) | Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor | |
CN111381939B (zh) | 多线程处理器中的寄存器文件 | |
KR101730282B1 (ko) | 지연된 재구성된 프로그램 순서를 이용한 선택 로직 | |
CN105814538B (zh) | 用于仿真共享内存架构的支持浮点的流水线 | |
US10606641B2 (en) | Scheduling tasks in a multi-threaded processor | |
JP2020119504A (ja) | 分岐予測器 | |
CN106030517B (zh) | 用于仿真共享内存架构中的长延迟操作的架构 | |
CN117707625B (zh) | 支持指令多发的计算单元、方法及相应图形处理器 | |
CN117707625A (zh) | 支持指令多发的计算单元、方法及相应图形处理器 | |
Brondsema | Comparison of computer architectures and design of a multi-core solution for an industrial control application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |