CN104699464B - 一种基于依赖网格的指令级并行调度方法 - Google Patents
一种基于依赖网格的指令级并行调度方法 Download PDFInfo
- Publication number
- CN104699464B CN104699464B CN201510135304.3A CN201510135304A CN104699464B CN 104699464 B CN104699464 B CN 104699464B CN 201510135304 A CN201510135304 A CN 201510135304A CN 104699464 B CN104699464 B CN 104699464B
- Authority
- CN
- China
- Prior art keywords
- instruction
- dependence
- grid
- target
- priority
- 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.)
- Active
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种基于依赖网格的指令级并行调度方法,步骤包括:1)获取目标基本块中指令之间的数据依赖关系以及各指令所对应的功能单元的信息,根据数据依赖关系设置并计算各指令的数据依赖优先级值;2)按数据依赖优先级值以及功能单元划分各指令,将划分得到的结果按网格形式进行存储,建立得到指令与数据依赖优先级、功能单元之间依赖关系的依赖网格;3)按照步骤2)得到的依赖网格中指令的数据依赖优先级、指令与功能单元之间的关系进行指令间的并行性分析。本发明结合数据依赖关系和功能单元分配关系,能够同时描述指令间的并行关系以及与硬件结构之间的相关性,具有实现方法简单、适用范围广、指令级并行度高的优点。
Description
技术领域
本发明涉及编译优化技术领域,尤其涉及一种基于依赖网格描述的指令级并行调度方法。
背景技术
在一个基本块中,指令之间最基本的关联关系之一是数据流造成的数据依赖约束,它决定了程序的运行结果。在现代的流水线处理器和超标量处理器中,可以通过指令重排来提高代码的并行度以发挥先进的体系结构优势,但这种指令重排技术需要建立在了解基本块内指令间并行性的基础上才能进行。因此,在指令重排之前或在进行指令重排过程中,一项重要的工作就是对基本块内指令间的并行性进行识别。
现有技术中,对基本块中指令进行重排的基本方法主要为表调度方法,这种方法对指令间并行性的识别是依赖于一个描述基本块中指令间数据依赖关系的无环有向图(DAG, Directed Acyclic Graph),称为基本块的依赖DAG。表调度方法在指令调度过程中,通过基本块的依赖DAG中描述的指令间数据依赖关系能够在每个时间点获取调度的候选指令集合Cands,进而根据一定的方案从候选指令集合Cands中选择一条指令,余下的指令在下一个时间点重新处理。对于超标量处理器,由于在指令调度过程中,需要考虑将多条指令形成可同时流出的指令组,因此在基于依赖DAG的表调度方法的基础上,还需要为每个可并行执行的部件建立各自的数据结构,使得能够在每个时间点为每个功能单元获得相应的候选指令集合Cands。
综上所述,上述基于依赖DAG的表调度方法存在以下问题:
1)该方法虽然描述了指令间的数据依赖关系,但并没有表现指令间的其他关联关系,尤其是与目标系统硬件相关的关系,因而在执行调度过程中无法确定指令与硬件结构的相关性;
2)对于多功能单元的VLIW(Very Long Instruction Word,超长指令字)体系结构,由于该方法不能体现指令间因功能单元不同而造成的各功能单元之间的相关性,因而该方法在VLIW体系结构中不适于使用更激进或更具前瞻性的指令重排技术,不利于更充分地发掘体系结构特征带来的基本块内指令间并行性;
3)对于多功能单元的VLIW体系结构,由于该方法不能反映各功能单元的实时工作量,也不能实时地反映指令之间、指令与功能单元之间的关系,因此当某些指令能够在多个功能单元中的任意一个中执行时,该方法无法与功能单元分配相结合来让指令调度产生更适应体系结构的优化结果。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、适用范围广、指令级并行度高的基于依赖网格描述的指令级并行调度方法,能够结合数据依赖关系和功能单元分配关系,同时描述指令间的并行关系以及与硬件结构之间的相关性。
为解决上述技术问题,本发明提出的技术方案为:
一种基于依赖网格描述的指令级并行调度方法,步骤包括:
1)获取目标基本块中指令之间的数据依赖关系以及各指令所对应的功能单元的信息,根据所述数据依赖关系设置并计算各指令的数据依赖优先级值;
2)按所述数据依赖优先级值以及功能单元划分各指令,将划分得到的结果按网格形式进行存储,建立得到指令与数据依赖优先级、功能单元之间依赖关系的依赖网格;
3)按照步骤2)得到的依赖网格中指令的数据依赖优先级、指令与功能单元之间的关系进行指令间的并行性分析。
作为本发明的进一步改进:查询目标基本块中所有已确定对应物理功能单元的第一目标指令,并获取每条所述第一目标指令对应的物理功能单元的信息;查找基本块中所有未确定对应物理功能单元的第二目标指令,并获取每条所述第二目标指令对应的多种组合功能单元的信息,所述组合功能单元为所述第二目标指令对应的所有物理功能单元根据所构成的可能组合。
作为本发明的进一步改进,步骤2)的具体实施步骤为:
2.1)遍历各指令,并将各指令按照数据依赖优先级划分为多个指令组;
2.2)遍历所述步骤2.1)得到的各指令组,将各指令组中所有已确定对应物理功能单元的第一目标指令按照所对应的所述物理功能单元进行划分,得到多个第一指令子组;将各指令组中所有未确定对应物理功能单元的第二目标指令按照所对应的所述组合功能单元进行划分,得到多个第二指令子组;
2.3)构建一个用于存储所述指令子组的二维表结构,所述二维表中行向量对应指令的各数据依赖优先级,每行的行号对应数据依赖优先级值,列向量分为对应各物理功能单元的第一部分、对应各组合功能单元的第二部分,每个数据依赖优先级值与一个物理功能单元或组合功能单元对应所述二维表的一个网格单元格;将各所述第一指令子组按照数据依赖优先级值、物理功能单元分别保存至所述二维表的第一部分各网格存储空间中,将各所述第二指令子组按照数据依赖优先级、组合功能单元分别保存至所述二维表的第二部分各网格存储空间中,由所述二维表的第一部分、第二部分构成指令与数据依赖优先级、功能单元之间依赖关系的依赖网格。
作为本发明的进一步改进,步骤1.1)中计算各指令的数据依赖优先级值的具体实施步骤为:
1.1)分别为各指令定义一个数据依赖优先级值并初始化为0;
1.2)从第二条指令开始,依次遍历基本块中各条指令计算对应的数据依赖优先级值,每条指令计算时,按逆序遍历当前指令的前一条指令与首条指令之间的所有目标指令,判断目标指令中是否存在与当前指令有依赖关系的依赖指令,如果有这样的依赖指令,将查找到的所有所述依赖指令中最大的数据依赖优先级值加1后作为当前指令的数据依赖优先级值。作为本发明的进一步改进,所述步骤1.2)中查找出所有与当前指令有依赖关系的指令的具体实施步骤为:
1.21)将当前指令中任意一个源变量作为目标源变量,在当前指令之前的所有指令中查找出对目标源变量进行最后一次定值的指令,得到目标源变量的最后一次定值指令,并将所述最后一次定值指令作为一条与当前指令有依赖关系的依赖指令;
1.22)取下一个源变量作为目标源变量,重复执行步骤1.21),直至完成对当前指令中所有源变量的最后一次定值指令的查找,得到所有与当前指令有依赖关系的依赖指令。
作为本发明的进一步改进,步骤3)后还包括依赖网格动态调整步骤4),具体实施步骤为:
4.1)当所述依赖网格中处于最高数据依赖优先级的待移除指令在本拍将被移除时,将所述待移除指令作为当前目标指令,并将所述待移除指令所对应的数据依赖优先级作为当前参照数据依赖优先级,转入执行步骤4.2);
4.2)在所述依赖网络的数据依赖优先级比所述参照数据依赖优先级低一级的对应行中,查找出与所述当前目标指令有依赖关系的所有依赖指令作为待调整指令,并分别获取每条所述待调整指令对应的所述依赖指令中最大数据依赖优先级值,将获取得到的所述最大数据依赖优先级值加1后分别作为对应的所述待调整指令调整后的数据依赖优先级值;然后将所述待调整指令按照调整后的数据依赖优先级值调整到依赖网格中对应的位置,转入执行步骤4.3);
4.3)以调整后的指令作为当前目标指令,并将所述调整后的指令的优先级作为当前参照数据依赖优先级,返回执行步骤4.2),直至执行到没有指令被调整或者到达最小的数据依赖优先级对应的那一行。
作为本发明的进一步改进,所述步骤3)中并行性分析具体包括识别指令之间逻辑并行性步骤,具体实施步骤为:获取所述依赖网格中处于目标数据依赖优先级的所有指令,得到与目标数据依赖优先级对应逻辑时间点的所有并行指令。
作为本发明的进一步改进,所述步骤3)中并行性分析具体包括识别功能单元候选指令集步骤,具体实施步骤为:获取所述依赖网格中对应目标功能单元且处于目标数据依赖优先级的所有指令,得到目标功能单元在目标数据依赖优先级所对应的逻辑时间点的候选指令集。
作为本发明的进一步改进,所述步骤3)中并行性分析具体包括获取目标执行单元工作量步骤,具体实施步骤为:统计所述依赖网格中对应目标功能单元处于各数据依赖优先级的所有指令,得到目标执行单元在各逻辑时间点的工作量;统计所述依赖网格中对应目标功能单元的所有指令,得到目标执行单元的总工作量。
作为本发明的进一步改进,所述步骤3)中并行性分析具体还包括功能单元关联性分析步骤,具体实施步骤为:在所述依赖网络中,查找所有与目标功能单元对应的指令具有依赖关系的依赖指令,将查找到的依赖指令对应的功能单元作为与所述目标功能单元具有关联关系的关联功能单元;统计查找到的所述关联功能单元的数量,得到所述目标功能单元的关联功能单元量。
与现有技术相比,本发明的优点在于:
1)本发明结合数据依赖优先级以及功能单元分配关系建立依赖网格,将指令按照数据依赖优先级以及对应的功能单元进行划分,能够同时描述指令间的并行性以及与硬件结构之间的相关性,从而能够帮助相关编译优化过程更为充分地发挥硬件体系结构优势,同时提高基本块内指令级并行度。
2)本发明通过依赖网格能够方便的实现指令的逻辑并行性识别、功能单元可并行执行指令的识别以及各功能单元的工作量的获取等,还能够通过指令与功能单元的关系获取得到指令间因功能单元不同而造成的各功能单元之间的相关性;
3)本发明的依赖网格进一步包括组合功能单元,融入指令具有多候选功能单元的指令集特征,能够有效反映各功能单元在各逻辑时间点的工作总量,从而有利于将基本块的调度与功能单元分配有机结合起来。
附图说明
图1是本实施例基于依赖网格的指令级并行调度方法的实现流程示意图。
图2是本实施例中数据依赖优先级值的计算原理示意图。
图3是本实施例中依赖网格的结构原理示意图。
图4是本实施例中依赖网格动态调整的原理示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1所示,本实施例基于依赖网格的指令级并行调度方法,步骤包括:
1)获取目标基本块中指令之间的数据依赖关系以及各指令所对应的功能单元的信息,根据数据依赖关系设置并计算各指令的数据依赖优先级值;
2)按数据依赖优先级值以及功能单元划分各指令,将划分得到的结果按网格形式进行存储,建立得到指令与数据依赖优先级、功能单元之间依赖关系的依赖网格;
3)按照步骤2)得到的依赖网格中指令的数据依赖优先级、指令与功能单元之间的关系进行指令间的并行性分析。
本实施例针对具有多功能单元(多条流水线)特性的VLIW体系结构,通过建立指令与数据依赖优先级、功能单元之间依赖关系的依赖网格来描述指令与数据、硬件结构之间的相关性,能够充分发挥硬件体系结构优势,为提高基本块内指令级并行度提供支持。
需要说明的是,本实施例基本块中所指的指令序列为还没有确定指令并行以及执行指令的功能单元的汇编指令序列;VLIW体系结构的一个功能单元对应的一个指令槽,部分指令只能在某个指定的功能单元中执行,但有些指令可以在两个或两个以上功能单元中的任意一个中执行。
本实施例中,通过指令间逻辑执行顺序的优先级描述指令间的并行关系,指令的优先级代表着在某个时刻一条指令可能的最早逻辑发射时机,具有相同优先级的指令之间不具有数据依赖关系,数据依赖优先级值为指令对应的数据依赖优先级的表示值。步骤1.1)中计算各指令的数据依赖优先级值的具体实施步骤为:
1.1)分别为各指令定义一个数据依赖优先级值并初始化为0;
1.2)从第二条指令开始,依次遍历基本块中各条指令计算对应的数据依赖优先级值,每条指令计算时,按逆序遍历当前指令的前一条指令与首条指令之间的所有目标指令,判断目标指令中是否存在与当前指令有依赖关系的被依赖指令,如果有这样的被依赖指令,将查找到的所有被依赖指令中最大的数据依赖优先级值加1后作为当前指令的数据依赖优先级值。
本实施例中,步骤1.2)中查找出所有与当前指令有依赖关系的指令的具体实施步骤为:
1.21)将当前指令中任意一个源变量作为目标源变量,在当前指令之前的所有指令中查找出对目标源变量进行最后一次定值的指令,得到目标源变量的最后一次定值指令,并将最后一次定值指令作为一条与当前指令有依赖关系的依赖指令;
1.22)取下一个源变量作为目标源变量,重复执行步骤1.21),直至完成对当前指令中所有源变量的最后一次定值指令的查找,得到所有与当前指令有依赖关系的依赖指令。
如图2所示,假设指令M分别与指令X、Y、Z具有数据依赖关系(如图中虚线箭头所示),则指令M的数据依赖优先级值为指令X、Y、Z中数据依赖优先级值最大的那一个再加1,即指令M的数据依赖优先级值=Max( a,b,c)+1,其中a,b,c分别为指令X、Y、Z的数据依赖优先级值,Max表示求集合中的最大值。
本实施例具体是首先为基本块内的每条指令定义一个数据依赖优先级的属性,其值(数据依赖优先级值)为一个整数,通过该整数的值描述一条指令的最早发射时机(以拍为单位),且仅考虑指令间的数据相关性,而不考虑机器的最大指令并发能力和具体指令的执行延迟时间,即认为机器有足够多的功能单元来并行执行无数据相关的那些指令,且硬件对所有指令的处理时间相同。数据依赖优先级值从0开始增长,并且值越小,所对应的数据依赖优先级越高,指令间的数据相关性分析也即是计算出基本块内每条指令相应的数据依赖优先级值。
然后计算各指令的数据依赖优先值,详细实现步骤为:定义一个保存数据依赖优先级值的数组并根据基本块内的指令数量设定数组的大小,初始化该数组的每个元素的值为0;正序遍历基本块内的各指令,对于其中一条指令I,从指令I之前的那条指令开始向基本块的首指令逆序遍历分析,找出其中哪些指令确定了指令I的源变量的最后一次定值,直到指令I的所有源变量均查找到对应最后一次定值的指令,指令全部确定或者到达基本块开始处时终止逆序遍历分析过程,所有查找到的指令构成集合S;如果集合S不为空,将集合S指令中的最大的数据依赖优先级值加1后作为指令I的数据依赖优先级值。由各数据依赖优先值即可得到指令的硬件无关执行延迟时机,硬件无关执行延迟时机即为各指令中最大的数据依赖优先级值。
本实施例中,步骤1)中获取各指令所对应的功能单元的信息的具体实施步骤为:查询目标基本块中所有已确定对应物理功能单元的第一目标指令,并获取每条第一目标指令对应的物理功能单元的信息;查找基本块中所有未确定对应物理功能单元的第二目标指令,并获取每条第二目标指令对应的多种组合功能单元的信息,组合功能单元为第二目标指令对应的所有物理功能单元所构成的可能组合。组合功能单元具体是根据基本块中指令集的规定由物理功能单元构成可能组合。
指令集特征决定了一条指令可以在哪些执行单元中执行,这由该指令对应的指令模板决定,在某些指令集中,有部分指令可能有两个或两个以上的候选功能单元。本实施例将所有的可能候选功能单元组合用“组合功能单元”序列来描述,一个组合功能单元是两个或两个以上物理功能单元的组合(不分先后),组合功能单元的数量计为NEEU,处理器的物理功能单元数量(一般对应着指令执行包的指令槽数量)计为NPEU。
本实施例中,步骤2)的具体实施步骤为:
2.1)遍历各指令,并将各指令按照数据依赖优先级划分为多个指令组;
2.2)遍历步骤2.1)得到的各指令组,将各指令组中所有已确定对应物理功能单元的第一目标指令按照所对应的物理功能单元进行划分,得到多个第一指令子组;将各指令组中所有未确定对应物理功能单元的第二目标指令按照所对应的组合功能单元进行划分,得到多个第二指令子组;
2.3)构建一个用于存储指令子组的二维表结构,二维表中行向量对应指令的各数据依赖优先级,每行的行号对应数据依赖优先级值,列向量分为对应各物理功能单元的第一部分、对应各组合功能单元的第二部分,每个数据依赖优先级值与一个物理功能单元或组合功能单元对应二维表的一个网格单元格;将各第一指令子组按照数据依赖优先级值、物理功能单元分别保存至二维表的第一部分各网格单元格中,将各第二指令子组按照数据依赖优先级、组合功能单元分别保存至二维表的第二部分各网格单元格中,由二维表的第一部分、第二部分构成指令与数据依赖优先级、功能单元之间依赖关系的依赖网格。
本实施例将指令按数据依赖优先级划分为多个指令组以描述指令间的并行性,同一个指令组中的指令具有相同的逻辑发射时间,再将各指令组按照功能单元进行划分,将具有相同功能单元的指令划分为一组指令子组,以描述指令与功能单元之间的相关性。
本实施例通过虚拟功能单元表示机制描述指令与硬件结构之间的相关性,虚拟功能单元不仅包含硬件体系结构包含的物理功能单元,同时也包含多种物理功能单元构成的各种可能的组合而形成的组合功能单元,这些可能的组合来自指令集中部分指令的候选功能单元组合。将虚拟功能单元按一定的顺序编排,物理功能单元在前、组合功能单元在后,如图3所示,分别根据物理功能单元、组合功能单元将指令组划分为指令子组,在进行指令子组划分时,考虑的是NPEU和NEEU的总和,即NTEU= NPEU + NEEU,其中NTEU为总执行功能单元数。
本实施例通过定义一个存储指令子组信息的二维表结构存储各指令子组,二维表的第一维(行)和第二维(列)的长度分别为指令组的数量和总执行单元数NTEU,由二维表构成一个网格,每个网格单元为一个指令集合,保存一个指令子组。指令子组也是一个指令集合,只是这些指令属于同一个功能单元。网格的行号对应数据依赖优先级值,表示指令的逻辑发射时间,网格的列号对应指令所在的功能单元,列号较小和较大部分分别对应指令的物理功能单元以及组合功能单元。划分得到指令组后,遍历每个指令组中的每条指令,分析其应该处于哪个物理功能单元或组合功能单元,再将指令填写到上述建立二维表中相应网格的指令子组中。二维表格所构成的指令子组网格即为依赖网格,依赖网格反映了某个时刻各执行单元在未来的各指令节拍中有哪些指令需要处理。
本实施例中依赖网格如图3所示,在指令的数据依赖优先级和虚拟功能单元两种表示下建立二维表格,表格中n表示物理功能单元数量,m表示组合功能单元数量,一个o表示一条指令,o..o则表示多条指令,二维表格的行号对应数据依赖优先级值,前n列表示处理器的n个物理功能单元,后m列则表示可能的m种候选功能单元组合。表格的各行对应各数据依赖优先级值,各列对应各虚拟功能单元,网格中一个格子(单元格)所存储的内容即是在数据依赖优先值对应的某个逻辑时刻某个虚拟功能单元的候选指令构成的集合。
基于上述得到的依赖网格,可以非常直观地获得VLIW体系结构下基本块内指令之间的静态并行性,包括:①指令之间的逻辑并行关系,即哪些指令可以并行执行;②指令间因功能单元产生的并行关系,即哪些指令可以在某个功能单元中并行执行。基于依赖网格,还可以方便地获得VLIW体系结构下基本块内指令之间的如下动态并行关系,包括指令之间动态的逻辑并行关系,以及未来功能单元间的关联性。
本实施例中,步骤3)中并行性分析具体包括识别指令之间逻辑并行性步骤,具体实施步骤为:获取依赖网格中处于目标数据依赖优先级的所有指令,得到与目标数据依赖优先级对应逻辑时间点的所有并行指令。通过依赖网格可以方便的实现识别指令的逻辑并行性,具有相同数据依赖优先级值的指令都是在依赖网格中的同一行,这些指令在逻辑上(即不考虑硬件的限制)是可以同时发射的。如果在优化过程中指令移到新的行中,它就具有相应的数据依赖优先级值,从而与相应行中的指令自然地构成逻辑并行关系,不需要在下一个时间点重新分析。
本实施例中,步骤3)中并行性分析具体还包括识别功能单元候选指令集合步骤,具体实施步骤为:获取依赖网格中对应目标功能单元且处于目标数据依赖优先级的所有指令,得到目标功能单元在目标数据依赖优先级所对应的逻辑时间点的候选指令集合。通过依赖网格可以方便的实现为某个功能单元可并行执行指令的识别,在依赖网格的一行中,不同的列表示不同的功能单元。这一方面可以直观地获得不同功能单元的候选指令集合,即在当前时间点哪些指令可以在哪些单元中执行这一并行性,另一方面可以获得功能单元之间因指令间数据依赖而产生的关联,可用于进一步分析功能单元之间的关联关系所引起的并行性问题。
本实施例中,步骤3)中并行性分析具体还包括获取目标执行单元工作量步骤,具体实施步骤为:统计依赖网格中对应目标功能单元处于各数据依赖优先级的所有指令,得到目标执行单元在各逻辑时间点的工作量;统计依赖网格中对应目标功能单元的所有指令,得到目标执行单元的总工作量。通过遍历依赖网格中的各单元格,对单元格中的指令计数,然后遍历依赖网格的各列,计算出列的指令总数,即可获得各逻辑节拍上各执行单元的工作量以及总的工作量。
本实施例通过依赖网格还能够识别未来一个节拍的并行性,根据前后两个数据依赖优先级值对应的指令间的数据依赖关系,可以由功能单元间的关联性分析出某个功能单元的指令执行时对其他功能单元在未来的候选指令集合的内容的影响。
本实施例还可以通过依赖网格获取某个功能单元因某条候选指令而与其他功能单元产生的关联关系,步骤3)中并行性分析还包括关联功能单元分析步骤,具体实施步骤为:在依赖网络中,查找所有与目标功能单元对应的指令具有依赖关系的依赖指令,将查找到的依赖指令对应的功能单元作为与目标功能单元具有关联关系的关联功能单元;统计查找到的关联功能单元的数量,得到目标功能单元的关联功能单元量。通过依赖网格中对指令所从属的功能单元的描述,可以直接确定由数据依赖相关联的两个功能单元,在此基础上,通过对各候选指令所引起的关联单元计数,可以获得它们所引起的关联单元的数量信息,进而计算出与之有关的关联单元数。
本实施例中,步骤3)后还包括依赖网格动态调整步骤4),具体实施步骤为:
4.1)当依赖网格中处于最高数据依赖优先级的待移除指令在本拍将被移除时,将待移除指令作为当前目标指令,并将待移除指令所对应的数据依赖优先级作为当前参照数据依赖优先级,转入执行步骤4.2);
4.2)在依赖网络的数据依赖优先级比参照数据依赖优先级低一级的对应行中,查找出与当前目标指令有依赖关系的所有依赖指令作为待调整指令,并分别获取每条待调整指令对应的依赖指令中最大数据依赖优先级值,将获取得到的各最大数据依赖优先级值加1后分别作为对应待调整指令调整后的数据依赖优先级值;然后将待调整指令按照调整后的数据依赖优先级值调整到依赖网格中对应的单元格中,转入执行步骤4.3);
4.3)以调整后的指令作为当前目标指令,并将调整后的指令的优先级作为当前参照数据依赖优先级,返回执行步骤4.2),直至执行到没有指令被调整或者到达最小的数据依赖优先级对应的那一行。如图4所示,Oa, Ob, Oc表示某三条存在传送依赖关系的指令,图中虚线箭头表示数据依赖关系,且所虚线箭头指向的方向被依赖方,若依赖网格中处于第一行(数据依赖优先级最高)的指令Oa被移除,经过动态调整后,将依赖指令Oa的指令Ob的数据依赖优先级增加一级并调整位置,相应的,依赖指令Ob的指令Oc的数据依赖优先级增加一级并调整位置。
本实施例针对具有多功能单元(多条流水线)特性的VLIW体系结构,通过依赖网格将指令间与数据和硬件有关的相关性清晰地表现出来,为相关的代码优化过程中识别并行性提供数据和相关信息,能够为充分发挥硬件体系结构优势、提高基本块内指令级并行度提供新的思路。
以下以面向对象语言设计实现本发明基于依赖网格的指令级并行调度方法为例进行进一步说明。
本实施例中,为了实现依赖网格表示,需要相关数据结构的支持,所构造的数据结构包括:
基本块的指令序列(instns):用于提供按顺序访问基本块中各指令的途径,它可以是一个链表或其他支持顺序访问的数据结构,其中保存的是指令对象的指针。
指令的数据依赖优先级值表:该表的长度与指令序列的长度相同,每项为一个非负整数,用于存储指令的数据依赖优先级值。
指令组:用于存储数据依赖优先级值相同指令(或指令指针)的集合,即存储逻辑上可以同时发射指令(或指令指针)的集合。实际应用时,可以专门设计指令组类,然后通过相应的对象来保存指令组中的指令,也可以将其中的指令保存在链表等常规数据结构中。
指令组序列(instnGroups):用于存储按指令的数据依赖优先级值划分得到的各指令组所构成的序列,该序列中,后一组中的指令必须在其前一组中相应的数据依赖指令执行完毕之后才能执行。
指令子组二维表(instnGroupsForUnits):该表即依赖网格,定义一个二维矩阵存储,每个矩阵元(网格)存储一个指令子组。该表的第一维的大小是数据依赖优先级的数量,第二维的大小是总的执行单元数量,该表也可为动态变化的表。
指令间的数据依赖关系的枚举类型:包括数据读写数据依赖关系类型和访存数据依赖关系类型,此外,也可包括由体系结构决定的其他隐式数据依赖关系类型。
执行单元的枚举类型:包括物理执行单元的枚举值、扩展的起辅助作用的组合执行单元的枚举值。枚举值从0开始增长,先是所有的物理执行单元的枚举,然后才是扩展的辅助执行单元的枚举。该枚举类型定义在处理器的体系结构类中,枚举值是连续变化的,每一个功能单元都对应一个唯一的枚举值,对于扩展的辅助执行单元,需要考虑所有可能的组合。
实时的有效指令组数量(effectiveInstnGroupNum):该值为一个非负整数,用于保存在某个时刻依赖网格中仍然保存了有效指令的行数。由于在某些代码优化过程中依赖网格中的指令会逐步移除,因而某个网格中的某些指令会要移动到优先级更高的同列网格中,从而使得保存着有效指令的行数减少。
在面向对象语言程序中,数据和相关的功能模块都封装在类中。本实施例中,基本块和基本块中的指令的基本信息保存在基本块类对象和指令类对象之中,指定执行相应指令的候选功能单元信息包含在指令模板信息中并保存在指令模板类的对象中,各指令对象具有确定的指令模板;体系结构的基本信息保存在体系结构类对象中,通过指针或者全局变量名进行访问。
步骤1:指令的数据依赖优先级值计算
获取到指令间的数据依赖关系后,进行指令间的数据依赖关系分析,计算指令间的数据依赖优先级值,划分数据依赖优先级,步骤如下:
①将指令的数据依赖优先级值表中的元素个数设计为与指令数量相同,并将各元素的值初始化为0;
②通过循环正序遍历基本块内的各指令,每次循环处理的指令设为curInstn,循环执行步骤③~⑩查找依赖指令;
③形成curInstn涉及的源变量集合和目标变量集合,然后,为每个变量设置一个依赖关系解除标识,当变量依赖解除标识的状态和访存依赖解除标识的状态都为解除时,结束对curInstn的依赖指令的寻找;
④将变量依赖关系解除标识置为未解除状态,并根据指令是否为访存类指令来设置访存依赖关系解除标识的状态为解除(针对非访存类指令)或未解除(针对访存类指令);
⑤从curInstn的前一条指令开始,通过循环向基本块的首指令逆序遍历各指令,每次循环处理的指令设为preInstn,并执行步骤⑥;
⑥分析curInstn对preInstn的数据依赖类型的组合,当存储数据依赖时,生成preInstn的源变量集合和目标变量集合,并且,如果依赖类型中是否含有写后写和写后读及类似的依赖,设置删除变量标识deleteVarFlag为真,否则为假,转入执行步骤⑦;否则,将preInstn切换为前一条指令,重新执行本步骤;
⑦如果curInstn和preInstn都是访存指令,并且对存储器具有写后读或写后写类型,则令访存依赖解除标识为解除状态,否则维持原来状态;
⑧描述curInstn和preInstn之间的依赖关系,当curInstn的数据依赖优先级值不大于preInstn时,修改curInstn的数据依赖优先级值为preInstn的数据依赖优先级值加1;
⑨从curInstn的源变量集合和目标变量集合中删除写后写、写后读这类依赖相关的寄存器名,对由体系结构造成的特殊数据依赖关系类型,则将依赖相关的寄存器名从两个集合中删去;
⑩判断curInstn的源变量集合和目标变量集合是否都被清空,如果为空则将curInstn的变量依赖解除标识的状态置为解除,返回执行步骤③。
步骤2:依赖网格建立
步骤2.1:指令组划分
本步骤即是将具有相同数据依赖优先级值的那些指令集中到相同的组中,得到按数据依赖优先级值升序排列的多个指令对象指针集合构成的指令组,步骤如下:
①用一个循环依次遍历各指令,找出它们的数据依赖优先级值的最大值maxDataDepPriorityVal,此值即基本块的硬件无关执行延迟时间;
②根据所得的maxDataDepPriorityVal值来确定保存各指令组的数组指令组序列instnGroups的大小,指令组对应的数组元素的下标与数据依赖优先级值相同;
③用一个循环依次遍历各指令,在循环体内,先获得指令的数据依赖优先级值,再将指令填写到与此值相应的指令组中。
步骤2.2:指令子组划分
步骤2.1中确定了不考虑硬件的执行单元数量限制的情况下逻辑上哪些指令可以在同一个节拍中同时发射,以及执行基本块内的所有指令所需的逻辑执行延时。本步骤则是根据指令组划分的结果,进一步建立指令组中各指令与功能单元的对应关系,并根据处理器的物理执行单元数量和指令集特征将一个指令组划分成多个指令子组,由指令对应的指令模板即可获得指令可以在哪些执行单元中执行。
步骤2.2的详细步骤如下:
①用指令组序列instnGroups的数组元素个数和总执行单元数NTEU,分别作为指令子组二维表instnGroupsForUnits的的第一维和第二维的长度的初始值,用表的行数作为整型变量实时的有效指令组数量effectiveInstnGroupNum的初始值;
②用一个二重循环遍历每个指令组中的每条指令,外层循环依次遍历各指令组,内层循环依次遍历一个指令组内的各指令对象,在内层循环中循环执行步骤③~⑤;
③如果指令源代码中已经指定执行的功能单元,则令指令的可能执行单元代号和最终执行单元代号都定为指定的这个执行单元的代号,并将指令添加到此功能单元对应网格的指令子组中;否则执行步骤④;
④如果指令只能在某一个功能单元中执行,令指令的可能执行单元代号和最终执行单元代号都定为这个功能单元的代号,并将指令添加到此功能单元对应网格的指令子组中;否则执行步骤⑤;
⑤根据指令的指令模板对象中保存的候选执行单元类别信息,按确定组合功能单元时的规则确定相应的扩展执行单元代号,将指令的可能执行单元代号定为这个代号,并将指令添加到此扩展执行单元对应网格的指令子组中。
步骤3:并行性识别
在涉及代码调度或代码变换的优化中一般需要知道相关的并行性信息,作为优化的依据,本实施例根据获得的依赖网格可实现多种并行性信息识别以及关联状态,包括:
识别指令的逻辑并行性:定义保存所需指令信息的集合S,然后遍历依赖网格中与逻辑时间点对应的那一行中的各个单元格,将其中的各指令信息添加到集合S中,集合S中即为所需的基本块内某个逻辑时间点的候选指令集合。
获取指定功能单元某个逻辑时间点的候选指令集合:定义保存所需指令信息的集合S,通过逻辑时间点找到依赖网格中对应的行号,通过功能单元号找到对应的列号,将行号和列号对应的单元格中保存的信息复制到集合S中,集合S中即为指定功能单元某个逻辑时间点的候选指令集合。
获取各执行单元的工作量:通过遍历依赖网格中的各单元格对单元格中的指令计数,然后遍历依赖网格的各列,计算出列的指令总数,即可获得各逻辑节拍上各执行单元的工作量以及总的工作量。
获取某个功能单元因某条候选指令而与其他功能单元产生的关联关系:通过依赖网格中对指令所从属的功能单元的描述,可以直接确定由数据依赖相关联的两个功能单元,在此基础上,通过对各候选指令所引起的关联单元计数,可以获得它们所引起的关联单元的数量信息,进而计算出与之有关的关联单元数。
预测下一拍关联单元的可能状态:在指令调度时,找出依赖网格某个关联单元对应的列的第一行和第二行的单元格中的指令集合S1和S2。如果集合S1是空的,如果集合S2中某条指令所依赖的指令在本拍都能够发射,那么可以预测在下一拍一定能够发射该指令。
除上述并行性识别方法外,对于某些更激进的代码优化技术,也可能根据优化的需求从依赖网格中识别出更具前瞻性的并行性。
步骤4:依赖网格内容动态调整
本步骤用于在依赖网格第一行的某些指令被移除后,重新调整相关指令在依赖网格表格(指令子组二维表)中位置,步骤如下:
①如果实时的有效指令组数量effectiveInstnGroupNum的值小于1,表明已经没有指令保存在依赖网格中了,则结束处理;否则,执行步骤②;
②用一个二重循环遍历指令依赖网格instnGroupsForUnits,外层循环从第二行开始依次遍历各行,内层循环依次遍历各列,内层循环中循环执行步骤③、④;
③用一个循环遍历单元格保存的指令集合curSet中的各指令对象,在循环中依次执行步骤④;
④用一个循环遍历指令所依赖的其他指令,找出这些指令的数据依赖优先级值中最大的那一个值作为maxG,其中如果没有依赖指令,则maxG为-1;然后令aimG=maxG+1,如果aimG小于指令数据依赖优先级值对应的组号,则将指令移动到同一列中aimG值对应行的指令子组中,并修改此指令的数据依赖优先级值为aimGroupIndex,然后在指令集合curSet中将此指令对象删除。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (9)
1.一种基于依赖网格的指令级并行调度方法,其特征在于,步骤包括:
1)在VLIW体系结构下,获取目标基本块中指令之间的数据依赖关系以及各指令所对应的功能单元的信息,根据所述数据依赖关系设置并计算各指令的数据依赖优先级值;
2)按所述数据依赖优先级值以及功能单元划分各指令,将划分得到的结果按网格形式进行存储,建立得到指令与数据依赖优先级、以及指令与功能单元之间依赖关系的依赖网格;
3)按照步骤2)得到的依赖网格中指令的数据依赖优先级、指令与功能单元之间的依赖关系进行指令间的并行性分析;
步骤2)的具体实施步骤为:
2.1)遍历各指令,并将各指令按照数据依赖优先级划分为多个指令组;
2.2)遍历所述步骤2.1)得到的各指令组,将各指令组中所有已确定对应物理功能单元的第一目标指令按照所对应的所述物理功能单元进行划分,得到多个第一指令子组;将各指令组中所有未确定对应物理功能单元的第二目标指令按照所对应的组合功能单元进行划分,得到多个第二指令子组;
2.3)构建一个用于存储所述第一指令子组、第二指令子组的二维表结构,所述二维表中行向量对应指令的各数据依赖优先级,每行的行号对应数据依赖优先级值,列向量分为对应各物理功能单元的第一部分、对应各组合功能单元的第二部分,每个数据依赖优先级值与一个物理功能单元或组合功能单元对应所述二维表的一个网格单元格;将各所述第一指令子组按照数据依赖优先级值、物理功能单元分别保存至所述二维表的第一部分各网格单元格中,将各所述第二指令子组按照数据依赖优先级、组合功能单元分别保存至所述二维表的第二部分各网格单元格中,由所述二维表的第一部分、第二部分构成指令与数据依赖优先级、以及指令与功能单元之间依赖关系的依赖网格。
2.根据权利要求1所述的基于依赖网格的指令级并行调度方法,其特征在于,所述步骤1)中获取各指令所对应的功能单元的信息的具体实施步骤为:查询目标基本块中所有已确定对应物理功能单元的第一目标指令,并获取每条所述第一目标指令对应的物理功能单元的信息;查找基本块中所有未确定对应物理功能单元的第二目标指令,并获取每条所述第二目标指令对应的多种组合功能单元的信息,所述组合功能单元为由所述第二目标指令对应的所有物理功能单元所构成的可能组合。
3.根据权利要求1所述的基于依赖网格的指令级并行调度方法,其特征在于,步骤1)中计算各指令的数据依赖优先级值的具体实施步骤为:
1.1)分别为各指令定义一个数据依赖优先级值并初始化为0;
1.2)从第二条指令开始,依次遍历基本块中各条指令计算对应的数据依赖优先级值,每条指令计算时,按逆序遍历从当前指令的前一条指令开始到首条指令的所有目标指令,判断目标指令中是否存在与当前指令有依赖关系的依赖指令,如果有这样的依赖指令,将查找到的所有所述依赖指令中最大的数据依赖优先级值加1后作为当前指令的数据依赖优先级值。
4.根据权利要求3所述的基于依赖网格的指令级并行调度方法,其特征在于,所述步骤1.2)中查找出所有与当前指令有依赖关系的指令的具体实施步骤为:
1.21)将当前指令中任意一个源变量作为目标源变量,在当前指令之前的所有指令中查找出对目标源变量进行最后一次定值的指令,得到目标源变量的最后一次定值指令,并将所述最后一次定值指令作为一条与当前指令有依赖关系的依赖指令;
1.22)取下一个源变量作为目标源变量,重复执行步骤1.21),直至完成对当前指令中所有源变量的最后一次定值指令的查找,得到所有与当前指令有依赖关系的依赖指令。
5.根据权利要求1~4任意一项所述的基于依赖网格的指令级并行调度方法,其特征在于,步骤3)后还包括依赖网格动态调整步骤4),具体实施步骤为:
4.1)当所述依赖网格中处于最高数据依赖优先级的待移除指令在本拍执行后将被移除时,将所述待移除指令作为当前目标指令,并将所述待移除指令所对应的数据依赖优先级作为当前参照数据依赖优先级,转入执行步骤4.2);
4.2)在所述依赖网络的数据依赖优先级比所述参照数据依赖优先级低一级的对应行中,查找出与所述当前目标指令有依赖关系的所有依赖指令作为待调整指令,并分别获取每条所述待调整指令对应的所述依赖指令中最大数据依赖优先级值,将获取得到的各所述最大数据依赖优先级值加1后分别作为对应所述待调整指令调整后的数据依赖优先级值;然后将所述待调整指令按照调整后的数据依赖优先级值调整到依赖网格中对应的位置,转入执行步骤4.3);
4.3)以调整后的指令作为当前目标指令,并将所述调整后的指令的优先级作为当前参照数据依赖优先级,返回执行步骤4.2),直至执行到没有指令被调整或者到达最小的数据依赖优先级对应的那一行。
6.根据权利要求1~4任意一项所述的基于依赖网格描述的指令级并行调度方法,其特征在于,所述步骤3)中并行性分析具体包括识别指令之间逻辑并行性步骤,具体实施步骤为:获取所述依赖网格中处于目标数据依赖优先级的所有指令,得到与目标数据依赖优先级对应逻辑时间点的所有并行指令。
7.根据权利要求6所述的基于依赖网格描述的指令级并行调度方法,其特征在于,所述步骤3)中并行性分析具体还包括识别功能单元候选指令集合步骤,具体实施步骤为:获取所述依赖网格中对应目标功能单元且处于目标数据依赖优先级的所有指令,得到目标功能单元在目标数据依赖优先级所对应的逻辑时间点的候选指令集合。
8.根据权利要求7所述的基于依赖网格描述的指令级并行调度方法,其特征在于,所述步骤3)中并行性分析具体还包括获取目标执行单元工作量步骤,具体实施步骤为:统计所述依赖网格中对应目标功能单元处于各数据依赖优先级的所有指令,得到目标执行单元在各逻辑时间点的工作量;统计所述依赖网格中对应目标功能单元的所有指令,得到目标执行单元的总工作量。
9.根据权利要求8所述的基于依赖网格描述的指令级并行调度方法,其特征在于,所述步骤3)中并行性分析具体还包括功能单元关联性分析步骤,具体实施步骤为:在所述依赖网络中,查找所有与目标功能单元对应的指令具有依赖关系的依赖指令,将查找到的依赖指令对应的功能单元作为与所述目标功能单元具有关联关系的关联功能单元;统计查找到的所述关联功能单元的数量,得到所述目标功能单元的关联功能单元量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510135304.3A CN104699464B (zh) | 2015-03-26 | 2015-03-26 | 一种基于依赖网格的指令级并行调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510135304.3A CN104699464B (zh) | 2015-03-26 | 2015-03-26 | 一种基于依赖网格的指令级并行调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104699464A CN104699464A (zh) | 2015-06-10 |
CN104699464B true CN104699464B (zh) | 2017-12-26 |
Family
ID=53346635
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510135304.3A Active CN104699464B (zh) | 2015-03-26 | 2015-03-26 | 一种基于依赖网格的指令级并行调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104699464B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183434B (zh) * | 2015-10-14 | 2017-08-11 | 无锡江南计算技术研究所 | 采用隐式求解的众核流水线并行方法 |
CN107862042B (zh) * | 2017-11-06 | 2020-12-18 | 中国银行股份有限公司 | 一种数据库并行度的控制方法及装置 |
CN111104169B (zh) * | 2017-12-29 | 2021-01-12 | 上海寒武纪信息科技有限公司 | 指令列表调度方法、装置、计算机设备及存储介质 |
CN110659069B (zh) * | 2018-06-28 | 2022-08-19 | 赛灵思公司 | 用于执行神经网络计算的指令调度方法及相应计算系统 |
CN109918134B (zh) * | 2019-03-06 | 2023-05-30 | 湖南科技大学 | 用于vliw基本块调度的组合启发式指令选择优化方法 |
CN111399912B (zh) * | 2020-03-26 | 2022-11-22 | 超睿科技(长沙)有限公司 | 一种面向多周期指令的指令调度方法、系统及介质 |
CN111865397B (zh) * | 2020-06-28 | 2021-01-29 | 军事科学院系统工程研究院网络信息研究所 | 一种可动态调整的卫星通信网络规划方法 |
CN111897580B (zh) * | 2020-09-29 | 2021-01-12 | 北京清微智能科技有限公司 | 一种可重构阵列处理器的指令调度系统及方法 |
CN113448989B (zh) * | 2021-07-08 | 2024-02-06 | 京东科技控股股份有限公司 | 数据的处理方法、装置、电子设备及计算机存储介质 |
CN114697398B (zh) * | 2022-03-23 | 2023-10-17 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备、存储介质及产品 |
CN117389572B (zh) * | 2023-12-12 | 2024-02-27 | 北京麟卓信息科技有限公司 | 一种基于指令分层的dsp汇编代码自动优化方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102200924A (zh) * | 2011-05-17 | 2011-09-28 | 北京北大众志微系统科技有限责任公司 | 基于模调度实现循环指令调度的编译方法及装置 |
CN102799418A (zh) * | 2012-08-07 | 2012-11-28 | 清华大学 | 融合了顺序和vliw的处理器体系结构及指令执行方法 |
CN102968295A (zh) * | 2012-11-28 | 2013-03-13 | 上海大学 | 基于加权控制流图的前瞻线程划分方法 |
CN103377032A (zh) * | 2012-04-11 | 2013-10-30 | 浙江大学 | 一种基于异构多核芯片的细粒度科学计算并行处理装置 |
CN104040492A (zh) * | 2011-11-22 | 2014-09-10 | 索夫特机械公司 | 微处理器加速的代码优化器和依赖性重排序方法 |
CN104424026A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种指令调度方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189501A1 (en) * | 2007-02-05 | 2008-08-07 | Irish John D | Methods and Apparatus for Issuing Commands on a Bus |
US8069446B2 (en) * | 2009-04-03 | 2011-11-29 | Microsoft Corporation | Parallel programming and execution systems and techniques |
-
2015
- 2015-03-26 CN CN201510135304.3A patent/CN104699464B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102200924A (zh) * | 2011-05-17 | 2011-09-28 | 北京北大众志微系统科技有限责任公司 | 基于模调度实现循环指令调度的编译方法及装置 |
CN104040492A (zh) * | 2011-11-22 | 2014-09-10 | 索夫特机械公司 | 微处理器加速的代码优化器和依赖性重排序方法 |
CN103377032A (zh) * | 2012-04-11 | 2013-10-30 | 浙江大学 | 一种基于异构多核芯片的细粒度科学计算并行处理装置 |
CN102799418A (zh) * | 2012-08-07 | 2012-11-28 | 清华大学 | 融合了顺序和vliw的处理器体系结构及指令执行方法 |
CN102968295A (zh) * | 2012-11-28 | 2013-03-13 | 上海大学 | 基于加权控制流图的前瞻线程划分方法 |
CN104424026A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种指令调度方法及装置 |
Non-Patent Citations (1)
Title |
---|
分簇VLIW结构下利用数据依赖图优化调度的研究;杨旭 等;《计算机学报》;20110131;第34卷(第1期);第182-192页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104699464A (zh) | 2015-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104699464B (zh) | 一种基于依赖网格的指令级并行调度方法 | |
Mittal et al. | A survey of techniques for optimizing deep learning on GPUs | |
Fang et al. | swdnn: A library for accelerating deep learning applications on sunway taihulight | |
Pan et al. | GPU-based parallel collision detection for fast motion planning | |
Hou et al. | Fast segmented sort on gpus | |
Narayanan et al. | Accelerating deep learning workloads through efficient multi-model execution | |
Gandhi et al. | {PIKACHU}: How to Rebalance Load in Optimizing {MapReduce} On Heterogeneous Clusters | |
Odeh et al. | Merge path-parallel merging made simple | |
CN103049241B (zh) | 一种提高cpu+gpu异构装置计算性能的方法 | |
Yu et al. | Automated runtime-aware scheduling for multi-tenant dnn inference on gpu | |
Zhang et al. | {CGraph}: A Correlations-aware Approach for Efficient Concurrent Iterative Graph Processing | |
CN104040491A (zh) | 微处理器加速的代码优化器 | |
Elteir et al. | Performance characterization and optimization of atomic operations on amd gpus | |
CN104699466B (zh) | 一种面向vliw体系结构的多元启发式指令选择方法 | |
Liu | Parallel and scalable sparse basic linear algebra subprograms | |
Guo et al. | Balancing efficiency and flexibility for DNN acceleration via temporal GPU-systolic array integration | |
Pan et al. | GPU-based parallel collision detection for real-time motion planning | |
Zhou et al. | Task mapping in heterogeneous embedded systems for fast completion time | |
Breß et al. | Load-aware inter-co-processor parallelism in database query processing | |
Kabir et al. | A framework for out of memory svd algorithms | |
Ito et al. | A GPU implementation of dynamic programming for the optimal polygon triangulation | |
Beaumont et al. | Optimal GPU-CPU offloading strategies for deep neural network training | |
Dai et al. | Enabling adaptive loop pipelining in high-level synthesis | |
Bleiweiss | Multi agent navigation on the gpu | |
Smutnicki et al. | A new approach for multi-criteria scheduling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |