并行处理器及其线程处理方法 技术领域
本发明涉及多线程处理领域, 更具体地说, 涉及一种并行处理器及其线程 处理方法。 背景技术
电子技术的发展对处理器提出越来越高的需求, 通常集成电路工程师通 过增加时钟速度、硬件资源以及特殊应用功能来为使用者提供更多或更好的性 能。 这种做法在一些应用场合, 特别是移动应用时并不是太恰当。 通常, 处理 器时钟的原始速度的提高并不能打***理器由于访问储存器及外设速度的限 制而带来的瓶颈。对于处理器而言,增加硬件需要大量的该处理器在使用中的 更高的使用效率, 由于 ILP (Ins t ruct ion Level Para l lei i sm)的缺少, 上述 增加硬件通常是不可能的。而使用特殊的功能模块又会带来对于该处理器应用 范围的限定以及对产品上市时间的拖延。特别是对于需要提供并行处理的处理 器, 上述问题将更为突出, 单独提高硬件性能, 例如增加时钟频率、 增加处理 器中核的数量, 虽然可以在一定程度上解决问题,但是可能带来成本及耗电量 的增加, 其代价太大, 其性价比不高。 发明内容
本发明要解决的技术问题在于, 针对现有技术的上述成本及耗电量的增 加, 其代价太大, 性价比不高的缺陷, 提供一种性价比比较高的并行处理器及 其线程处理方法。
本发明解决其技术问题所采用的技术方案是:构造一种并行处理器,包括: 多个线程处理引擎: 用于处理被分配给该线程处理引擎的线程,所述多个 线程处理引擎并行连接;
线程管理单元: 用于取得、 判断所述多个线程处理引擎的状态, 并将处于 等待队列中的线程分配到所述多个线程处理引擎中。
在本发明所述处理器中,还包括用于数据及线程緩沖、指令緩沖的内部存 在本发明所述处理器中,所述内部存储***包括用于对所述线程及数据进 行緩沖的数据及线程緩沖单元以及对指令进行緩沖的指令緩沖单元。
在本发明所述处理器中,所述多个线程处理引擎包括 4个并行的、相互独 立的算术逻辑运算单元以及与所述算术逻辑运算单元——对应的乘加器。
在本发明所述处理器中,所述线程管理器还包括用于配置线程的线程控制 寄存器, 所述线程控制寄存器包括: 用于表明任务程序的起始物理地址的起始 程序指针寄存器,用于表明一个线程的线程本地存储区域的起始地址的本地存 域起始基点寄存器以及用于设置该线程优先级、 运行模式的线程配置寄存器。
在本发明所述处理器中,所述线程管理器依据一个线程的输入数据状态以 及该线程的输出緩沖能力来确定是否激活该线程;所述被激活的线程数大于同 时运行的线程数。
在本发明所述处理器中,所述一个被激活的线程在不同的时间段在所述线 程管理器控制下运行在不同的线程处理引擎上。
在本发明所述处理器中,所述线程管理器通过改变所述线程处理引擎的配 置来改变所述被激活线程运行的线程处理引擎;所述配置包括所述起始程序指 针寄存器的值。
在本发明所述处理器中,还包括通过写入数据到中断寄存器中断线程的线 程中断单元,所述线程中断单元在其中断寄存器控制位被置位时控制所述内核 或其他内核中的线程中断。
在本发明所述处理器中,所述线程处理引擎、线程管理器以及内部存储系 统通过***总线接口与外接或内置的通用处理器以及外部存储***相连。
本发明还揭示了一种方法,一种在并行处理器中对线程进行并行处理的方 法, 包括如下步骤:
A ) 配置所述并行处理器中的多个线程处理引擎;
B )根据所述线程处理引擎状态及待处理线程队列状态, 将所述待处
理线程队列中的线程送入所述线程处理引擎;
C )所述线程处理引擎处理送入的线程, 使之运行。
在本发明所述的方法中, 所述步骤 A )进一步包括:
A1 )判断所述待处理线程的类型,并依据所述线程类型配置线程处理 引擎及该引擎所对应的本地存储区域。
在本发明所述的方法中, 所述步骤 C )进一步包括:
C1 )取得所述正在运行的线程的指令;
C2 )编译并执行所述线程的指令。
在本发明所述的方法中, 所述步骤 C1 ) 中, 每个周期取得一个线程处理 引擎所执行线程的指令,所述多个并行的线程处理引擎轮流取得其执行线程所 对应的指令。
在本发明所述的方法中,所述待处理线程模式包括数据并行模式、任务并 行模式以及并行多线程虚拟通道模式。
在本发明所述的方法中,当所述运行线程模式为并行多线程虚拟通道模式 时, 所述步骤 C )还包括: 当接收到一个线程的软件或外部中断请求时, 中断 所述线程并执行事先设置的该线程的中断程序。
在本发明所述的方法中,当所述运行线程模式为并行多线程虚拟通道模式 时, 所述步骤 C )还包括: 当任意一个正在运行的线程需要等待较长时间, 释 放所述线程占用的线程处理引擎资源,并将所述待处理线程队列中的一个线程 激活并送到所述线程处理引擎。
在本发明所述的方法中,当所述运行线程模式为并行多线程虚拟通道模式 时, 所述步骤 C )还包括: 当任意一个正在运行的线程执行完成, 释放所述线 程占用的线程处理引擎资源, 并将所述资源配置到其他正在运行的线程。
在本发明所述的方法中,通过改变所述线程处理引擎的配置来转换其处理 的线程, 所述线程处理引擎的配置包括其所对应的本地存储区域的位置。
所述待处理线程模式包括数据并行模式、任务并行模式以及并行多线程虚 拟通道模式。
实施本发明的并行处理器及其线程处理方法,具有以下有益效果: 由于在
一定程度上提高了硬件,使用多个并行的算术逻辑单元及其对应的核内存储系 统, 并且通过软件及线程管理单元对该处理器要处理的线程进行管理,使得该 多个算术逻辑单元在工作任务饱和时达到动态负载平衡,而在其任务不饱和时 关掉其中部分算术逻辑运算单元, 以节省其电能消耗。 因此, 可以花费较小的 代价来达到较高的性能, 其性价比较高。 附图说明
图 1 是本发明并行处理器及其线程处理方法实施例中该处理器的结构示 意图;
图 2是所述实施例中数据线程结构示意图;
图 3是所述实施例中任务线程结构示意图;
图 4是所述实施例中 MVP线程结构示意图;
图 5是所述实施例中 MVP线程结构示意图;
图 6是所述实施例中操作 MVP线程及操作模式结构示意图;
图 7是所述实施例中 MVP线程本地存储结构示意图;
图 8是所述实施例中指令输出结构示意图;
图 9是所述实施例中 MVP线程緩沖配置示意图;
图 10是所述实施例中线程的处理流程图。 具体实施方式
下面将结合附图对本发明实施例作进一步说明。
如图 1所示,在本实施例中,该并行处理器是一个并行多线程虚拟通道处 理器 (MVP, Mul t i-thread Vi r tua l P ipel ined s tream proces sor) , 所述处 理器包括线程管理及控制单元 1、 指令取得单元 2、 指令输出单元 3、 算术逻 辑单元 [3: 0] 4、 乘加器(Mul t iply- Add uni t ) [ 3: 0] 5、 特定功能单元 6、 寄 存器 7、 指令緩沖单元 8、 数据及线程緩沖单元 9、 存储器直接读取单元 10、 ***总线接口 11以及中断控制器 12; 其中, 线程管理及控制单元 1用于管 理、 控制当前已准备好的线程、 正在运行的线程等, 其分别与***总线接口
11、指令取得单元以及中断控制器 12等单元连接; 指令取得单元 2在上述线 程管理及控制单元 1的控制下,通过指令緩沖单元 8及***总线接口 11取得 指令, 并在线程管理及控制单元 1的控制下将取得指令输出到指令输出单元 3 , 同时, 上述指令取得单元 2还与上述中断控制器 12连接, 在中断控制器 12有输出时接受其控制, 停止取指令; 指令输出单元 3的输出通过并行的总 线与上述算术逻辑单元 [ 3: 0] 4、 乘加器 [ 3: 0] 5以及特定功能单元 6连接, 将 取得指令中的操作码及操作数分别根据其需要传送到上述 4 个算术逻辑单 元、 4个乘加器以及特定功能单元 6 中; 而上述算术逻辑单元 [ 3: 0] 4、 乘加 器 [ 3: 0] 5以及特定功能单元 6还分别通过总线与寄存器 7连接, 便于将其中 状态的变化情况及时写入上述寄存器 7 ; 寄存器 7又分别与上述算术逻辑单 元 [ 3: 0] 4、 乘加器 [ 3: 0] 5 以及特定功能单元 6连接(与上述连接不同 ), 便 于将其中状态变化(不是由上述三个单元引起的, 例如, 由软件直接写入的) 写入上述三个单元; 数据及线程緩沖单元 9连接在上述***总线接口 11上, 其通过上述***总线接口 11取得数据及指令, 并存储起来, 供其他单元(特 别是取指单元 2读取 ),数据及线程緩沖单元 9还分别与存储器直接读取单元 10、 算术逻辑单元 [ 3: 0] 4以及寄存器 7连接。 在本实施例中, 一个线程处理 引擎包括一个算术逻辑单元和一个乘加器, 因此, 在本实施例中, 就包括了 4个在硬件上并行的线程处理引擎。
在本实施例中, 上述 MVP核由便于被 OpenCL编译器将其由中间媒介转换 的标准工业指令集合实现。 MVP的实现通道包括 4个 ALU (算术逻辑单元)、 4 个 MAC (乘加器, Mul t ip l y-Add uni t )、 以及一个 128X32_b i t 的寄存器, 此 外, 还包括一个 64KB的指令緩沖单元, 一个 32KB的数据緩沖单元, 一个作为 线程緩沖器的 64KB的 SRAM, 以及一个线程管理单元。
MVP可以作为一个带有软件驱动层的 OpenCL器件,其支持 OpenCL定义的 两种并行计算模式,数据并行计算模式及任务并行计算模式。在处理数据并行 计算模式时, MVP核在一个工作组(work group ) 中能够最多处理 4个工作项 目(work i tem) , 这 4个工作项目被映射到 MVP核的 4个并行的线程。 在处理 任务并行计算模式时, MVP核能够最多处理 8个工作组, 每个工作组包括一个
工作项目。这 8个工作项目也被映射到 MVP核的 8个并行的线程,从硬件的角 度来看, 与数据并行模式没有不同。更为重要的是, 为达到最大的性价比, MVP 核还包括一种专有的模式, 即 MVP 线程模式, 在这种模式中, 可以将最多 8 个线程配置为 MVP线程模式, 这 8 个线程表现为专用芯片通道层次。 在上述 MVP模式中, 上述 8个线程都可以无中断地运用于不同的、 用于流处理或处理 流数据的内核中。 典型地, 在多种流处理运用中, 上述 MVP模式具有更高的性 价比。
多线程及其运用是 MVP 与其他处理器不同的重点之一, 其可以较为明确 地达成一个最终的较佳解决方案。在 MVP中, 多线程的目的如下: 提供 OpenCL 定义的任务并行和数据并行处理模式, 并提供针对流通道设计的、专有的功能 并行模式; 在 MVP中, 为达到最大硬件资源利用而采用的负载平衡; 减少依赖 于存储器、外设速度的延迟隐蔽能力。 为了发掘使用多线程的及其在性能上的 先进性, MVP去掉或减少过多的特殊硬件, 特别是为达到特殊应用而设置的硬 件。 对比单独提升硬件性能, 例如升高 CPU的时钟速率, MVP具有更好的通用 性及面对不同运用时的灵活性。
在本实施例中, MVP支持 3中不同的并行线程模式, 包括数据并行线程模 式、 任务线程并行模式以及 MVP并行线程模式, 其中, 数据并行线程模式用于 处理通过同一个内核的不同的流数据, 例如, 在 MVP内的同一个程序。 (参见 图 2 ), 数据在不同的时间到达, 其开始处理的时间也不同。 当这些线程运行 时, 即使处理他们的程序是同一个, 也处于不同的操作流程中。 由 MVP指令通 道的观点来看, 与操作不同的程序没有不同的地方, 例如, 不同的任务。 每个 被放到同一个线程的数据集将是一个自包含(self-conta ined ) 的最小集合, 例如, 不需要与别的数据集进行通讯。这就意味着数据线程不会被因与别的线 程通讯而中断。 每个数据线程表现为 OpenCL中的一个工作项目。 在图 2中, 包括对应于数据 0到数据 3的 4个线程,其分别是线程 0到线程 4 ( 201、 202、 203、 204 ), 超标量执行通道 206 , 线程緩沖单元 208 (即本地存储器), 以及 连接上述线程(数据 )与超标量执行通道 206的总线 205 , 连接上述超标量执 行通道 206与线程緩沖单元 208 (即本地存储器) 的总线 206。 如上所述, 在
数据并行模式下 , 上述 4个线程实际上是相同的 , 其数据是该线程在不同时间 的数据。其实质是将不同时间输入的同一个程序的数据在同一个时间处理。在 这种模式下, 上述本地存储器是作为一个整体参加上述处理的。
任务线程并发地运行在不同的内核上。参见图 3 ,在操作***的观点看来, 他们表现为不同的程序或不同的功能。 为得到更高的灵活性,任务线程的特性 完全上升到软件分类。每个任务运行在不同的程序上。任务线程不会被因与别 的线程通讯而中断。 每个任务线程表现为 OpenCL中具有一个工作项目的工作 组。 在图 3中, 包括与任务 0到任务 3对应的线程 0 301、 线程 1 302、 线程 2 303以及线程 3 304 , 这些任务分别通过 4个并行 I /O线 305与超标量执行 通道 306连接, 同时, 上述超标量执行通道 306还通过存储总线 307与本地存 储器连接, 该本地存储器此时被分为 4个部分, 分别是用于存储上述 4个线程 ( 301、 302、 303、 304 )所对应的数据的区域, 他们分别是对应于线程 0的区 域 308、 对应于线程 1的区域 309、 对应于线程 2的区域 310以及对应于线程 3的区域 311。上述每个线程( 301、 302、 303、 304 )分别在其对应的区域( 308、 309、 310、 311 ) 中读取数据。
由专用集成电路的观点来看, MVP线程表现为不同的功能通道层面。 这也 是其设计点及关键特性。 MVP 线程的每个功能层面都类似运行中的不同的内 核, 正如任务线程一样。 MVP线程的最大的特点是能够依据其输入数据状态及 输出緩沖的能力自动激活或关闭其本身。 MVP线程的自动激活或关闭其本身的 能力使得这种线程能够从当前正在执行的通道中移开已经完成的线程以及释 放硬件资源用于其它以激活的线程。这就提供了我们希望的负载平衡能力。 此 外, 还使得 MVP 线程可以激活比正在运行的线程更多的线程。 其支持最多 8 个已激活线程。 这 8个线程被动态管理, 最多 4个线程可以被运行, 而其他 4 个已激活线程则等待空闲的运行时段。 参见图 4、 图 5。 图 4示出了在 MVP模 式下线程与本地存储器之间的关系,其中,线程 0 401、线程 1 402、线程 2 403 和线程 3 404分别通过并行的 I/O连接线 405与超标量执行通道 406连接, 同 时, 这些线程(任务)还单独与本地存储器中被划分到该线程的区域( 407、 408、 409、 410 )连接, 在这些区域之间, 通过虚拟的 DAM引擎连接, 这些虚
拟的 DMA 引擎使得在需要的时候可以在上述被划分的区域之间快速转移其中 的数据; 此外, 这些被划分的区域分别与总线 411连接, 而该总线 411还与上 述超标量执行通道 406连接。图 5从另一个角度描述了在 MVP模式下的线程情 况。在图 5中, 包括 4个正在运行的线程, 即运行线程 0 501、运行线程 1 502、 运行线程 2 503以及运行线程 3 504 , 这 4个线程分别在上述 4个 ALU上运行, 其分别通过并行的 I /O线连接在超标量执行通道 505上; 同时,上述 4个正在 运行的线程分别与准备完毕的线程队列 507连接 (实际上, 上述 4个运行线程 就是由上述线程队列 507中取出的), 由上面的描述可知, 上述队列中排列有 已经准备好但是尚未运行的线程, 这些线程最多可以有 8个, 当然, 根据实际 情况,在其中可能也不足 8个;其中,这些准备好的线程可以是同一个内核(应 用程序, 图 5中的内核 1 508到内核 n 509 ) 的, 也可以不是, 在极端的情况 下, 这些线程可能是分别属于 8个不同的内核(应用程序)的, 当然, 实际情 况可能是其他数字, 例如, 可能是属于 4个应用程序, 而每个应用程序可能有 两个线程被准备(在线程的优先权相同的情况下)。 该队列 507中的线程是通 过图 5中的命令队列 509由外部的主机而来的。
此外, 如果一个特殊的耗时线程 ( t ime-consuming thread )在其循环緩 沖队列中后续一个线程有需求, 同一个线程(内核)可以在多个运行时间段之 间被启动。 这种情况下, 该同一个内核可以一次启动更多 (的线程), 以加快 在循环緩沖器中后续的数据处理。
上述线程的不同的执行模式的组合增加了 4个线程同时运行的机会,这是 一个较为理想的状态, 其最大限度地增加指令输出速率。
通过传递最好的负载平衡、最小的 MVP与主机 CPU之间的交互及任何数据 在 MVP及主机存储器之间的移动, MVP线程是最具性价比的配置。
对于在多任务或 /和多数据室全面利用硬件计算资源, 负载平衡是有效的 方法, MVP有两个途径管理负载平衡:一是利用软件使用其能用的任何方式(典 型地, 通过公共的 IPA )配置 4个激活的线程(在任务线程模式和 MVP线程模 式, 8 个线程被激活); 另一个途径是使用硬件在运行时间动态地更新、 检查 及调整正在运行的线程。在软件配置途径中,正如我们所知的大多数运用特性,
初始时就需要针对特殊的运用设置其静态的任务划分;而第二种方式要求硬件 具有在不同的运行时间情况下动态调节的能力。上述两种方式使得 MVP在最大 硬件利用率的情况下达到最大的指令输出带宽。而延时隐藏( latency hiding ) 则依赖于为保持 4输出速率的双输出能力。
MVP通过软件配置线程控制寄存器来配置 4个线程。每个线程包括一个寄 存器配置集合, 该集合包括 Star t ing—PC寄存器, Star t ing_GM_base寄存器, Star t ing_LM_base寄存器以及 Thread_cfg寄存器。 其中, Star t ing_PC寄存 器用于表示一个任务程序的开始物理位置; Star t ing_GM_base 寄存器用于表 示开始一个线程的线程本地存储器的基点位置; Star t ing_LM_base 寄存器用 于表示开始一个线程的线程全局存储器的基点位置 (仅限于 MVP 线程); 而 Thread_cfg寄存器用于配置线程, 该寄存器又包括: Running Mode位, 其为 0时表示普通, 为 1时表示优先; Thread_Pr i位: 设置线程的运行优先级( 0-7 级); Thread Types位: 其为 0时表示线程不可用, 为 1时表示是数据线程, 为 2时表示是任务线程, 为 3时表示是 MVP线程。
如果线程是数据线程或任务线程模式, 当线程被激活后, 线程将在下一个 周期进入运行状态; 如果线程是 MVP模式, 其线程緩沖及输入数据的有效性将 在每个周期被检查。 一旦他们已经准备好, 该被激活的线程进入运行状态。 一 个进入运行状态的线程将其 Star t ing_PC寄存器中的值上载到运行通道程序 4 个程序计数器(PC )中的一个, 于是该线程开始运行。 关于线程管理及配置参 见图 6。 在图 6中, 线程运行 601 , 读取或接受线程配置寄存器 602、 线程状 态寄存器 603以及 I/O緩沖状态寄存器 604的值,并将其转换为三个控制信号 输出。其中,这些控制信号包括: Launch-va l id, Launch-t id ^ Launch infor。
当线程运行到 EXIT指令时, 该线程完成。
上述 3种线程都只能通过软件来关闭( di sable )0 MVP线程能够在硬件结 束现行数据集时被置于等待状态,等待该线程的下一个数据集被准备或送入其 对应的本地存储区域。
在数据线程和任务线程之间 MVP没有任何内在的硬件连接,除了其共享的 存储器和有 API定义的隔层特征(barr ier fea ture )。 这些线程中的每一个都
被作为完全独立的硬件来对待。 虽然如此, MVP提供线程间的中断特性, 于是, 每个线程可以被任何一个其他内核中断。 线程间中断 ( inter-thread int errupt )是软件中断, 其通过运行的线程写入软件中断寄存器特别地中断 一个指定内核, 包括其本身的内核。 在这样一个线程间中断之后, 被中断的内 核的终端程序将被调用。
正如一个传统的中断处理程序一样,在 MVP中的中断,如果其被使能并配 置, 对于每一个被中断的线程, 将跳转到一个事先设置好的中断处理程序。 如 果软件使能, 每一个 MVP将响应外部中断。 中断控制器处理所有的中断。
对于 MVP线程而言,所有的线程被视为一个硬件的专用集成电路通道, 于 是,每个中断寄存器将用于调整单个的线程的睡眠和唤醒。 线程緩沖器将作为 一个线程间的数据通道。 利用软件来划分 MVP线程的规则, 类似多处理器在任 务并行计算模式下的特性,是任何通过所有线程的数据流都是单向的。 以避免 任何线程之间互锁的机会。这就意味着具有数据前向或后向交换的功能都被作 为一个内核保持在一个单项任务中。 因此, 当软件初始化配置后, 在运行时间 内线程间的通讯将固有地通过虚拟 DMA通道并由硬件自动处理。 于是, 该通讯 变得对软件透明并不会非必要地激活中断处理程序。 参见图 9 , 图 9中示出了 8个内核(应用程序, K1到 K8 )及其对应的緩沖区域(Buf A到 Buf H ),其 中, 上述緩沖区域之间通过虚拟 DMA通道连接, 用于数据的快速拷贝。
MVP有 64KB的核内 SRAM作为线程緩沖器, 其被配置为 16区, 每区 4KB。 他们由每一个线程存储器映射到本地存储器的一个固定空间。 对于数据线程, 这 64KB的线程緩沖器是整个的本地存储器, 就像一个典型的 SRAM。 由于最大 有 4个工作项目, 例如, 4个线程, 属于同一个工作组, 对于线程处理, 其可 以被线性寻址。 (参见图 2 )
对于任务线程, 上述 64KB线程緩沖器可以被配置为最多 8个不同的本地 存储器集合, 每个对应一个线程。 (参见图 3 )每个本地存储器的数值可以通 过软件配置来调节。
对于 MVP线程模式, 该 64KB的线程緩沖器的配置方式只有如图 7所示的 一种。 正如任务线程模式, 每个 MVP线程具有其指向的、 作为该内核本身的本
地存储器的线程緩沖区,在如图 7所示 4个线程被配置的情况下,每个线程有 64KB/4=16KB的本地存储器。 此外, 该内核可以被视为一个虚拟的 DMA引擎, 该引擎能瞬间整体拷贝一个线程的本地存储器内容到下一个线程的本地存储 器。该瞬间拷贝流数据通过虚拟 DMA引擎在被激活线程中动态改变虚拟的物理 映射而达到。每个线程具有其自身的映射而当该线程执行完毕时, 线程将升级 其自身的映射并依照下述准则重新开始执行: 如果本地存储器使能并有效(输 入数据到达), 线程准备启动; 在线程完成、 转换映射到下一个本地存储器并 标记现行映射的本地存储器有效(输出数据准备为下一个线程;); 返回第一步。
在图 7中, 线程 0 701、 线程 1 702、 线程 2 703以及线程 3 704分别与 被映射作为其本地存储器的存储区域(即 705、 706、 707、 708 )连接, 在上 述这些存储区域之间, 通过虚拟 DMA连接( 709、 710、 711 )连接。 值得一提 的是, 在图 7中, 该虚拟 DMA连接( 709、 710、 711 )在硬件上不存在的, 在 本实施例中,通过改变线程的配置而实现上述存储区域中的数据转移,使得其 从外面看起来好像存在连接一样, 但实际上并不存在硬件的连接。 图 9 中的 Buf A到 Buf H之间的连接也是如此。
注意当线程已经准备好启动时,如果有其他准备好的线程,则可能仍未启 动, 特别是在多于 4个激活线程的情况下。
上述线程緩沖器的操作主要在 MVP 线程模式下提供一种不实施任何形式 的数据拷贝而将较早线程的本地存储器内容搬移到较晚线程的本地存储器中 的通道数据流模式, 以节省时间和电力。
对于线程緩沖器的输入和输出流数据, MVP具有一个单独的 32-b i t数据 输入和一个单独的 32-b i t数据输出通过外^妻口总线连接到***总线,于是, MVP核能够通过 load/ s tore指令或虚拟 DMA引擎传输数据到 /由线程緩沖器。
如果一个特定的线程緩沖区被激活,意味着其与线程一起被执行且可以被 线程程序使用。 当一个外部访问试图写入时, 该访问将会被失步緩沖延迟。
每个周期, 对于单个线程而言, 有 4条指令被取出。 在普通模式下, 该取 行的线程, 同一个线程将每隔 4个周期取得一次指令; 如果有 4个正在运行的
线程, 其中有两个处于优先模式, 而该优先模式允许每周期输出两条指令, 那 么, 上述间隙将减少到 2。 于是, 线程的取值选择取决于循环的取指令牌、 运 行模式以及指令緩沖器的状态。
MVP被设计为支持 4个线程同时运行, 最少线程运行的情况是 2个线程。 为此, 并不是每个周期都取指, 这给出足够的时间为不受限制的任何种类的流 程序建立下一个 PC (程序计数器)指向地址。 由于设计点是 4个运行的线程, MVP在同一个线程下一次取指之前有 4个周期, 这为支路解析延迟提供了 3个 周期。 虽然, 寻址很少会超过 3个周期, MVP具有筒单支路预测策略用来减少 3周期的支路解析延迟。 其采用静态的不采用 (a lways-not-taken )策略。 在 4个运行线程的情况下, 该筒单的支路预测策略将不会带来导致可能错误的效 果, 因为线程的 PC在取指的同时就进行支路解析。 于是该特性将由设计性能 决定其开关, 不需要进一步的设定来适应不同的数量的正在运行的线程。
如图 8所示, MVP在每个周期内总能输出 4条指令(见图 8中的输出选择 806,)是一个重点。 为从线程指令緩沖器中找出 4条准备好的指令, MVP将检 查 8条指令, 每个正在运行的线程( 801、 802、 803、 804 )两条, 这些指令通 过冒险检查 805传送给输出选择 806。 通常情况下, 如果不存在失配, 每个正 在运行的线程输出一条指令。 如果存在失配, 例如, 长时间等待实施结果, 或 者没有足够的正在运行的线程,于是这两条每个线程被检测的指令将探测同一 个线程中的任何 ILPs , 以便于隐藏暂停的线程延时, 达到最大的动态平衡。 此外在优先模式下, 为了达到最大的负载平衡,较高优先级线程 2条已准备指 令将先于较低优先级的一个被选择。这将有利于较好地利用较高优先级线程的 任意 ILPs , 这将缩短更多时间敏感任务的操作时间, 以及增加能够被用于任 何线程模式的能力。
由于 MVP有 4个 LAU、 4个 MAC,以及最多每周期 4个输出, 通常没有资源 冒险, 除非涉及固定功能单元。 然而, 和通常的处理器类似, 其存在需要在指 令能够输出前被清除的数据冒险。在任意两个不同周期中输出的指令之间, 其 可能具有长延时冒险 ( long latency produce-to-consume ), 例如占用 n个周 期的长延时指定功能单元的产生者指令( producer ins truct ion ), 或一个至
少占用两个周期的负载指令( load ins t ruct ion )。 在这种情况下, 任何消费 者指令(cons菌 er ins t ruct ion )将失配知道该冒险被清除。 如果为了负载平 衡, 需要在一个周期内发出多于一个的指令, 或者为了延时隐藏的理由, 在第 二输出指令发出时冒险检查应该被执行,以确认在第一个指令上不会产生相关 性。
延时隐藏(latency hiding)是 MVP非常重要的特性。 在 MVP指令实施通道 中, 有两种长延时的情况: 一个是特定功能单元另一个是访问外接存储器或 10。 在任何一种情况中, 该请求线程将被置于暂停状态, 没有指令输出直到该 长延时操作被完成。在此期间,将少一个线程在运行而其他正在运行的线程将 填充空闲的时隙以利用额外的硬件,现假设每个特定功能单元仅与一个线程联 合, 如果任何时候, 有多于 1个的线程在指定的特定功能单元运行, 不用担心 特定功能单元资源的缺乏。此时不能由一个 ALU去实施负载指令处理,如果负 载指令失去一个緩沖, 于是负载指令就不能占用指定 ALU 的通道, 因为 ALU 是通用执行单元, 可以被其他线程自由使用。 于是, 对于长延时负载访问, 我 们使用指令取消的办法来释放 ALU的通道。长延时负载指令不需要和通常的处 理器一样在 ALU的通道中等待,反之, 其将在该线程从暂停状态到再次运行时 再发一次该指令。
如上所述, MVP不做任何支路预测, 因此也没有执行推测。 于是, 唯一导 致指令取消的情形来自于负载延迟暂停, 对于任何已知的緩沖丟失, 在 MVP 的指令提交阶段,一个指令在当然可以完成的 WB ( Wr i te Back )阶段, 为 MEM ( Data memory acces s ) 阶段。 如果緩沖丟失已经发生, 占用的负载指令取 消, 于是所有的由 MEM阶段上升到 IS阶段,即上述 MEM加上 EX (Execut ion or addres s ca l culat ion),其后续指令也将会取消。 在线程指令緩沖中的线程将 进入暂停状态直到其被唤醒信号唤醒。其意味着在线程指令緩沖器的线程将不 得不等待, 直到其查找到 EME阶段。 同时, 指令指针的操作需要考虑任意一种 指令取消的可能。
在本实施例中,该 MVP不带通用处理器, 而是通过接口与外部的中央处理 器连接, 实际上, 是一个协处理器。 在其他实施例中, 该 MVP也可以带有通用 处理器构成一个完整的工作平台,其好处是不需要外接中央处理器,自成一体,
便于使用。
在本实施例中, 一个内核的处理步骤如下:
步骤 S 1 1 开始: 在本步骤中, 开始一个内核中线程的处理, 在本实施例 中, 上述线程可能是一个, 也可能是属于同一个内核的多个线程。
步骤 S 12激活内核: 在本步骤中, 激活***中的一个内核(即应用程序), ***可能包括多个内核, 不一定每个内核在任何时候都在运行, 当***需要某 一个应用程序工作时, 在***中通过写入特定的内部寄存器的值激活该内核 (应用程序)。
步骤 S 1 3 数据集准备好? 判断上述内核的数据集是否准备完毕, 如是, 执行下一步骤; 如不是, 重复本步骤。
步骤 S 14内核建立: 在本步骤中, 通过对内部寄存器的值的写入, 例如, 前面提及的线程配置中的各寄存器的值等, 建立该被激活的内核。
步骤 S 15 存储资源准备? 判断该内核对应的存储资源是否准备完毕, 如 是, 执行下一步骤; 如否, 重复本步骤。 在本步骤所述的存储资源准备包括存 储器的使能等。
步骤 S 16 内核调度: 在本步骤中, 对上述内核进行调度, 例如, 分配对 应于该线程的存储区域, 导入该线程需要的数据等等。
步骤 S 17 线程资源准备? 判断关于线程的资源是否准备好, 如是, 执行 下一步骤, 如不是, 重复上述步骤, 等待其完成准备。 这些资源包括存储区域 的使能及有效(即数据已输入) 、 本地存储器被配置且被标记等。
步骤 S 18 线程启动: 在本步骤中, 该线程启动, 开始运行。
步骤 S 19 执行程序: 众所周知, 线程是多条代码的集合, 在本步骤中, 就是按照上述代码的顺序, 逐条执行上述代码。
步骤 S20 程序完成? 判断上述线程中的程序是否执行完毕, 如是, 执行 下一步骤, 如否, 重复本步骤, 等待该线程中的程序执行完成。
步骤 S21 线程退出: 在本步骤中, 由于该线程已经完成, 因此, 退出该 线程, 释放该线程所占有的资源。
步骤 S22 仍需要该内核? 判断该内核是否还有其他线程需要处理或是否
还有属于该内核的数据在输入, 如果是, 则认为该内核仍有需要, 可以保持, 跳转到步骤 S13 , 继续执行; 如否, 则认为该内核不再需要, 执行下一步骤。
步骤 S23 退出该内核: 退出该内核, 释放其占用的资源, 结束一次内核 的处理流程。
值得一提的是, 上述方法描述了一个内核的处理, 在本实施例中, 上述的 处理方法在同一时件间, 可以并行进行 4个线程的处理, 即在同一时间内可以 同时进行 4套上述步骤, 这些线程可以分别属于不同的内核,也可以是同一个 内核的 4个线程。 细, 但并不能因此而理解为对本发明专利范围的限制。 应当指出的是, 对于本 领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变 形和改进, 这些都属于本发明的保护范围。 因此, 本发明专利的保护范围应以 所附权利要求为准。