CN101515231A - 基于数据流分析的单线程程序并行化的实现方法 - Google Patents
基于数据流分析的单线程程序并行化的实现方法 Download PDFInfo
- Publication number
- CN101515231A CN101515231A CNA2009100971476A CN200910097147A CN101515231A CN 101515231 A CN101515231 A CN 101515231A CN A2009100971476 A CNA2009100971476 A CN A2009100971476A CN 200910097147 A CN200910097147 A CN 200910097147A CN 101515231 A CN101515231 A CN 101515231A
- Authority
- CN
- China
- Prior art keywords
- dependence
- program
- instruction
- thread
- node
- 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
本发明公开了一种基于数据流分析的单线程程序并行化的实现方法。本发明通过分析单线程程序中指令之间的数据依赖性,把单线程程序分解成多线程程序,单线程程序指令之间的依赖性有数据依赖和控制依赖两种,控制依赖是对控制条件值的依赖,是一种特殊的数据依赖。本发明在线程分解的过程中,同时考虑分解后线程通信代价和线程之间的平衡性。本发明的优势在于能够使单线程程序的不同部分并行执行,进而减短程序执行时间提高程序执行效率。单线程程序的并行化方法尤其适合当今的多核结构。
Description
技术领域
本发明涉及单线程程序并行化的领域,尤其涉及一种基于数据流分析的单线程程序并行化的实现方法。
背景技术
随着电子技术的发展,电子芯片的制造工艺由原来的90nm减小到65nm、45nm,现在甚至还出现了32nm的芯片,制造工艺的改进使得固定面积的芯片可以集成更多的晶体管,进而也使得单个芯片上可以被设计成更复杂的结构和更多的计算资源;同时较高的芯片集成度使得原来通过提高芯片工作频率的做法不再有效,一方面芯片的电路延时使得芯片的频率不能被无限提升,另一方面,过高的频率带来了更高的能耗,使得高集成度的芯片散热成为一个巨大的问题。为了解决上述问题,更好和更合理的利用单个芯片上的资源,芯片多处理器(Chip Multi Processor,CMP)结构就应运而生了。CMP集成多个处理器核在单个芯片上,不仅能够解决能耗和散热的问题,同时能够是芯片具有更好的并行性。CMP同时带来的一个问题是当面对传统的基于单核结构而设计的单线程程序,CMP并不能够取得良好的加速比,甚至在有些时候,单线程程序在CMP上的运行性能还不如结构复杂的单核处理器。
现在在CMP上提高单线程程序性能的主要方法是探索单线程程序的并行部分,这样不同的计算资源就能够同时运行实现并行性。比较常用的实现并行的手段有指令级的并行(Instruction Level Parallelism,ILP),线程级的并行(ThreadLevel Parallelism,TLP)和投机(Speculation)。指令级的并行是一种粒度较小的并行手段,它主要实现指令的并行执行,指令级并行在单核处理器中同样被使用,现在使用的多级指令流水技术,超长指令字等方法都是指令级的并行方法。
线程级的并行或称为软件级的并行主要是把一个单线程程序抽取成多线程程序,这些多线程程序并行执行从而实现程序的并行执行。线程级并行的实现方式很多,它是一种粒度较大的并行方式。例如在某些科学计算和多媒体应用的环境中,由于程序所处理的数据前后依赖性不强,所以可以同时处理原始数据中的不同部分,这种方式叫做数据级的并行,是一种线程级并行;再譬如在程序的某个循环中,可以把循环分解成前后的不同部分,前面部分的输出可以作为后面部分的输入,进而形成前后部分的流水让前后两部分并行执行,这种方式叫做软件级的流水,也是一种线程级并行。
投机也是实现程序并行的一种方法,它通过预测来提前执行程序的某一个部分,如果这个部分在将来被执行,那么它的结果可以直接被使用,如果将来未被执行,那么只要抛弃先前执行的结果便可。投机是现在研究中的一个重要方向,有许多不同的方法来实现投机,但是当投机错误的时候,它并不能改变程序的性能,甚至有可能损失一部分程序性能。投机的粒度变化较大,小可以小的一条汇编指令,大可以大到一个循环部分或者一个函数。
无论人们如何尝试着程序并行化的方法,程序中指令前后的依赖性是限制程序并行的最主要约束,建立新的编程模型可能能够使得程序之间的依赖关系有所改善,但是由于任务的过程性,程序之间的依赖关系不可能被消除,所以现在所做的一切关于并行的研究都是建立在依赖性的基础上的。程序内部的依赖关系有控制依赖和数据依赖两种,但是如果需要并行的执行某一段代码,反向的依赖关系也是必须考虑的一个问题,反向的相关存在于指令级的并行和线程级的并行当中,例如处理器的乱序执行,投机和软件流水。
通常在程序执行的某一个时刻存在多个数据流,这些数据流相互交织在一起组成了程序的执行流程。事实上,在具有控制依赖关系的指令之间,如果把控制条件的值作为后面指令的输入的话,那么控制依赖也可以被当成是一种数据上的依赖。加之程序中本身存在的反向的依赖关系,那么可以简单的确定程序中的某些指令必定执行在另外一些指令之后。在编译器的优化技术中,指令之间的依赖关系和程序的数据流都是程序优化的基础。
生产者消费者方式是解决多线程程序在线程之间通信的一个方法,这个方法一般通过指定内存的某一块区域为存放通信内容的仓库,生产者线程向仓库中存放需要通信的内容,而消费者线程从仓库中得到所需要通信的内容。根据生产者消费者的软件模型可以构建出一个生产者消费者的硬件架构。
发明内容
一种基于数据流分析的单线程程序并行化的实现方法能够自动把单线程程序抽取成多线程程序,使之适合在多核结构上并行运行从而提升程序性能,它是一种编译技术。
本发明解决技术问题所采用的技术方案是:
1)分解算法的实现:
分解算法是把单线程程序分解成多个线程的算法实现,这个算法根据联合依赖关系图当中的指令依赖性,把单个线程分解成两个或多个线程。分解算法是一个递归的过程,它首先作出非嵌套循环或者无循环部分的联合依赖关系图,根据原程序中指令执行的时间以及数据依赖关系,向图中的节点和边的添加属性,之后是图的分解过程,分解算法考虑的是分解后线程的通信代价和线程之间的平衡性,把图中的节点分配到不同的组中,组成不同的线程,然后向线程中插入生产者消费者指令,分解后,被分解的部分被当作一个节点插入原来代码当中,分解算法继续分解新组成的代码中的非嵌套循环部分,如此递归进行,直到分解完整个需要分解的代码;
2)根据指令依赖关系作出联合依赖关系图:
单线程程序指令之间存在两种依赖关系,分别是指令之间的数据依赖和控制依赖。当单线程程序别分解成多个线程而并行执行的时候,还存在反向的数据依赖关系。联合依赖关系图是混合这三种依赖关系的图,它的作法是这样的:首先以程序中的指令作为图的节点,然后根据指令之间的依赖关系添加上述的三种依赖关系。在添加完依赖关系以后,以图中不存在依赖的节点为起始节点,消除与这些节点连接的所有边,查找图中新的不存在依赖的节点,取出这些节点加入到起始节点的集合中,在起始节点的集合中添加新节点与旧节点在程序执行中的先后关系,消除新节点在原来依赖图中所有与之相连的边。这样循环进行直到所有节点被添加到起始节点集合为止;
3)函数、过程内联和程序中三种基本元素的分解:
函数和过程会使指令流跳出到被分解部分的代码,这使得分解过程难以继续进行,因此需要把被分解代码部分内的函数和过程被内联进来。基本块、条件分支和循环是程序的三种基本元素,循环被分解算法作为基本分解单元,分支和循环需要控制条件值的传递,基本块可以被直接分解,但会存在数据依赖和反向数据依赖;
4)生产者消费者通信模式及硬件实现:
分解后线程之间的通信通过生产者消费者方式解决,生产者消费者需要在仓库中存储和消费所通信的值,如果以内存为仓库,由于内存的速度慢,对内存的读写影响分解后线程的性能,为了能够更快的完成生产者消费者,减少通信代价,一种硬件的实现可以有效的改进效率;
5)分解后线程间通信的一个特殊例子考虑:
对于生产者消费者的实现,有一个特殊的例子需要被考虑,当消费者消费的值有可能来自分支或循环内部,也有可能来之分支或循环前面时生产者需要在一个特定的点生产或者向仓库中的同一个单元进行生产,不然消费者得到的值可能是错误的或者过时的。
本发明具有的有益效果是:
随着CMP构架的广泛使用,单线程程序在需要探索指令间的并行性外,还需要能够实现线程级的并行,使得程序能够适应CMP构架,在多个核上并行执行。本发明的目的就在于自动分解单线程程序为多线程程序,使得单线程程序可以在CMP结构上并行执行,进而提高程序的执行效率,增加系统的吞吐量,提高CMP芯片的利用效率。单线程程序的并行化方法尤其适合当今的多核结构(Chip Multi Processor,CMP
附图说明
图1是分解算法流程图。
图2是基本块的UDG以及分解。
图3是分支的UDG以及分解。
图4是循环的UDG以及分解。
图5是添加节点和边的属性到UDG中。
图6是生产者消费者硬件实现的结构框架图。
图7是程序分解中的一个特殊情况。
具体实施方式
基于数据流分析的单线程程序并行化通过分析单线程程序中指令之间的依赖性,把单线程程序分解成多线程程序,在线程分解的过程中,同时考虑分解后线程通信代价和线程之间的平衡性。单线程程序并行化能够使单线程程序的不同部分并行执行,进而减短程序执行时间提高程序执行效率。它的具体实现如下:
(一)分解算法的实现(Dataflow Abstracting Thread,DFAT):
分解算法是把单线程程序分解成多个线程的算法实现,这个算法根据联合依赖关系图当中的指令依赖性,把单个线程分解成指定个数的线程。在线程的分解过程中,分解算法不但需要考虑分解后线程的通信代价同时需要考虑线程之间的平衡性。分解算法首先分解程序中的非嵌套循环部分,分解完成以后把循环标记为一个节点继续分解上层的循环,直到所有待分解的代码全部被分解为止。算法的流程图如图1所示,下面将详细叙述分解算法的过程:
1.作出非嵌套循环或者无循环部分联合依赖关系图(United DependenceGraph,UDG);
没有嵌套的循环指的是循环内部只存在基本块和分支条件而不再包含循环。在找到这样的循环以后,对循环内部作联合依赖关系图。联合依赖关系图的具体作法见第二部分。
2.添加节点和边的属性到UDG;
在作出两和依赖关系图以后需要向图中添加一些重要属性,这些属性表示指令之间是否有数值传递以及该指令的预计执行时间,其中反向依赖不存在数值传递,对联合依赖关系图添加属性的过程如图5所示,这是对图2(b)的联合依赖关系图添加属性,节点上的数值表示节点的预计执行时间,边上的数值表示两个节点间传递的数值个数。这些属性被用于图的分解,使分解后线程间具有较小的通信代价和保持平衡性。由于该联合依赖关系图是对一个循环的分解,所以循环的控制条件对于循环内所有节点的控制依赖可以被省略。
3.把UDG中的节点分配到不同组中;
在分解依赖图的时候,肯定存在一种最优的分解方法,但这个是NP问题,时间复杂度高,本发明中的分解采用贪心策略,这是一种近似求解的方式,优点是算法简单,时间复杂度低。在分解的过程中不但要考虑分解以后的线程通信量尽量的少,同时需要考虑线程之间的平衡性,如果各个线程的执行时间能够接近,那么执行的总时间就有可能相对较短。所以在分解的过程中,首先考虑通信优先,即有数据依赖的应该被分配在同一个线程,但是同时要保证分解后线程的平衡,对于线程的平衡可以设置一个阈值,即分解后的线程中理论上的最长时间和最短时间差不应该超过这个值。这个阈值的设置方法可以有多种方式,可以是一个常数,一个在某个取值范围内的随机数或者是程序总的执行时间的一个百分比值。
4.插入生产者消费者指令;
分解后线程之间的通信是一个影响性能的重要问题,本发明中采用的是生产者消费者方式来解决线程之间的通信,为了能够更快的完成线程之间的通信,本发明采用了硬件的方式实现生产者消费者,具体的实现在第四部分中讲被详细讨论。对于分解后线程预计执行时间的计算,不但要计算本身指令的执行时间,还要加上数据的等待时间和传输时间。
在分解完一个没有嵌套的循环以后,计算出分解后各个部分的live-in和live-out,把分解后的各个部分分别作为一个整体,或者说看成是一条指令,记执行时间为代码执行一遍循环的时间,并在该部分上作上标记,有相同标记的两个指令不能放在同一线程中,回到第一步,直到指定代码全部被分解则算法结束。
5.考虑特殊情况;
由于一种特殊情况的存在,分解结束以后需要对代码作出调整,这个将在第五部分讨论;
(二)根据指令依赖关系作出联合依赖关系图(United Dependence Graph,UDG):
程序的指令之间存在两种依赖关系,分别是指令之间的数据依赖和控制依赖。控制依赖是被控制部分的指令对控制条件的值的依赖,是一种特殊的数据依赖形式。当单个程序别分解成多个线程而并行执行的时候,还存在反向的数据依赖关系,这三种关系联合起来被叫做联合依赖关系,由联合依赖关系得到的指令之间的依赖图被叫做联合依赖关系图(UDG)。图2(b)、图3(a)、图4(a)分别是对各自图中代码所作的联合依赖关系图。在图2(b)中包含了数据依赖关系,在图3(a)包含了数据依赖和控制依赖,在图4(a)中包含了全部的三种依赖关系。
UDG是基于传统的程序依赖关系图的,作图方法比较简单。在传统的程序依赖图(包含控制依赖和数据依赖)基础上,加上程序之间的反向数据依赖关系,然后再对包含这三种依赖关系的图化简即可。化简方法是这样的,根据三种依赖关系扫描图中的所有节点,如果被扫描的节点是可以被执行的,那么把它们取出放入新图中,在新图中添加从原图中新节点所依赖的点到新节点的箭头,并从原图中删除节点和与之相连的所有边,如果原图中所有节点被删除,那么化简结束,否则继续上述步骤知道所有节点被删除。UDG其实是程序中指令先后执行的顺序图;
(三)函数、过程内联和程序中三种基本元素的分解:
函数和过程会使指令流跳出到被分解部分的代码,这使得分解过程难以继续进行,因此被分解代码部分内的函数和过程被内联进来,内联会使得代码量变大,但对于现在的存储容量,这并没有太大影响。基本块、条件分支和循环是构成程序的三种基本元素,这三种元素的分解方法不尽相同,循环被分解算法作为基本单元,分支和循环又需要控制条件值的传递,基本块可以被直接分解,但会存在数据依赖和反向数据依赖,同时分支和循环的内部又是由基本块构成的。
基本块中存在的依赖关系只可能是数据依赖和反向的数据依赖,图2是对一个基本块的分解,在这个代码段中,只有数据依赖,图2(c)是把图2(b)分解成两个部分的一个举例,在分解以后,线程1中的指令1要将数据传递给线程2中的指令2、5,线程1中的指令3要将数据传递给线程2中的指令7。这些数据的传递是线程间的通信,通过生产者消费者硬件完成。
在分支的情况下存在的重要依赖关系是控制依赖,控制依赖主要是内部指令对于分支条件的依赖性,这种依赖性包含着数值的依赖,是一种特殊的数据依赖情况,如图3是一段包含一个分支的程序片段,在这个程序片断中指令1决定着指令2-7是否执行,所以指令2-7对指令1有控制依赖。指令2-7是基本的程序块,其中的函数为宏,在这个基本块中,指令3对指令2,指令5对指令4具有数据以来,而指令6对指令3存在着反向的以来关系。图3(a)是程序片段的联合依赖关系图,其中用虚线表示出来的是指令2-7对指令1的控制依赖关系,图3(b)是对图3(a)的一个双线程分解,在这个分解中多出了一条指令1’,指令1与指令1’之间存在着控制变量值的传递,指令457对指令1’存在控制依赖。图3(c)是对图3(a)的三线程分解,如同双线程的分解,这里指令1需要把控制变量的值传递给1’和1”。在线程3中,可以看到指令7先于指令6执行,这是由于指令6依赖于线程2的指令4。
循环中存在依赖关系主要也是控制依赖,这种依赖关系类似分支当中的依赖,所以循环的分解类似于分支的分解。图4是一段包含一个非嵌套循环的程序片段,在这个程序片段中包含了全部的依赖关系,指令2控制了指令3-8的执行,指令8反向依赖于指令2-7,而指令2-7又对1具有数据的依赖关系,指令3-8是一个基本程序块,按照基本程序块的分析判断指令执行的先后顺序。图4(b)是对图4(a)的分解,如同前面对分支的分解,分解后控制条件的值需要进行传递;
(四)生产者消费者通信模式及硬件实现:
线程分解以后的通信代价很大程度上决定了分解的可行性,不合理的分解会导致过高的线程通信代价,从而使得线程分解与并行执行毫无意义。分解后线程之间的通信通过生产者消费者方式解决,生产者消费者需要在仓库中存储和消费所通信的值,为了能够更快的完成生产者消费者,减少通信代价,一种硬件的实现可以有效的改进效率。但是在硬件的实现中,需要编译器的额外支持,有两条新指令(produce和consume)会被加入到编译器中用来控制生产者消费者的硬件部件,完成通信。
图6是生产者消费者硬件实现的结构框架图,在图中以一个芯片上集成两个处理器为例。中间的仓库由一个缓存器和一个控制器构成,缓存器用于缓存线程之间的通信数据,而控制器则是控制处理器对仓库的访问。仓库的访问是排他的,这由控制器控制,当有一条生产指令或者消费指令访问仓库内数据的时候,其他的生产指令和消费指令不允许访问仓库,控制器内部有两个队列,一个是生产队列,一个是消费队列,当有生产者或者消费者访问仓库时,访问指令首先需要被缓存在队列中然后由控制器来决定生产者和消费者指令的执行。当生产者所要写入的单元满或者消费者需要读取的单元空时,这些指令都是不会被写入队列的,而且遇到这样的指令会使得处理器等待。
仓库中的每个存储单元具有一些标志位,其中full标记是一个8位长的标志,用来表示该单元中的数据将会被消费几次,如果full标记为0,则表示这个单元是空的。Read标记是一个一位长的标记,如果被置位则表示有消费者需要取该存储单元中的内容。
又两条指令来控制进程对仓库的读和写,他们分别是produce和consume,他们在处理器中被实现成整形指令。produce的格式是操作码、寄存器、立即数1和立即数2,其中寄存器中存放是的将被存入仓库的值,立即数1表示将被存入仓库中的哪个单元,立即数2是这个值被消费的次数,被放入full标志位中。consume的格式是操作码、寄存器、立即数和零,寄存器中将存放从仓库读入的值,立即数指示读仓库中的那个值。指令执行单元中整形ALU的输出将作为仓库中控制器的输入,控制器根据ALU的输出值控制仓库的存取。
线程在分解后插入生产者消费者指令是由编译器设定的,编译器需要知道仓库的单元数。在线程通信的过程中,生产者生产的某个值将存入仓库的哪个单元是由编译器预先静态指定的,消费者的消费方式也一样。
(五)分解后线程间通信的一个特殊例子考虑:
对于生产者消费者的实现,有一个特殊的例子需要被考虑,当消费者消费的值有可能来自分支或循环内部,也有可能来之分支或循环前面时生产者需要在一个特定的点生产或者向仓库中的同一个单元进行生产,不然消费者得到的值可能是错误的或者过时的。
这种特殊情况的图例如图7所示,这时指令6所读到的j有可能是来自循环或者分支内部,也有可能来自指令1,对于这样的情况,需要对原先分解的线程做出调节,把指令1以及控制条件下面含有j的指令分配在同一个线程中。
Claims (1)
1.一种基于数据流分析的单线程程序并行化的实现方法,其特征在于:
1)分解算法的实现:
分解算法是把单线程程序分解成多个线程的算法实现,这个算法根据联合依赖关系图当中的指令依赖性,把单个线程分解成两个或多个线程,分解算法是一个递归的过程,它首先作出非嵌套循环或者无循环部分的联合依赖关系图,根据原程序中指令执行的时间以及数据依赖关系,向图中的节点和边的添加属性,之后是图的分解过程,分解算法考虑的是分解后线程的通信代价和线程之间的平衡性,把图中的节点分配到不同的组中,组成不同的线程,然后向线程中插入生产者消费者指令,分解后,被分解的部分被当作一个节点插入原来代码当中,分解算法继续分解新组成的代码中的非嵌套循环部分,如此递归进行,直到分解完整个需要分解的代码;
2)根据指令依赖关系作出联合依赖关系图:
单线程程序指令之间存在两种依赖关系,分别是指令之间的数据依赖和控制依赖。当单线程程序别分解成多个线程而并行执行的时候,还存在反向的数据依赖关系。联合依赖关系图是混合这三种依赖关系的图,它的作法是这样的:首先以程序中的指令作为图的节点,然后根据指令之间的依赖关系添加上述的三种依赖关系。在添加完依赖关系以后,以图中不存在依赖的节点为起始节点,消除与这些节点连接的所有边,查找图中新的不存在依赖的节点,取出这些节点加入到起始节点的集合中,在起始节点的集合中添加新节点与旧节点在程序执行中的先后关系,消除新节点在原来依赖图中所有与之相连的边。这样循环进行直到所有节点被添加到起始节点集合为止;
3)函数、过程内联和程序中三种基本元素的分解:
函数和过程会使指令流跳出到被分解部分的代码,这使得分解过程难以继续进行,因此需要把被分解代码部分内的函数和过程被内联进来。基本块、条件分支和循环是程序的三种基本元素,循环被分解算法作为基本分解单元,分支和循环需要控制条件值的传递,基本块可以被直接分解,但会存在数据依赖和反向数据依赖;
4)生产者消费者通信模式及硬件实现:
分解后线程之间的通信通过生产者消费者方式解决,生产者消费者需要在仓库中存储和消费所通信的值,如果以内存为仓库,由于内存的速度慢,对内存的读写影响分解后线程的性能,为了能够更快的完成生产者消费者,减少通信代价,一种硬件的实现可以有效的改进效率;
5)分解后线程间通信的一个特殊例子考虑:
对于生产者消费者的实现,有一个特殊的例子需要被考虑,当消费者消费的值有可能来自分支或循环内部,也有可能来之分支或循环前面时生产者需要在一个特定的点生产或者向仓库中的同一个单元进行生产,不然消费者得到的值可能是错误的或者过时的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100971476A CN101515231A (zh) | 2009-03-23 | 2009-03-23 | 基于数据流分析的单线程程序并行化的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100971476A CN101515231A (zh) | 2009-03-23 | 2009-03-23 | 基于数据流分析的单线程程序并行化的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101515231A true CN101515231A (zh) | 2009-08-26 |
Family
ID=41039695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009100971476A Pending CN101515231A (zh) | 2009-03-23 | 2009-03-23 | 基于数据流分析的单线程程序并行化的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101515231A (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101860752A (zh) * | 2010-05-07 | 2010-10-13 | 浙江大学 | 一种针对嵌入式多核系统的视频编码流水化并行方法 |
CN101916185A (zh) * | 2010-08-27 | 2010-12-15 | 上海交通大学 | 多核平台下串行程序运行时的自动并行化加速方法 |
CN102449605A (zh) * | 2010-06-14 | 2012-05-09 | 松下电器产业株式会社 | 多线程并行执行装置、广播流再现装置、广播流储存装置、储存流再现装置、储存流再编码装置、集成电路、多线程并行执行方法、多线程编译器 |
CN102455933A (zh) * | 2010-10-22 | 2012-05-16 | 深圳市科陆电子科技股份有限公司 | 一种通过线程管理提高多任务处理效率的方法 |
CN103383654A (zh) * | 2012-05-03 | 2013-11-06 | 百度在线网络技术(北京)有限公司 | 调节mapper在多核上执行的方法及装置 |
CN103649907A (zh) * | 2011-05-13 | 2014-03-19 | 益焦.com有限公司 | 高度并发处理任务的记录和执行 |
CN103677753A (zh) * | 2012-09-20 | 2014-03-26 | 艾默生零售解决方案公司 | 多任务控制方法、设备以及工业控制系统 |
WO2014111758A1 (en) * | 2013-01-15 | 2014-07-24 | International Business Machines Corporation | Confidence threshold-based opposing branch path execution for branch prediction |
CN103955406A (zh) * | 2014-04-14 | 2014-07-30 | 浙江大学 | 一种基于超级块的投机并行化方法 |
CN103984529A (zh) * | 2014-05-15 | 2014-08-13 | 中国人民解放军国防科学技术大学 | 基于飞腾处理器的x图形系统并行加速方法 |
CN104380344A (zh) * | 2013-03-12 | 2015-02-25 | 梦工厂动画公司 | 用于并行依赖图评估的可视化工具 |
CN104794128A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置 |
CN105260165A (zh) * | 2015-10-10 | 2016-01-20 | 西安交通大学 | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
CN106095396A (zh) * | 2016-06-20 | 2016-11-09 | 国家海洋局第海洋研究所 | 循环折叠cpu流水线优化方法 |
CN109375991A (zh) * | 2017-08-10 | 2019-02-22 | 中国石油化工股份有限公司 | 一种将单进程改造为多进程的方法及系统 |
CN109669772A (zh) * | 2018-12-28 | 2019-04-23 | 第四范式(北京)技术有限公司 | 计算图的并行执行方法和设备 |
CN110069347A (zh) * | 2019-04-29 | 2019-07-30 | 河南科技大学 | 一种基于过程重要度的线程划分方法 |
CN112257362A (zh) * | 2020-10-27 | 2021-01-22 | 海光信息技术股份有限公司 | 逻辑代码的验证方法、验证装置以及存储介质 |
CN112559054A (zh) * | 2020-12-22 | 2021-03-26 | 上海壁仞智能科技有限公司 | 用于同步指令的方法和计算系统 |
CN114443139A (zh) * | 2022-01-27 | 2022-05-06 | 上海壁仞智能科技有限公司 | 将顺序代码转换为并行代码的方法、系统、设备和介质 |
-
2009
- 2009-03-23 CN CNA2009100971476A patent/CN101515231A/zh active Pending
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101860752A (zh) * | 2010-05-07 | 2010-10-13 | 浙江大学 | 一种针对嵌入式多核系统的视频编码流水化并行方法 |
CN102449605B (zh) * | 2010-06-14 | 2015-10-07 | 松下电器产业株式会社 | 多线程并行执行装置、广播流再现装置、广播流储存装置、储存流再现装置、储存流再编码装置、集成电路、多线程并行执行方法、多线程编译器 |
CN102449605A (zh) * | 2010-06-14 | 2012-05-09 | 松下电器产业株式会社 | 多线程并行执行装置、广播流再现装置、广播流储存装置、储存流再现装置、储存流再编码装置、集成电路、多线程并行执行方法、多线程编译器 |
CN101916185A (zh) * | 2010-08-27 | 2010-12-15 | 上海交通大学 | 多核平台下串行程序运行时的自动并行化加速方法 |
CN101916185B (zh) * | 2010-08-27 | 2013-07-03 | 上海交通大学 | 多核平台下串行程序运行时的自动并行化加速方法 |
CN102455933A (zh) * | 2010-10-22 | 2012-05-16 | 深圳市科陆电子科技股份有限公司 | 一种通过线程管理提高多任务处理效率的方法 |
CN102455933B (zh) * | 2010-10-22 | 2014-01-15 | 深圳市科陆电子科技股份有限公司 | 一种通过线程管理提高多任务处理效率的方法 |
CN103649907B (zh) * | 2011-05-13 | 2016-09-21 | 益焦.com有限公司 | 高度并发处理任务的记录和执行 |
CN103649907A (zh) * | 2011-05-13 | 2014-03-19 | 益焦.com有限公司 | 高度并发处理任务的记录和执行 |
CN103383654A (zh) * | 2012-05-03 | 2013-11-06 | 百度在线网络技术(北京)有限公司 | 调节mapper在多核上执行的方法及装置 |
CN103383654B (zh) * | 2012-05-03 | 2017-03-15 | 百度在线网络技术(北京)有限公司 | 调节mapper在多核上执行的方法及装置 |
US10896112B2 (en) | 2012-08-03 | 2021-01-19 | Dreamworks Animation Llc | Visualization tool for parallel dependency graph evaluation |
CN103677753A (zh) * | 2012-09-20 | 2014-03-26 | 艾默生零售解决方案公司 | 多任务控制方法、设备以及工业控制系统 |
CN104919418A (zh) * | 2013-01-15 | 2015-09-16 | 国际商业机器公司 | 用于分支预测的基于置信度阈值的相对路径执行 |
WO2014111758A1 (en) * | 2013-01-15 | 2014-07-24 | International Business Machines Corporation | Confidence threshold-based opposing branch path execution for branch prediction |
US9348599B2 (en) | 2013-01-15 | 2016-05-24 | International Business Machines Corporation | Confidence threshold-based opposing branch path execution for branch prediction |
CN104919418B (zh) * | 2013-01-15 | 2018-01-02 | 国际商业机器公司 | 用于分支预测的系统、方法及存储介质 |
US9519485B2 (en) | 2013-01-15 | 2016-12-13 | International Business Machines Corporation | Confidence threshold-based opposing branch path execution for branch prediction |
CN104380344A (zh) * | 2013-03-12 | 2015-02-25 | 梦工厂动画公司 | 用于并行依赖图评估的可视化工具 |
CN104794128A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置 |
CN104794128B (zh) * | 2014-01-20 | 2018-06-22 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置 |
CN103955406A (zh) * | 2014-04-14 | 2014-07-30 | 浙江大学 | 一种基于超级块的投机并行化方法 |
CN103984529B (zh) * | 2014-05-15 | 2016-06-22 | 中国人民解放军国防科学技术大学 | 基于飞腾处理器的x图形系统并行加速方法 |
CN103984529A (zh) * | 2014-05-15 | 2014-08-13 | 中国人民解放军国防科学技术大学 | 基于飞腾处理器的x图形系统并行加速方法 |
CN105260165B (zh) * | 2015-10-10 | 2018-01-05 | 西安交通大学 | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
CN105260165A (zh) * | 2015-10-10 | 2016-01-20 | 西安交通大学 | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
CN106095396A (zh) * | 2016-06-20 | 2016-11-09 | 国家海洋局第海洋研究所 | 循环折叠cpu流水线优化方法 |
CN109375991A (zh) * | 2017-08-10 | 2019-02-22 | 中国石油化工股份有限公司 | 一种将单进程改造为多进程的方法及系统 |
CN109375991B (zh) * | 2017-08-10 | 2021-07-27 | 中国石油化工股份有限公司 | 一种将单进程改造为多进程的方法及系统 |
CN109669772A (zh) * | 2018-12-28 | 2019-04-23 | 第四范式(北京)技术有限公司 | 计算图的并行执行方法和设备 |
CN110069347A (zh) * | 2019-04-29 | 2019-07-30 | 河南科技大学 | 一种基于过程重要度的线程划分方法 |
CN110069347B (zh) * | 2019-04-29 | 2022-10-25 | 河南科技大学 | 一种基于过程重要度的线程划分方法 |
CN112257362A (zh) * | 2020-10-27 | 2021-01-22 | 海光信息技术股份有限公司 | 逻辑代码的验证方法、验证装置以及存储介质 |
CN112559054A (zh) * | 2020-12-22 | 2021-03-26 | 上海壁仞智能科技有限公司 | 用于同步指令的方法和计算系统 |
CN112559054B (zh) * | 2020-12-22 | 2022-02-01 | 上海壁仞智能科技有限公司 | 用于同步指令的方法和计算系统 |
CN114443139A (zh) * | 2022-01-27 | 2022-05-06 | 上海壁仞智能科技有限公司 | 将顺序代码转换为并行代码的方法、系统、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101515231A (zh) | 基于数据流分析的单线程程序并行化的实现方法 | |
Sutter et al. | Coarse-grained reconfigurable array architectures | |
EP3350709B1 (en) | Distinct system registers for logical processors | |
Burger et al. | Scaling to the end of silicon with EDGE architectures | |
Nagarajan et al. | A design space evaluation of grid processor architectures | |
JP6525286B2 (ja) | プロセッサコア及びプロセッサシステム | |
Yang et al. | Energy-aware runtime scheduling for embedded-multiprocessor SOCs | |
KR100497078B1 (ko) | 프로그램 제품 및 데이터 처리장치 | |
Yazdanpanah et al. | Hybrid dataflow/von-Neumann architectures | |
US8250555B1 (en) | Compiling code for parallel processing architectures based on control flow | |
US20170083314A1 (en) | Initiating instruction block execution using a register access instruction | |
EP3660668A1 (en) | Block-based architecture with parallel execution of successive blocks | |
Yi et al. | An ILP formulation for task mapping and scheduling on multi-core architectures | |
JP2007328415A (ja) | ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ | |
JP2003099248A (ja) | プロセッサ、コンパイル装置及びコンパイル方法 | |
CN101807144A (zh) | 一种前瞻多线程并行执行优化方法 | |
US20140137123A1 (en) | Microcomputer for low power efficient baseband processing | |
CN101464965B (zh) | 一种基于tbb的多核并行蚁群设计方法 | |
Madriles et al. | Mitosis: A speculative multithreaded processor based on precomputation slices | |
Voitsechov et al. | Inter-thread communication in multithreaded, reconfigurable coarse-grain arrays | |
CN101655783B (zh) | 前瞻多线程划分方法 | |
WO2004003738A2 (en) | Generating code for a configurable microprocessor | |
Capalija et al. | Microarchitecture of a coarse-grain out-of-order superscalar processor | |
Kessler et al. | Static scheduling of moldable streaming tasks with task fusion for parallel systems with DVFS | |
Seo et al. | Memory allocation and mapping in high-level synthesis-an integrated approach |
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 |
Open date: 20090826 |