CN101034345A - 流处理器中数据流、指令流的控制方法 - Google Patents
流处理器中数据流、指令流的控制方法 Download PDFInfo
- Publication number
- CN101034345A CN101034345A CN 200710034743 CN200710034743A CN101034345A CN 101034345 A CN101034345 A CN 101034345A CN 200710034743 CN200710034743 CN 200710034743 CN 200710034743 A CN200710034743 A CN 200710034743A CN 101034345 A CN101034345 A CN 101034345A
- Authority
- CN
- China
- Prior art keywords
- stream
- instruction
- level
- data
- run
- 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
Images
Abstract
本发明公开了一种流处理器中数据流、指令流的控制方法,当遇到一个流操作(Processor)时,将执行以下过程:(1)调用Run time dispatcher,它将调用一个运行在主处理器上的软件模块run-time dispatcher,将该Processor操作相对应的数据结构提交给Run-time Dispatcher;(2)流级指令的动态生成,Run-time Dispatcher会根据该数据结构的相关信息动态生成流级指令,并将其发送到指令发射缓冲器中;(3)将流级指令发射到流控制器中;(4)流指令的发射与执行。本发明是一种能够实现计算与访存相分离、充分开发流应用的数据局域性和并发性的流处理器中数据流、指令流的控制方法。
Description
技术领域
本发明主要涉及到微处理器设计领域,特指一种流处理器中数据流、指令流的控制方法。
背景技术
当前主流微处理器中主要采用指令流的方式进行计算,算法和应用以程序的方式加载到处理器中并根据指令的需要加载数据。采用这种方式进行会引入较多的数据相关从而降低了处理器的性能。多核技术通过在单个微处理器芯片中集成多个运算核心以开发计算并行性并提高计算效率。但采用多核技术构造的处理器存在软件编写困难,难以更大规模开发数据并行性。传统的以数据流为核心的处理器中存在明显的软件编写困难,数据提供和计算后的数据收集受到数据流处理器的特点限制,其计算种类数量较少,通常用于不可变得计算过程中。因此传统的以数据流为核心的处理器通常应用于计算模式固定、数据规整的应用中。结合指令流和数据流处理器的优点,设计了采用两种流结合方式进行计算的处理器结构。大数据量处理应用中,多将数据分割为小块进行计算,在计算过程中,数据将组织成数据流的形式进入计算单元,例如多媒体领域的MPEG4、H.264编/解码算法等,这类计算表现出数据流处理的特性。微处理器中集成的运算核心可以多达32个以上,采用流结构来组织众多的计算核心。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种能够实现计算与访存相分离、充分开发流应用的数据局域性和并发性的流处理器中数据流、指令流的控制方法。
为解决上述技术问题,本发明提出的解决方案为:一种流处理器中数据流、指令流的控制方法,其特征在于当遇到一个流操作(Processor)时,将执行以下过程:
(1)、调用Run_time dispatcher,它将调用一个运行在主处理器上的软件模块run-timedispatcher,将该Processor操作相对应的数据结构提交给Run-time Dispatcher;
(2)、流级指令的动态生成,Run-time Dispatcher会根据该数据结构的相关信息动态生成流级指令,并将其发送到指令发射缓冲器中;
(3)、将流级指令发射到流控制器中,Run-time Dispatcher会一直等待直到当前的流指令可以被发送,就立即通过流处理器的与主机之间的接口将该流指令发送到流控制器;
(4)、流指令的发射与执行,流控制器会在满足指令间相关性及资源可用的条件下,尽可能地乱序发射流指令,以充分发掘流指令的并行性,当该指令所需要的硬件资源空闲的再次空闲的时候,那么该条流指令执行完成,会从指令队列中离队。
所述步骤(3)中,流指令可以被发送必须满足以下两个条件:第一,当前待发送的流指令的逻辑发射槽号是可用的;第二,如果有流指令A依赖于流指令B,而B又作为某一双缓冲的一部分被反复的发送(A不在该双缓冲内),那么B必须完成最后一次发送后,A才能被发送。
在上述的处理过程中需要进行三级编译:
(1)、核心级编译,对核心级程序进行编译完成VLIW打包,生成核级程序的二进制代码;
(2)、流级编译,由核心级编译器生成的二进制代码作为流,参加流级编译,流级编译把流级程序中包含的关于流的函数调用,替换为与流指令相对应的能被X处理器执行的流操作;流级编译并不生成流指令的二进制代码,只是把流级程序中调用的流函数替换为一个或者多个流操作,而每个流操作的具体信息都被保存在一个庞大的数据结构中;
(3)、C++编译器,替换后的流级程序使用普通的C++编译器进行编译,输出可在标量机上运行的二进制代码,二进制代码在标量机上运行时,会通过调用Run-timeDispatcher,指挥流处理器完成相应的功能。
与现有技术相比,本发明的优点就在于:
1、可以实现快速的核心执行。核心只在本地的数据上进行操作,不进行任何的存储访问。而对于流的访存操作交给流级程序完成,返回的数据流作为输入流进入核心。
2、对硬件的要求降低。在这种编程模型中,由于核级程序采用了VLIW的方法,因此硬件不需要进行复杂的数据相关性的检测,数据的相关性主要由核级编译器来完成。同时,在流级,流在计算核心之间的流动的相关性,也是由软件进行分析的,硬件仅仅需要相关性是否满足。因此,这种方法可以减小硬件设计的复杂度。
3、能够缓解高性能处理器中的“存储墙”问题。流应用对带宽提出了很高的要求,片外存储带宽和片内计算带宽之间存在差异。流处理器提供了三级数据带宽层次(bandwidthhierarchy):片外存储器带宽,SRF带宽,簇内LRF在运算单元间传输带宽。针对大量访存数据的主存储级带宽、针对片上本地数据的中间级带宽和针对计算临时数据的本地级带宽。采用这种数据流、指令流的控制方法,流应用能够很好的与这种带宽层次相匹配,在三个层面上开发了数据局域性:核内数据局域性,核间数据局域性,全局数据局域性。三级存储带宽层次充分开发了流数据的局域性和并行性。
4、隐藏访问延迟。程序的执行采用了流级和核级两级控制的方法,流级程序负责为核级程序准备需要处理的批量数据,并且将核级程序的执行结果存储到片外存储器中。因此为下一个核级程序准备数据可以和当前核级程序的执行并行,将当前核计程序的执行的结果存储到片外存储器中可以和下一个核级程序的执行并行,隐藏了存储器访问延迟。
附图说明
图1流程序的结构示意图;
图2流级程序的执行流程示意图。
具体实施方式
以下将结合附图和具体实施例对本发明做进一步详细说明。
在流处理器上运行的程序有自己独特的编程模式。流程序采用层次化的编程模式,分为两级:流级程序和核级程序,核级程序负责计算,流级程序负责组织数据。流级程序以函数形式调用核级程序,核级程序实现计算核心的具体功能。核级程序经编译后产生的微代码被流程序视为特殊的流,流级程序只看得见流,不见核心的具体功能;只见访存,不见计算。在这种两级编程模型中,除了个别标量数据,大部分数据以“流”的形式被引用,以流(stream)作为数据的基本元素(流的长度不固定,由程序员指定);在这种编程模型中,执行的操作包括从存储器读取流,将计算单元形成的流保存到SRF(流寄存器文件),对流进行运算,从SRF中读取流,将流存回到片外DRAM存储器中。
在这种新型的编程模式中,需要进行三级编译:
(1)、核心级编译,对核心级程序进行编译完成VLIW打包,生成核级程序的二进制代码;
(2)、流级编译,由核心级编译器生成的二进制代码作为流,参加流级编译,流级编译把流级程序中包含的关于流的函数调用,替换为与流指令相对应的能被X处理器执行的流操作。流级编译并不生成流指令的二进制代码,只是把流级程序中调用的流函数替换为一个或者多个流操作,而每个流操作的具体信息都被保存在一个庞大的数据结构中。
(3)、C++编译器,替换后的流级程序使用普通的C++编译器进行编译,输出可在标量机上运行的二进制代码,二进制代码在标量机上运行时,会通过调用Run-timeDispatcher,指挥流处理器完成相应的功能。
图1是流程序的结构。流程序模型通常把一个完整的应用划分为几个核心(kernel)和一个流级程序来描述,流应用表示为这种形式之后,大部分数据以数据流的形式直接从一个计算核心传输到另一个计算核心。流级程序负责组织数据流在计算核心之间传输,为计算核心提供数据。计算核心读入输入流,依次处理输入流中的每个记录,产生连续的输出组成输出流。
在流程序中,流由一连串的有固定顺序的同构记录组成。流体现了记录之间的同构性、记录排列顺序的确定性。记录是被核心处理的基本单位,可以是单一结构,也可以是复合结构。从程序员的角度流是连续的,所以能够被核心依次处理,并且流的长度是任意的;但其元素在主机地址空间与流处理器地址空间中的分布不一定是连续的。在应用开发层,可以将流分为基本流、派生流、重启流。组成基本流的记录在地址空间中的分布是连续的,在流级程序中它以数组形式进行声明;派生流是基本流的一个子集引用;重启流是把几个同构记录的流拼接成一个虚拟的长流。
流级程序使用StreamC语言和C++语言,StreamC是面向流处理器的,类似一个函数库,只提供流的类声明、实现以及对流的操作函数等,并不包括循环、条件分支等标量功能,这些功能由C++语言实现。所以一个完整的流程序是在标量C++语言中调用StreamC函数,标量操作比如循环、条件分支、标量数据的赋值是在标量机上运行的,只有运行到StreamC流操作函数时,才是在流处理器上执行。
核级程序完全采用KernelC语言编程,具体描述单个核心对流执行操作的过程,描述每个计算核心的功能,通常是对流元素进行循环处理。核级程序主要是处理密集的数据流,并且其指令也是作为流加载。典型的情况是,对输入流的每个元素进行循环,对它们施加相同的操作。由于核级程序的目标是通过VLIW方式来开发指令的并行性和数据并行性,因此核级程序的控制机制比较简单,没有复杂的控制结构。这种特点对程序员来说更容易编写和分析,结构性更强。核级程序中的控制结构主体是循环结构(loop),循环结束的条件可以通过设定的循环次数或根据流的长度来控制循环。同时,为了实现通用程序实现中的分支,核级程序采用了条件流的执行机制。从机器和编译的角度,通过限制控制流,更容易预测数据和指令的执行,局域性和并行性更强,适合高吞吐率的密集计算,同时也更有利于编译的调度和优化。
图2流级程序的执行过程。在主处理器运行编译后的流级程序,当遇到一个Processor操作(流操作)时,将执行以下过程:
1、调用Run_time dispatcher。它将调用一个运行在主处理器上的软件模块run-timedispatcher,将该Processor操作相对应的数据结构提交给Run-time Dispatcher。
2、流级指令的动态生成。Run-time Dispatcher会根据该数据结构的相关信息动态生成流级指令,并将其发送到指令发射缓冲器中。
3、将流级指令发射到流控制器中。Run-time Dispatcher会一直等待直到当前的流指令可以被发送,就立即通过流处理器的与主机之间的接口将该流指令发送到流控制器。流指令可以被发送必须满足以下两个条件:第一,当前待发送的流指令的逻辑发射槽号是可用的。第二,如果有流指令A依赖于流指令B,而B又作为某一双缓冲的一部分被反复的发送(A不在该双缓冲内),那么B必须完成最后一次发送后,A才能被发送。
4、流指令的发射与执行。流控制器会在满足指令间相关性及资源可用的条件下,尽可能地乱序发射流指令,以充分发掘流指令的并行性。当该指令所需要的硬件资源空闲的再次空闲的时候,那么该条流指令执行完成,会从指令队列中离队。
Claims (3)
1、一种流处理器中数据流、指令流的控制方法,其特征在于当遇到一个流操作(Processor)时,将执行以下过程:
(1)、调用Run_time dispatcher,它将调用一个运行在主处理器上的软件模块run-timedispatcher,将该Processor操作相对应的数据结构提交给Run-time Dispatcher;
(2)、流级指令的动态生成,Run-time Dispatcher会根据该数据结构的相关信息动态生成流级指令,并将其发送到指令发射缓冲器中;
(3)、将流级指令发射到流控制器中,Run-time Dispatcher会一直等待直到当前的流指令可以被发送,就立即通过流处理器的与主机之间的接口将该流指令发送到流控制器;
(4)、流指令的发射与执行,流控制器会在满足指令间相关性及资源可用的条件下,尽可能地乱序发射流指令,以充分发掘流指令的并行性,当该指令所需要的硬件资源空闲的再次空闲的时候,那么该条流指令执行完成,会从指令队列中离队。
2、根据权利要求1所述的流处理器中数据流、指令流的控制方法,其特征在于:所述步骤(3)中,流指令可以被发送必须满足以下两个条件:第一,当前待发送的流指令的逻辑发射槽号是可用的;第二,如果有流指令A依赖于流指令B,而B又作为某一双缓冲的一部分被反复的发送(A不在该双缓冲内),那么B必须完成最后一次发送后,A才能被发送。
3、根据权利要求1或2所述的流处理器中数据流、指令流的控制方法,其特征在于在上述的处理过程中需要进行三级编译:
(1)、核心级编译,对核心级程序进行编译完成VLIW打包,生成核级程序的二进制代码;
(2)、流级编译,由核心级编译器生成的二进制代码作为流,参加流级编译,流级编译把流级程序中包含的关于流的函数调用,替换为与流指令相对应的能被X处理器执行的流操作;流级编译并不生成流指令的二进制代码,只是把流级程序中调用的流函数替换为一个或者多个流操作,而每个流操作的具体信息都被保存在一个庞大的数据结构中;
(3)、C++编译器,替换后的流级程序使用普通的C++编译器进行编译,输出可在标量机上运行的二进制代码,二进制代码在标量机上运行时,会通过调用Run-timeDispatcher,指挥流处理器完成相应的功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710034743 CN101034345A (zh) | 2007-04-16 | 2007-04-16 | 流处理器中数据流、指令流的控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710034743 CN101034345A (zh) | 2007-04-16 | 2007-04-16 | 流处理器中数据流、指令流的控制方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101034345A true CN101034345A (zh) | 2007-09-12 |
Family
ID=38730918
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710034743 Pending CN101034345A (zh) | 2007-04-16 | 2007-04-16 | 流处理器中数据流、指令流的控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101034345A (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009082975A1 (en) * | 2007-12-27 | 2009-07-09 | Huawei Technologies Co., Ltd. | Subsequent instruction operation method and device |
CN102200906A (zh) * | 2011-05-25 | 2011-09-28 | 上海理工大学 | 大规模并发数据流处理系统及其处理方法 |
CN101699392B (zh) * | 2009-11-12 | 2012-05-09 | 中国人民解放军国防科学技术大学 | 流处理器中io单元复用方法 |
CN101566942B (zh) * | 2009-06-03 | 2012-07-18 | 上海高性能集成电路设计中心 | 一种超标量微处理器中控制乱序发射的飞行记分牌装置 |
CN103116485A (zh) * | 2013-01-30 | 2013-05-22 | 西安电子科技大学 | 一种基于超长指令字专用指令集处理器的汇编器设计方法 |
CN105242909A (zh) * | 2015-11-24 | 2016-01-13 | 无锡江南计算技术研究所 | 一种基于多版本代码生成的众核循环分块方法 |
US10310860B2 (en) | 2016-07-29 | 2019-06-04 | International Business Machines Corporation | Starting and stopping instruction dispatch to execution unit queues in a multi-pipeline processor |
WO2019106462A1 (en) * | 2017-11-30 | 2019-06-06 | International Business Machines Corporation | Scalable dependency matrix with one or a plurality of summary bits in an out-of-order processor |
US10564979B2 (en) | 2017-11-30 | 2020-02-18 | International Business Machines Corporation | Coalescing global completion table entries in an out-of-order processor |
US10564976B2 (en) | 2017-11-30 | 2020-02-18 | International Business Machines Corporation | Scalable dependency matrix with multiple summary bits in an out-of-order processor |
US10572264B2 (en) | 2017-11-30 | 2020-02-25 | International Business Machines Corporation | Completing coalesced global completion table entries in an out-of-order processor |
US10802829B2 (en) | 2017-11-30 | 2020-10-13 | International Business Machines Corporation | Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor |
US10884753B2 (en) | 2017-11-30 | 2021-01-05 | International Business Machines Corporation | Issue queue with dynamic shifting between ports |
US10901744B2 (en) | 2017-11-30 | 2021-01-26 | International Business Machines Corporation | Buffered instruction dispatching to an issue queue |
US10922087B2 (en) | 2017-11-30 | 2021-02-16 | International Business Machines Corporation | Block based allocation and deallocation of issue queue entries |
US10942747B2 (en) | 2017-11-30 | 2021-03-09 | International Business Machines Corporation | Head and tail pointer manipulation in a first-in-first-out issue queue |
-
2007
- 2007-04-16 CN CN 200710034743 patent/CN101034345A/zh active Pending
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009082975A1 (en) * | 2007-12-27 | 2009-07-09 | Huawei Technologies Co., Ltd. | Subsequent instruction operation method and device |
CN101566942B (zh) * | 2009-06-03 | 2012-07-18 | 上海高性能集成电路设计中心 | 一种超标量微处理器中控制乱序发射的飞行记分牌装置 |
CN101699392B (zh) * | 2009-11-12 | 2012-05-09 | 中国人民解放军国防科学技术大学 | 流处理器中io单元复用方法 |
CN102200906A (zh) * | 2011-05-25 | 2011-09-28 | 上海理工大学 | 大规模并发数据流处理系统及其处理方法 |
CN103116485A (zh) * | 2013-01-30 | 2013-05-22 | 西安电子科技大学 | 一种基于超长指令字专用指令集处理器的汇编器设计方法 |
CN103116485B (zh) * | 2013-01-30 | 2015-08-05 | 西安电子科技大学 | 一种基于超长指令字专用指令集处理器的汇编器设计方法 |
CN105242909A (zh) * | 2015-11-24 | 2016-01-13 | 无锡江南计算技术研究所 | 一种基于多版本代码生成的众核循环分块方法 |
CN105242909B (zh) * | 2015-11-24 | 2017-08-11 | 无锡江南计算技术研究所 | 一种基于多版本代码生成的众核循环分块方法 |
US10310860B2 (en) | 2016-07-29 | 2019-06-04 | International Business Machines Corporation | Starting and stopping instruction dispatch to execution unit queues in a multi-pipeline processor |
US10564979B2 (en) | 2017-11-30 | 2020-02-18 | International Business Machines Corporation | Coalescing global completion table entries in an out-of-order processor |
US10884753B2 (en) | 2017-11-30 | 2021-01-05 | International Business Machines Corporation | Issue queue with dynamic shifting between ports |
US10564976B2 (en) | 2017-11-30 | 2020-02-18 | International Business Machines Corporation | Scalable dependency matrix with multiple summary bits in an out-of-order processor |
US10572264B2 (en) | 2017-11-30 | 2020-02-25 | International Business Machines Corporation | Completing coalesced global completion table entries in an out-of-order processor |
CN111226196A (zh) * | 2017-11-30 | 2020-06-02 | 国际商业机器公司 | 在乱序处理器中具有一个或多个摘要位的可扩展依赖矩阵 |
GB2581945A (en) * | 2017-11-30 | 2020-09-02 | Ibm | Scalable dependency matrix with one or a plurality of summary bits in an out-of-order processor |
US10802829B2 (en) | 2017-11-30 | 2020-10-13 | International Business Machines Corporation | Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor |
WO2019106462A1 (en) * | 2017-11-30 | 2019-06-06 | International Business Machines Corporation | Scalable dependency matrix with one or a plurality of summary bits in an out-of-order processor |
GB2581945B (en) * | 2017-11-30 | 2021-01-20 | Ibm | Scalable dependency matrix with one or a plurality of summary bits in an out-of-order processor |
US10901744B2 (en) | 2017-11-30 | 2021-01-26 | International Business Machines Corporation | Buffered instruction dispatching to an issue queue |
US10922087B2 (en) | 2017-11-30 | 2021-02-16 | International Business Machines Corporation | Block based allocation and deallocation of issue queue entries |
US10942747B2 (en) | 2017-11-30 | 2021-03-09 | International Business Machines Corporation | Head and tail pointer manipulation in a first-in-first-out issue queue |
US11204772B2 (en) | 2017-11-30 | 2021-12-21 | International Business Machines Corporation | Coalescing global completion table entries in an out-of-order processor |
CN111226196B (zh) * | 2017-11-30 | 2023-12-01 | 国际商业机器公司 | 在乱序处理器中具有一个或多个摘要位的可扩展依赖矩阵 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101034345A (zh) | 流处理器中数据流、指令流的控制方法 | |
CN1221892C (zh) | 流水线微处理器的循环高速缓冲存储器及高速缓存控制器 | |
Bauer et al. | CudaDMA: optimizing GPU memory bandwidth via warp specialization | |
Wu et al. | Red fox: An execution environment for relational query processing on gpus | |
US20130332711A1 (en) | Systems and methods for efficient scheduling of concurrent applications in multithreaded processors | |
US20130298130A1 (en) | Automatic pipelining framework for heterogeneous parallel computing systems | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method | |
CN101814039B (zh) | 一种基于GPU的Cache模拟器及其空间并行加速模拟方法 | |
US20140149719A1 (en) | Arithmetic processing apparatus, control method of arithmetic processing apparatus, and a computer-readable storage medium storing a control program for controlling an arithmetic processing apparatus | |
JP2020518881A (ja) | コンピュータに実装する方法、コンピュータ可読媒体および異種計算システム | |
KR20080041271A (ko) | 멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터변환들 | |
Robson et al. | Runtime coordinated heterogeneous tasks in Charm++ | |
CN1153131C (zh) | 用于在多个指令的执行期间由微处理机自动插入所需数量的空操作指令的方法 | |
Holk et al. | Declarative parallel programming for GPUs | |
CN1650266A (zh) | 支持单线程应用程序的时分多路复用推理性多线程 | |
US20230367604A1 (en) | Method of interleaved processing on a general-purpose computing core | |
Joyner et al. | Iterators in chapel | |
Ali et al. | A parallel programming model for Ada | |
Bone et al. | Estimating the overlap between dependent computations for automatic parallelization | |
Du et al. | Breaking the interaction wall: A DLPU-centric deep learning computing system | |
Tan et al. | Just-in-time locality and percolation for optimizing irregular applications on a manycore architecture | |
CN112558978B (zh) | 支撑异构众核全芯片视角的加速编程和编译方法 | |
EP4227795A1 (en) | A computer-implemented method and a computer-readable medium | |
Abdolrashidi | Improving Data-Dependent Parallelism in GPUs Through Programmer-Transparent Architectural Support | |
Jin et al. | Experience Migrating OpenCL to SYCL: A Case Study on Searches for Potential Off-Target Sites of Cas9 RNA-Guided Endonucleases on AMD GPUs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |