依赖性问题的有效率的并行计算的制作方法

文档序号:6594206阅读:447来源:国知局
专利名称:依赖性问题的有效率的并行计算的制作方法
技术领域
本发明主要涉及并行计算,且具体涉及用于在并行处理器上执行依赖性问题的方 法和系统。
背景技术
并行处理技术广泛地用于执行各种计算任务。在逻辑设计仿真领域,例如, Cadambi等人在2002年6月10日至14日路易斯安那州新奥尔良市举办的第三十九届 IEEE ACM Design Automation Conference (DAC 2002)的学报的 570-575 页发表的 “A Fast, Inexpensive and Scalable Hardware Acceleration Technique for Functional Simulation”中描述了一种基于超长指令字(VLIW)处理器的仿真加速器,该文献以参 引方式纳入本文。使用超长指令字处理器的逻辑仿真的多个方面也在下列文献中进行 了论述美国专利7,444,276,以及美国专利申请公布2007/0219771,2007/0150702, 2007/0129926, 2007/0129924, 2007/0074000, 2007/0073999 和 2007/0073528,以上公开内 容均以参引方式纳入本文。

发明内容
本发明的一个实施方案提供了一种计算方法,包括接受计算任务的定义,该计算任务包括具有执行依赖性的多个原子处理元(PE), 每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;编译所述计算任务以用于在多处理器设备上并发地执行,所述多处理器设备包括 多个处理器,所述多个处理器通过在一个包括第二数量的执行序列的调用数据结构中不与 执行依赖性冲突地布置所述PE而能够同时地执行第一数量的PE,所述第二数量大于1且不 超过所述第一数量;以及调用所述多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构 而并行地执行所述执行序列,以产生所述计算任务的结果。在某些实施方案中,计算任务包括对一个设计进行验证的任务。或者,所述计算任 务可包括信号处理任务、图像处理任务、包处理任务和/或纠错编码(ECC)任务。在所公开 的一个实施方案中,多处理器设备包括图形处理单元(GPU)。在另一个实施方案中,多处理 器设备包括数字信号处理器和/或多核中央处理单元(CPU)。
在一个实施方案中,编译所述计算任务包括将每个执行序列中的PE分组成PE组 (PEG)。在另一个实施方案中,多处理器设备根据内建调度策略调度所述PE以用于由多个 处理器执行,且其中调用所述多处理器设备包括使得所述多处理器设备并行地执行第二数 量的执行序列,如同布置在执行数据结构中,而与所述内建调度策略无关。在另一个实施方 案中,多处理器被分成组布置,每个组都被指派以执行提供给所述多处理器设备的一个或 多个线程块,且其中调用所述多处理器设备包括提供每个执行序列作为待要被所述组中的 一个组内的处理器执行的一个相应的线程块。在一个实施方案中,所述每个组中的所述处 理器访问一个相应的共享存储器,且其中编译所述计算任务包括使得一个给定执行序列中 的PE通过被指派以执行该给定执行序列的一组处理器的共享存储器来交换数据。在另一个实施方案中,将PE布置在调用数据结构中包括最小化最长执行序列的 长度同时不超过所述第一数量且不与所述执行依赖性相冲突。在又一个实施方案中,一个 给定执行依赖性规定了使驱PE将在受驱PE之前被执行,且其中将所述PE布置在所述调用 数据结构中包括在给定执行序列中将受驱PE放置在使驱PE之后。在另一个实施方案中, 一个给定执行依赖性规定了使驱PE将在受驱PE之前执行,且其中将所述PE布置在所述调 用数据结构中包括在第一执行序列中放置使驱PE,在不同于所述第一执行序列的第二执 行序列中放置受驱PE,并且向所述第二执行序列中插入一个同步元,所述同步元暂停所述 第二执行序列的执行直到给定的所述使驱PE完全被执行为止。在某些实施方案中,编译所述计算任务包括从所述计算任务提取多个非循环子 图,并且编译所述多个非循环子图以产生相应的多个调用数据结构。在一个公开的实施方 案中,将所述PE布置在所述调用数据结构中包括定义一个顺序,按此顺序选择所述PE以 放置在所述执行序列中,且按此顺序用所述PE填充所述执行序列。在一个实施方案中,所述定义一个顺序包括,为每个PE 确定通向所述PE的一个最长的执行依赖性链的第一长度;确定始自所述给定PE的一个最长的执行依赖性链的第二长度;基于所述第一长度和所述第二长度,确定一个分配区间——其包括沿着所述执行 序列的PE的可能的位置;以及以所述分配区间的相应的长度的升序来排列所述PE。填充所述执行序列可包括,将每个PE放置在所述执行序列中之一的相应的分配 区间之内。在另一个实施方案中,所述定义一个顺序包括识别输出组,每个输出组包括两个或更多个PE——其驱动了相应的受驱PE ;识别输入组,每个输入组包括至少两个由一个相应的使驱PE所驱动的PE ;基于包含了每个PE的输出组和输入组的数量,为所述每个PE指派一个相应的组 评分;并且基于所述PE的组评分,定义所述顺序。在又一个实施方案中,将所述PE布置在调用数据结构中包括,对于一个给定PE以 及所述执行序列中的一组可能的位置,计算由将给定PE放置在可能的位置而导致的相应 的分配成本;以及将给定PE放置在所述可能的位置中的具有最低分配成本的一个位置。在一个实施方案中,计算所述分配成本包括,根据如下因素估计给定执行序列中的给定的可能的位置的分配成本由将给定PE放置在给定的可能的位置而导致的所述调 用数据结构的执行时间的增加;在给定执行序列中和给定PE共享一个公共使驱PE的PE的 第一数量;在给定执行序列中和给定PE共享一个公共受驱PE的PE的第二数量;在给定执 行序列中和给定PE共享一个公共执行依赖性的PE的第三数量;和/或距为给定PE计算的 最佳位置的距离。在一个实施方案中,将所述PE布置在所述调用数据结构中包括,将所述 PE以线程束布置在每个执行序列中,每个线程束包括给定类型的一个或多个PE。在一些实施方案中,编译所述计算任务包括,对于给定执行序列,定义将变量从所 述多处理器设备的设备存储器取到高速缓存的确定性高速缓存模式,并且在执行所述给定 执行序列期间将所述变量中的至少一些从所述高速缓存丢弃,并且使得所述多处理器设备 在执行所述给定执行序列时实现所述确定性高速缓存模式。在一个实施方案中,给定执行 序列中的PE被分组成PE组(PEG),且其中定义所述高速缓存模式包括对于在给定PEG的执行期间存在于所述高速缓存中的每个变量,识别在所述给定 执行序列中接下来将使用该变量的相应的下一个PEG ;一旦在执行所述给定PEG之后需要从所述高速缓存丢弃一个或多个变量时,选择 该一个或多个变量中的一个变量,所选择的变量的相应的下一个PEG具有沿着所述给定执 行序列的距所述给定PEG最大的距离;并且在所述高速缓存模式中定义,在执行所述给定PEG之后丢弃所选择的变量。在另一个实施方案中,定义所述高速缓存模式包括在单个取命令中合并对两个或 更多个变量的取操作。在另一个实施方案中,合并所述取操作包括为每个变量沿着所述给 定执行序列定义一个取区间,所述取区间自当该变量变得有效之时开始,至当该变量首次 被使用时结束;以及定义所述单个取命令以包括至少两个在相应的取区间有重叠的变量, 并且将所述单个取命令放置为在所述重叠的期间发生。合并所述取操作可包括,通过识别 在所述单个取命令的位置和所述给定变量首次被使用的时间之间具有最小距离的给定变 量,来选择待要被合并到所述单个取命令中的给定变量。在一个公开的实施方案中,定义所述高速缓存模式包括,在单个存储命令中合并 对两个或更多个变量的存储操作。在一个实施方案中,所述给定执行序列的确定性高速缓 存模式,以给定顺序从所述设备存储器取变量,且其中编译所述计算任务包括,根据所述给 定顺序以连续的地址将所述变量预排列在所述设备存储器中。在一些实施方案中,编译所 述计算任务包括,通过访问所述多处理器设备的设备存储器,使得所述第一执行序列提供 一个或多个变量作为输入给第二执行序列。在一些实施方案中,编译所述计算任务包括,产生多个调用数据结构,所述多个调 用数据结构中的每个调用数据结构包括一个或多个执行序列,以及使得所述执行序列中的 至少一些执行序列通过访问所述多处理器设备的设备存储器而在不同的调用数据结构之 间交换变量。在一个实施方案中,在所述不同的调用数据结构之间交换的每个变量都由一 个或多个源执行序列所产生,并被一个或多个目标序列所使用,且其中编译所述计算任务 包括,根据所述源执行序列和所述目标执行序列将所述变量聚合成组,并且将每个组以连 续的地址存储在所述设备存储器中。在所公开的一个实施方案中,使得所述执行序列交换 所述变量包括,使得所述执行序列以读命令从所述设备存储器读所述变量,每个读命令从 所述组之一读取预定大小的数据。在一个实施方案中,当两个或更多个组中的变量联合起来未超过所述预定大小时,所述方法包括定义一个从所述两个或更多个组读取所述变量的 合并的读命令。在一个实施方案中,当在一个给定调用数据结构中的多个执行序列的一个集合中 使用一组变量时,所述方法包括仅仅使得所述多个执行序列中的一个部分子集从所述设备 存储器读取所述一组变量,并且将该变量传递给该集合中的其他的执行序列。使得所述执 行序列的部分子集传递所述变量可包括,识别该集合中不能从该调用数据结构的其他执 行序列接收所述变量的至少一个执行序列,并且将所识别的序列添加到所述部分子集。使 得所述执行序列的部分子集传递所述变量可包括,识别所述给定调用数据结构中的同步 元——其将所述部分子集连接到所述集合中的其他执行序列,并且分配与所述同步元相关 联的通信资源以便传递所述变量。在一些实施方案中,编译所述计算任务并且调用所述多处理器设备包括,运行一 个事件驱动仿真——其仿真了所述计算任务。在一个实施方案中,将所述PE布置在所述调 用数据结构中包括,根据如下因素在所述执行序列中放置所述PE 始自所述PE的相应的最 长的执行依赖性链的长度;执行序列的相应的占用程度;和/或由对所述PE的放置而引起 的同步元。根据本发明的一个实施方案,还提供了一种计算方法,包括接受计算任务的定义,该计算任务包括具有执行依赖性的多个原子处理元(PE), 每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;编译该计算任务以用于在多处理器设备上并发地执行,所述多处理器设备包括并 行运行的多个处理器,以及通过在一个包括多个执行序列的调用数据结构中不与所述执行 依赖性冲突地布置所述PE来调度该PE,以用于由所述多个处理器根据微处理器设备的内 建调度策略执行;以及调用该多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而 并行地且无关于所述多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务 的结果。根据本发明的一个实施方案,还提供了一种计算装置,包括一个界面,被连接以接受计算任务的定义,该计算任务包括具有执行依赖性的多 个原子处理元(PE),每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相 应的第一 PE;以及一个中央处理单元(CPU),所述中央处理单元被布置为编译该计算任务以用于 在多处理器设备上并发地执行,所述多处理器设备包括多个处理器,所述多个处理器通过 在一个包括第二数量的执行序列的调用数据结构中不与所述执行依赖性冲突地布置所述 PE而能够同时地执行第一数量的PE,所述第二数量大于1且不超过所述第一数量;以及调 用该多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地执行 所述执行序列,以产生所述计算任务的结果。根据本发明的一个实施方案,还提供了一种计算装置,包括一个界面,被连接以接受计算任务的定义,该计算任务包括具有执行依赖性的多 个原子处理元(PE),每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相 应的第一 PE;以及
—个中央处理单元(CPU),所述中央处理单元被布置为编译该计算任务以用于 在多处理器设备上并发地执行,所述多处理器设备包括并行运行的多个处理器,以及通过 在一个包括多个执行序列的调用数据结构中不与所述执行依赖性冲突地布置所述PE来调 度该PE,以用于由所述多个处理器根据微处理器设备的内建调度策略执行;以及调用该多 处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地且无关于所 述多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务的结果。根据本发明的一个实施方案,还提供了一种计算装置,包括一个多处理器设备,包括能够同时执行第一数量的原子处理元(PE)的多个处理 器;以及一个中央处理单元(CPU),所述中央处理单元被布置为接受计算任务的定义,该 计算任务包括具有执行依赖性的多个原子处理元(PE),每个执行依赖性规定了在执行一 个相应的第二 PE之前要执行一个相应的第一 PE ;通过在包括第二数量的执行序列的调用 数据结构中不与所述执行依赖性冲突地布置所述PE来编译该计算任务以用于在所述多处 理器设备上并发地执行,所述第二数量大于1且不超过所述第一数量;以及调用该多处理 器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地执行所述执行序 列,以产生所述计算任务的结果。根据本发明的一个实施方案,还提供了一种计算装置,包括一个多处理器设备,包括并行运行的多个处理器,且根据所述微处理器设备的内 建调度策略调度原子处理元(PE)以用于由所述多个处理器执行;以及一个中央处理单元(CPU),所述中央处理单元被布置为接受计算任务的定义,该 计算任务包括具有执行依赖性的多个PE,每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;通过在包括多个执行序列的调用数据结构中不与所述 执行依赖性冲突地布置所述PE来编译该计算任务,以用于在所述多处理器设备上并发地 执行;以及调用该多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构 并行地且无关于所述多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务 的结果。根据本发明的一个实施方案,还提供了一种计算机软件产品,所述产品包括计算 机可读介质,在所述计算机可读介质中存储了程序指令,所述指令当被计算机读取时,使 得所述计算机接受计算任务的定义,该计算任务包括具有执行依赖性的多个原子处理元 (PE),每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;编 译该计算任务以用于在多处理器设备上并发地执行,所述多处理器设备包括多个处理器, 所述多个处理器通过在一个包括第二数量的执行序列的调用数据结构中不与所述执行依 赖性冲突地布置所述PE而能够同时地执行第一数量的PE,所述第二数量大于1且不超过所 述第一数量;以及调用该多处理器设备以运行软件代码,所述软件代码响应于所述调用数 据结构并行地执行所述执行序列,以产生所述计算任务的结果。根据本发明的一个实施方案,还提供了一种计算机软件产品,所述产品包括计算 机可读介质,在所述计算机可读介质中存储了程序指令,所述指令当被计算机读取时,使 得所述计算机接受计算任务的定义,该计算任务包括具有执行依赖性的多个原子处理元 (PE),每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;编译该计算任务以用于在多处理器设备上并发地执行,所述多处理器设备包括并行运行的多 个处理器,通过在一个包括多个执行序列的调用数据结构中不与所述执行依赖性冲突地布 置所述PE来调度该PE,以用于由所述多个处理器根据微处理器设备的内建调度策略执行; 以及调用该多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行 地且无关于所述多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务的结
从下面结合附图的对本发明的实施方案的详细描述中,将可更完整地理解本发 明,其中


图1是示意性地示出根据本发明的一个实施方案的用于执行依赖性问题的系统 的方框图;图2是示意性地示出根据本发明的一个实施方案的图形处理单元(GPU)的方框 图;图3是示意性地示出根据本发明的一个实施方案的以依赖性图来表示的依赖性 问题的图解;图4是示意性地示出根据本发明的一个实施方案的静态调用数据库(SID)的图 解;图5是示意性地示出根据本发明的一个实施方案的用于执行依赖性问题的方法 的流程图;图6是示意性地示出根据本发明的一个实施方案的用于SID生成的线程束网格的 图解;图7是示意性地示出根据本发明的一个实施方案的用于将处理单元(PE)分配在 线程束网格中的分配区间的图解;图8是示意性地示出根据本发明的一个实施方案的用于生成SID的方法的流程 图;图9是示意性地示出根据本发明的一个实施方案的一个高速缓存管理方案的图 解;图IOA和IOB是示意性地示出根据本发明的一个实施方案的变量预取方案的图 解;图11是示意性地示出根据本发明的一个实施方案的一个变量预排列方案的图 解;图12是示意性地示出根据本发明的一个实施方案的多个SID的图解;图13是示意性地示出根据本发明的一个实施方案的用于SID间通信的一种方法 的流程图;图14A和14B是示意性地示出根据本发明的一个实施方案的SID内通信方案的图 解;图15是示意性地示出了根据本发明的一个实施方案的既使用SID间通信又使用 SID内通信的SID的图解;
图16是示意性地示出了根据本发明的一个实施方案的用于减少SID间通信的方 法的状态图;图17是示意性地示出根据本发明的一个实施方案的用于减少SID间通信的方法 的流程图;图18是示意性地示出了根据本发明的一个实施方案的表示数字滤波器的依赖性 图的图解;以及图19是示意性地示出了根据本发明的一个实施方案的表示快速傅立叶变换 (FFT)计算单元的依赖性图的图解。
具体实施例方式概述许多领域中的多种计算任务都可被表示为依赖性问题,例如被表示为一组具有执 行依赖性的原子处理元。依赖性问题通常大而复杂,且它们的执行通常涉及高计算复杂性 和长执行时间。因此,在并行操作的多个处理器上执行依赖性问题是有利的。然而,在处理 元之间的执行依赖性,通常使得依赖性问题难于被划分成并行的计算任务。本发明的实施方案提供了用于通过并行处理器来执行依赖性问题的改良的方法 和系统。所公开的方法和系统对依赖性问题进行操作,该依赖性问题包括具有执行依赖性 的原子处理元(PE)。(一对处理元之间的执行依赖性,指的是一个处理元对由另一个处理 元所产生的输入进行操作。因此,执行依赖性对于处理元的执行顺序施加了约束。)编译这 一依赖性问题,以便在包括多个处理器的多处理器设备例如图形处理单元(GPU)上进行并 发执行。所述编译进程在由所述多处理器设备的处理核所并行执行的多个执行序列中布 置所述PE,而不破坏执行依赖性。通常,所述编译进程生成包括所述执行序列的静态调用数 据库(SID)。所述多处理器设备被调用以运行执行SID的软件代码,从而产生所述依赖性问 题的结果。通过尝试将相互依赖的PE放置在同一个执行序列中,并且如有需要在不同序列 中的PE之间引入同步,以保持执行依赖性。在典型的多处理器设备中,处理器成组布置,且 每组中的处理器能够通过共享存储器进行交互并且交换数据。在某些实施方案中,SID中 的每个执行序列均作为线程块而提供给所述多处理器设备,以保证在每个序列中的PE均 被同一组处理器执行且可通过该组的共享存储器交换数据。选择SID中的执行序列的数量,以免超越所述多处理器设备能够同时执行的线程 块的最大数量。由此,保证了执行序列同时运行,并通常不受所述多处理器设备的任何内建 调度策略影响。这一操作模式与已知的调用方案形成明显对比,已知的调用方案通常使大 量的线程块涌入多处理器设备,然后依赖于该多处理器设备的内部调度来达到并行化。另 一方面,在本文描述的方法和系统中,依赖性问题在多个并行处理器之间的并行化方式是 完全确定性的,且是在编译时间而非在运行时间定义的。由此,有效地绕开了多处理器设备 的内部调度策略,且PE的执行顺序被在SID中定义的执行序列和同步机制完全控制。本文 描述了生成高效率SID的一个示例过程。此外,本文还描述了用于对在SID执行期间实现的大量存储器访问操作进行管理的几种方法和系统。具体地,所公开的技术通过PE执行序列充分利用了多处理器设备的 设备存储器和共享存储器。(在典型的多处理器设备中,设备存储器提供了较大的存储器 空间,但却招致了较高的访问时延、较大的访问粒度以及地址对齐约束。另一方面,共享存 储器具有有限的存储器空间,但却提供了较快的访问时间,且几乎或完全没有地址对齐约 束。)通过利用存储器访问操作的模式在SID编译期间被完全确定这一事实,所公开的技术 实现了有效率和确定性的存储器访问。系统描述图1是示意性地示出了根据本发明的一个实施方案的用于执行依赖性问题的系 统20的方框图。各种计算任务均可被表示为依赖性问题,例如,表示为具有执行依赖性的 一批原子处理任务。依赖性问题存在于许多领域和应用中,例如,数字硬件设计仿真,实时 视频处理,图像处理,软件定义的无线电(SDR),在各种通信应用中的包处理,以及纠错编 码。系统20可用于有效率地执行可被表示为依赖性问题的任何适合的计算任务。接下来 进一步描述特定计算任务的几个实例,以及所公开的技术对于这些任务的适用性。在本实例中,系统20包括服务器对,该服务器M包括界面26、中央处理单元洲 以及一个或多个图形处理单元(GPU) 32。服务器M可包括任何适合的工作站或计算平台。 每个GPU,如下所述,包括并行操作的大量处理核。此处描述的方法和系统产生了最大化了 GPU核的并行应用的软件代码,且因此使得系统20能够以相对短的执行时间来执行高度复 杂的依赖性问题。服务器M通过用户工作站36与用户交互。服务器M通过界面沈接受来自用户 的待执行的依赖性问题。所述服务器编译所述输入依赖性问题以产生软件代码,然后在CPU
32上运行该代码。执行结果通过界面沈提供给该用户。系统20的功能可以以 取决于应用的多种方式在CPU32之间划分。此处描述的实施方案提到了单GPU。
然而,一般地,可使用任何期望数量的GPU。通常,CPU观包括通用处理器,其是以软件编程的,以实现此处描述的功能。该软 件可以例如通过网络以电子形式下载到该处理器,或者替代地或附加地,提供到和/或存 储在有形介质例如磁、光学或电子存储器上。系统20的配置是示例配置,完全是为了概念清楚而选择的。也可以使用任何其他 适当的系统配置。例如,用户工作站36可以与服务器M本地通信或通过通信网络通信。在 替代实施方案中,用户工作站功能可以直接在服务器对上实现。使用诸如系统20之类的系统来进行逻辑设计仿真的某些方面,在提交于2009年 3 月 25 日的题为 “Design Simulation using Parallel Processors” 的 PCT 申请 PCT/ IL2009/000330中进行了论述,该申请转让给本专利申请的受让人,且其公开内容以参引方 式纳入本文。图2是示意性地示出了根据本发明的一个实施方案的GPU 32的内部结构的方框 图。在当前实例中,GPU 32包括多个多处理器40。每个多处理器40包括多个处理器44,所 述多个处理器44在本文也称为处理核。在某些实施方案中,每个多处理器40包括一个单 指令多线程(SIMT)处理器,如本领域所知。在替代实施方案中,每个多处理器40包括一个 单指令多数据(SIMD)处理器,其中所有处理器44在每个时钟周期内运行相同的指令。(然 而,不同的处理器可以在不同数据上运行相同的指令。)在典型应用中,整个GPU中的所有处理器44运行相同的指令。不同处理器的功能之间的差别是由所述数据引入的。所公开 的技术既可应用于SIMD处理器也可应用于SIMT处理器。每个处理器44可以访问若干本地寄存器48。一个给定的多处理器40之内的不同 处理器可以在共享存储器52内存储数据。这一共享存储器对于该给定的多处理器的处理 器44是可访问的,但对于其他多处理器的处理器是不可访问的。在典型的GPU中,每个多 处理器还包括一个指令单元60,该指令单元60管理所述多处理器的操作。在典型的多处理 器中,单元60创建、管理和执行并发的线程。具体地,单元60可包括对在所述多处理器中 运行的不同线程的操作进行同步的硬件机制。GPU 32包括设备存储器56,该设备存储器56在本文也称为外部存储器。存储器 56通常包括动态随机存取存储器(DRAM)。不同于共享存储器52,设备存储器56通常对于 所有多处理器40的处理器都是可访问的。另一方面,对设备存储器56的访问在时延和吞 吐量方面通常是代价昂贵的。为了有效率地访问存储器56,通常希望写入连续且对齐的存 储器地址或从连续且对齐的存储器地址读取。本文描述的某些方法涉及产生有效率地访问 存储器56的代码。每个处理器44在任意给定时间运行的基本软件代码单位被称为线程。通常,CPU 观通过为GPU提供线程块来调用GPU 32。给定的线程块被保证运行在处于SIMD模式或 SIMT模式的单个多处理器40的处理器上。因此,给定的块中的线程可以通过共享存储器 52彼此通信。通常,每个块中的线程的数量可多于在该多处理器中的处理器的数量。提供给GPU 的块的数量通常可以多于多处理器的数量。所述GPU包括块管理器60,其从CPU观接受待 执行的块,并且根据某些内部标准对块和线程的执行进行调度。这些标准在本文中称为内 建调度策略。因此,除了保证给定块的线程在同一多处理器内执行之外,对给定块的线程在该 多处理器内执行的顺序不作保证。对于不同的块在GPU中执行的顺序也不作保证。也就是 说,CPU 28通常对GPU的内部调度策略没有控制。此处描述的某些方法和系统生成代码,所述代码利用了 GPU的架构特征,例如在 给定块内的线程之间同步和共享数据的能力。当把依赖性问题划分成线程时,在该GPU内 的线程和块执行的非保证性质(也即,与所述GPU的调度策略无关)的前提下,所公开的方 法和系统在不同的原子处理任务之间保留了固有的依赖性。具体地,所述GPU通常被指定为同时执行一定数量的块。如果GPU调用更多数量 的块,则这些块被块管理器60调度。此处描述的某些方法和系统以多个块调用该GPU,该多 个块不超过可同时执行的块的最大数量。因此,块管理器60的内部调度策略被有效地绕开 了。这些特征在下文进一步详述。图2中的GPU配置是一个示例配置,其完全是为了概念清楚而选择的。在替代的实 施方案中,也可使用任何其他适合的GPU配置。可用于此目的的典型GPU设备是由NVIDIA 公司(加利福尼亚州圣克拉拉市)生产的GTX 285设备。此设备包括三十个多处理器,每 个多处理器包括八个处理核。进一步替代地,虽然本文描述的实施方案提到了 GPU的使用, 所公开的方法和系统可以和各种其他类型的并行地操作多个处理核的处理器一同使用,例 如数字信号处理器(DSP)和多核中央处理单元(CPU)。
使用依赖性图来表示依赖性问题CPU 28以原子执行任务的形式表示了输入依赖性问题,所述原子执行任务在本文 称为处理元(PE)。当该依赖性问题由GPU 32执行时,每个PE相应于由某个处理器44执行 的线程。所述CPU通常保存了一个PE类型库,每个类型执行一个特定的原子任务(例如, 查找表查找,触发器,缓冲操作,存储器访问操作,多路复用操作,运算操作,逻辑操作或任 意其他适当的任务类型)。每个PE属于所述类型之一,并且在特定数据上操作。当处理器44以SIMT模式工作时,每个线程通常包括能够运行不同PE类型的代 码。当执行该线程时,由该线程执行的实际的PE类型是由数据选择的。由该线程读取的数 据可以选择实际的PE类型,选择方式例如,跳转到实现想要的PE功能的程序地址,或者使 用任何其他适当的选择方法。因此典型的线程可以执行下列流程·从存储器56读取想要的PE类型,并且跳转到实施这一 PE类型的适当地址。·从存储器56读取PE参数和输入值。 执行想要的PE功能。·将PE输出值写到存储器56。(为了有效率地访问存储器56,CPU28可以将PE分成PE组——PEG。这一特征 在下文进一步详述,也已在上面引用的PCT申请PCT/IL2009/000330中提及。)通常,线程 加载和存储操作都与线程的PE参数无关。例如,给定PEG可支持最多达64个从设备存储 器到共享存储器的加载命令。给定线程可加载不由其PE所使用的数据。当在SIMT处理器中使用上述技术时,通常期望的是,对于被调度为在给定的多处 理器SIMT单元中并发运行的线程,它们将运行同样的PE类型,以使得该单元有效率地以 SIMD模式运行。图3是示意性地示出了根据本发明的一个实施方案的用依赖性图来表示的依赖 性问题的图解。CPU观使用多个PE表示该依赖性问题,所述多个PE通过执行依赖性而被 互连。给定的依赖性规定了某个PE(被称为“使驱(driVing)”PE)的输出被用作另一个 PE (被称作“受驱(driven)” PE)的输入。换句话说,受驱PE依赖于使驱PE。这样的依赖 性意味着使驱PE将在受驱PE之前被执行,这是因为否则受驱PE的输入将无效。图3示出了示例依赖性问题68,其被转化成依赖性图72。图72包括表示了所述 PE的多个顶点76,以及表示了执行依赖性的有向边80。一条给定的边的方向为从使驱PE 到受驱PE。在某些实施方案中,CPU观从依赖性图72产生多个子图78。不同于依赖性图 72——其通常可以是循环的,而每个子图78是非循环。下文所述的方法将给定的非循环子图转换成在GPU 32上执行的代码。如果依赖 性问题使用多个子图来表示,则所公开的方法通常独立地适用于每个子图。在某些实施方 案中,可以利用不同子图之间变量的共性来提高计算效率。这些特征将在下文进一步陈述。使用静态调用数据库(SID)表示和执行依赖性图在某些实施方案中,CPU 28编译所述输入依赖性问题,以产生一个调用数据结构, 该调用数据结构在本文中称为静态调用数据库(SID)。该SID被提供给GPU 32以便执行。 CPU观通常运行一个产生SID的编译器程序。在下文的说明书中,为清楚起见,CPU观执 行的行为有些时候被称为是由编译器实现的。然而,在替代的实施方案中,该编译器可以在 任何适当的处理器上运行,以产生该SID。由此产生的结果SID可以接着被提供给系统20以便执行。所述SID包括一批PE执行序列,它们被保证彼此并行且以某一特定顺序运行,而 无关于所述GPU的内部调度策略。当GPU以该SID被调用时,每个执行序列作为一个线程 块而被提供给GPU。因此,保证了每个序列中的PE运行在GPU 32的同一多处理器40中。 此外,该SID中的执行序列的数量不超过可由该GPU同时执行的块的最大数量。因此,执行 序列被保证在所述GPU中同时运行,并且执行序列基本不受块管理器60的内部调度策略影 响。换句话说,有效绕开了所述GPU的内部调度策略,且PE的执行顺序完全由SID所控制。图4是示意性地示出了根据本发明的一个实施方案的SID 90的图解。SID 90包 括一批执行序列,在本实例中是四个序列98Α···98 。然而,通常,可使用任意适当数量的序 列,该数量大于1但不超过可由该GPU同时执行的块的最大数量。每个执行序列包括一系 列PEG 94,其被逐个执行。(下文将进一步叙述将PE分组成PEG)GPU能够同时运行的块的数量通常是由多处理器40的数量乘以可由每个多处理 器40同时执行的块的数量。每个多处理器的并发块的实际数量有时可被多处理器资源 (例如,寄存器、共享存储器或线程数)限制,且因此可小于每个多处理器的并发块的规定数量。在某些情况下,每个多处理器的并发块的实际数量可被写作min((多处理器寄存 器数/程序寄存器数),(多处理器共享存储器大小/程序共享存储器),(每个多处理器的 线程数量/每个块的线程数量),每个多处理器的并发块的规定数量)。例如,GTX285 GPU 具有30个多处理器40。每个多处理器包括16,384个寄存器和一个16K字节的共享存储 器,且支持最多IOM个并发线程,以及最多8个并发块。在一个示例实施方案中,由编译器 产生的GPU代码在每个线程使用了 2KB共享存储器和15个寄存器,其中每个块包括64个 线程。这一代码导致了每个块共有15x64 = 240个寄存器。在这一实例中,每个多处理器 的并发块的数量是 min(16KB/2KB,16384/240,1024/64,8) = min (8,68,16,8) =8。因此, 可由整个GPU同时执行的并发块的最大数量是8X30 = 2400因此,不同的执行序列通常可具有不同的长度,也即,不同的执行时间。通常,CPU 观试图将依赖性问题编译成一个执行时间为最小的SID。换句话说,CPU试图在不超过允 许的最大序列数量的前提下产生一个具有最短执行序列的SID。下文将进一步详述这类的 一个示例SID生成过程。由于每个执行序列包括了被保证在同一多处理器40中运行的线程块,从而保证 了在一个给定序列中的PEG以正确顺序运行。因此,在同一执行序列中把使驱PE放在其相 应的受驱PE之前,将保证不破坏PE之间的执行依赖性。此外,属于同一执行序列的PEG可 使用运行此序列的多处理器的共享存储器52来交换数据。然而,在许多依赖性问题中,将每一对依赖的PE置于同一执行序列中这一约束过 于严格。这样的约束通常产生了少数的极长的执行序列,且因此增加了执行时间并且限制 了可达到的并行化。在许多情况下,希望将依赖的PE置于不同的执行序列中,同时仍然保 留执行依赖性。在一些实施方案中,编译器强制该SID中不同的执行序列之间进行同步,以保持 置于不同序列中的PE之间的依赖性。例如,在图4中,如依赖关系110所指示,序列98B中 的PEG 102依赖于序列98A中的PEG 106。(更准确地说,PEG 102包括这样一个PE,该PE依赖于PEG106中的一个PE。)为了保证PEG 106在PEG 102开始执行之前被完全执行,所 述编译器将一个同步元,例如SYNC PEG 114,放置在序列98B中的PEG 102之前。SYNC 114 暂停序列98B的执行,直到PEG 106完成执行并且产生有效输出。然后将PEG 106的输出 作为输入提供给PEG 102,序列98B即可恢复执行。类似地,如依赖关系1 所示,序列98C 中的PEG 118依赖于序列98D中的PEG 122。为了保持这一依赖性,该编译器在序列98C中 将一 SYNC PEG 130放置在PEG 118之前。序列之间的同步化通常是用设备存储器56来实现的。例如,使驱PEG可通过向设 备存储器56的某一区域写入来发出其执行状态的信号。一个SYNC PEG可以轮询这一区域, 并且仅当所述使驱PEG已完成执行时才恢复执行所述SYNC PEG的序列。然而,注意,并不是不同序列中的每一对依赖的PE都必定要求增加一个同步PEG。 例如,假设序列98C中的最后一个PEG依赖于序列98D中的第一个PEG。在此情况下,没有 必要给序列98C添加另一个SYNC PEG,因为已有的SYNC PEG 130已经保证了只有在序列 98D中的第一个PEG执行完毕的情况下,序列98C中的最后一个PEG才会执行。通常,某个SYNC PEG可依赖于任意期望数量的序列中的任意期望数量的PEG,也 即,暂停给定序列的执行直到预定义的一批使驱PEG完成执行为止。在某些实施方案中,同 步功能可被嵌入在受驱PEG中而不使用专用的SYNC PEG。在序列之间的强制同步可以高效地平衡不同序列的执行时间,且因此增进了并行 化。另一方面,同步机制导致了时延,且涉及对设备存储器56的代价高昂的访问。如下文 将解释,所述编译器通常试图将这些优点和缺陷作折衷平衡,以达到该SID的总执行时间最短。图5是示意性地示出了根据本发明的一个实施方案的用于执行依赖性问题的方 法的流程图。在图中的输入步骤134,该方法以CPU观接收输入依赖性问题作为开始,该问 题被表示为依赖性图。在划分步骤138,所述CPU将所述依赖性图划分成有向的、非循环的 子图。在例如上文引述的PCT申请PCT/IL2009/000330中,陈述了从依赖性图到有向的、非 循环的子图的划分。在分组步骤142,对于每个子图,所述CPU将PE分组成PEG,而在SID 构建步骤146,所述CPU将PEG布置在SID中。在调用步骤150,所述CPU调用GPU 32以执 行该SID。该GPU执行该SID中的PEG序列,以产生该计算任务的结果。有效率的SID生成如上所述,在CPU 28上运行的编译器通常试图生成这样的SID 其对于给定的最 大执行序列数量具有最短的执行时间。输入这一过程中的,是PE的有向的、非循环的依赖 性子图,其将要被转换成SID。在某些实施方案中,所述编译器通过以保留了 PE之间的执行 依赖性的方式将一个二维线程束网格用PE逐渐地填满,来生成SID。一个线程束是一组同样类型的线程,其在一个给定的多处理器内并发地并且有效 率地运行。在一个线程束中的最大线程数量(且因此,PE的最大数量)可从一个GPU类型 到另一个GPU类型而有所变化。例如,在NVIDIA GTX285设备中,每个线程束运行32个线 程。如下文所示,几个线程束可稍后结合在一起以形成一个PEG。图6是示意性地示出了根据本发明的一个实施方案的用于SID生成的线程束网格 160的图解。网格160包括多个执行序列164,每个执行序列164都包括多个线程束空位 168。线程束空位起初是空的,然后该编译器逐渐地用PE将它们填满。为了在不同的执行序列之间强制同步,所述编译器有时将SYNC线程束172插入所述序列。(注意,SYNC线程 束不同于普通的线程束,因为它们不包括用于执行的线程。SYNC线程束模仿了将要被插入 该序列的SYNC操作的时延。)在该过程结束时,输入子图中的每个PE都被放置入线程束 空位之一(每个线程束空位可包括同一类型的多个PE)。然后该编译器从所述线程束形成 PEG 176,在某些情况下,将给定序列中的两个或更多个相邻线程束结合在一起以形成一个 PEG。将PEG的网格输出作为想要的SID。通常,网格160中的执行序列164的数量被设置为不超过该GPU可同时运行的线 程块的最大数量,以使得作为结果的SID的执行不会受内部GPU调度的影响。每个序列的 线程束空位的数量通常被初始化为输入子图中的最长路径的长度。由于PE之间的依赖性,每个PE只能被放置在网格160的列中的某一个部分子集 之内。这一子集被称为所述PE的分配区间(allocation interval) 0例如,依赖于另一个 PE的PE不能被放置在所述线程束网格的第一列(也即,在任意执行序列之始),因为必须 先执行使驱。相似地,驱动了另一个PE的PE不能被放置在网格的最后一列。通常,该子图中的每个PE具有一个特定的分配区间,其定义了该PE可能被放置在 其中的网格160的列。PE χ的分配区间依赖于两个参数,其被称为PE χ的反向段(表示为 BP(X))和前向段(表示为PF(X))。给定PE的反向段被定义为该子图中沿通向该PE的最 长路径的PE的数量。给定PE的前向段被定义为该子图中沿从该PE开始的最长路径的PE 的数量。使用这套术语,子图中最长路径的长度(且因此,在线程束网格160中的列的数 量)由L = maX(BP(X)+FP(X))+l给定,其中最大值是子图中所有PE χ的数量。PE χ的分 配区间由[BP(X),L-FP(x)]给定。这些分配区间反映了在分配过程开始时的情况。所述分 配区间通常随着分配过程的进行而变化。图7是示意性地示出了根据本发明的一个实施方案的用于将PE放置在一个线程 束网格中的分配区间的图解。图7涉及示例子图180,其包括8个PE 76,表示为A…H。所 述PE将要被放置在具有两个序列164的线程束网格中。因为穿过此图的最长路径是三个 PE长,所以该实例中的每个序列164包括三个线程束空位168。这8个PE的前向段和反向段在下表中给出
权利要求
1.一种计算方法,包括接受计算任务的定义,该计算任务包括具有执行依赖性的多个原子处理元(PE),每个 执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;编译所述计算任务以用于在多处理器设备上并发地执行,所述多处理器设备包括多个 处理器,所述多个处理器通过在一个包括第二数量的执行序列的调用数据结构中不与所述 执行依赖性冲突地布置所述PE而能够同时地执行第一数量的PE,所述第二数量大于1且不 超过所述第一数量;以及调用所述多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并 行地执行所述执行序列,以产生所述计算任务的结果。
2.根据权利要求1所述的方法,其中所述计算任务包括对一个设计进行验证的任务。
3.根据权利要求1所述的方法,其中所述计算任务包括下列之一信号处理任务、图像 处理任务、包处理任务和纠错编码(ECC)任务。
4.根据权利要求1所述的方法,其中所述多处理器设备包括图形处理单元(GPU)。
5.根据权利要求1所述的方法,其中所述多处理器设备包括选自由下列组成的一组类 型中的至少一个设备类型数字信号处理器和多核中央处理单元(CPU)。
6.根据权利要求1所述的方法,其中编译所述计算任务包括将每个执行序列中的PE分 组成PE组(PEG)。
7.根据权利要求1所述的方法,其中所述多处理器设备根据内建调度策略调度所述PE 以用于由所述多个处理器执行,且其中调用所述多处理器设备包括使得所述多处理器设备 并行地执行所述第二数量的执行序列,如同布置在执行数据结构中,而与所述内建调度策 略无关。
8.根据权利要求1-7中任一所述的方法,其中所述多处理器被分成组布置,每个组都 被指派以执行提供给所述多处理器设备的一个或多个线程块,且其中调用所述多处理器设 备包括提供每个执行序列作为待要被所述组中的一个组内的处理器执行的一个相应的线 程块。
9.根据权利要求8所述的方法,其中所述每个组中的所述处理器访问一个相应的共享 存储器,且其中编译所述计算任务包括使得一个给定执行序列中的PE通过被指派以执行 该给定执行序列的一组处理器的共享存储器来交换数据。
10.根据权利要求1-7中任一所述的方法,其中将所述PE布置在所述调用数据结构 中包括最小化最长执行序列的长度同时不超过所述第一数量且不与所述执行依赖性相冲 突。
11.根据权利要求1-7中任一所述的方法,其中一个给定执行依赖性规定了使驱PE将 在受驱PE之前被执行,且其中将所述PE布置在所述调用数据结构中包括在给定执行序列 中将所述受驱PE放置在所述使驱PE之后。
12.根据权利要求1-7中任一所述的方法,其中一个给定执行依赖性规定了使驱PE将 在受驱PE之前执行,且其中将所述PE布置在所述调用数据结构中包括在第一执行序列中 放置所述使驱PE,在不同于所述第一执行序列的第二执行序列中放置所述受驱PE,并且向 所述第二执行序列中插入一个同步元,该同步元暂停所述第二执行序列的执行直到给定的 所述使驱PE完全被执行为止。
13.根据权利要求1-7中任一所述的方法,其中编译所述计算任务包括从所述计算任 务提取多个非循环子图,并且编译所述多个非循环子图以产生相应的多个调用数据结构。
14.根据权利要求1-7中任一所述的方法,其中将所述PE布置在所述调用数据结构中 包括定义一个顺序,按此顺序选择所述PE以放置在所述执行序列中,且按此顺序用所述 PE填充所述执行序列。
15.根据权利要求14所述的方法,其中所述定义一个顺序包括,为每个PE 确定通向所述PE的一个最长的执行依赖性链的第一长度;确定始自所述给定PE的一个最长的执行依赖性链的第二长度; 基于所述第一长度和所述第二长度,确定一个分配区间——其包括沿着所述执行序列 的PE的可能的位置;以及以所述分配区间的相应的长度的升序来排列所述PE。
16.根据权利要求15所述的方法,其中填充所述执行序列包括,将每个PE放置在所述 执行序列中之一的相应的分配区间之内。
17.根据权利要求14所述的方法,其中所述定义一个顺序包括识别输出组,每个输出组包括两个或更多个PE——其驱动了相应的受驱PE ; 识别输入组,每个输入组包括至少两个由一个相应的使驱PE所驱动的PE ; 基于包含了每个PE的输出组和输入组的数量,为所述每个PE指派一个相应的组评分;并且基于所述PE的组评分,定义所述顺序。
18.根据权利要求1-7中任一所述的方法,其中将所述PE布置在所述调用数据结构中 包括对于一个给定PE以及所述执行序列中的一组可能的位置,计算由将所述给定PE放置 在所述可能的位置而导致的相应的分配成本;以及将所述给定PE放置在所述可能的位置 中的具有最低分配成本的一个位置。
19.根据权利要求18所述的方法,其中计算所述分配成本包括,根据选自下列因素组 成的一组因素中的至少一个因素,估计给定执行序列中的给定的可能的位置的分配成本由将所述给定PE放置在所述给定的可能的位置而导致的所述调用数据结构的执行时 间的增加;在所述给定执行序列中和所述给定PE共享一个公共使驱PE的PE的第一数量; 在所述给定执行序列中和所述给定PE共享一个公共受驱PE的PE的第二数量; 在所述给定执行序列中和所述给定PE共享一个公共执行依赖性的PE的第三数量;以及距为所述给定PE计算的最佳位置的距离。
20.根据权利要求1-7中任一所述的方法,其中将所述PE布置在所述调用数据结构中 包括,将所述PE以线程束布置在每个执行序列中,每个线程束包括给定类型的一个或多个 PE。
21.根据权利要求1-7中任一所述的方法,其中编译所述计算任务包括,对于给定执 行序列,定义将变量从所述多处理器设备的设备存储器取到高速缓存的确定性高速缓存模 式,并且在执行所述给定执行序列期间将所述变量中的至少一些从所述高速缓存丢弃,并 且使得所述多处理器设备在执行所述给定执行序列时实现所述确定性高速缓存模式。
22.根据权利要求21所述的方法,其中所述给定执行序列中的PE被分组成PE组 (PEG),且其中定义所述高速缓存模式包括对于在给定PEG的执行期间存在于所述高速缓存中的每个变量,识别在所述给定执行 序列中接下来将使用该变量的相应的下一个PEG ;一旦在执行所述给定PEG之后需要从所述高速缓存丢弃一个或多个变量时,选择该一 个或多个变量中的一个变量,所选择的变量的相应的下一个PEG具有沿着所述给定执行序 列的距所述给定PEG最大的距离;并且在所述高速缓存模式中定义,在执行所述给定PEG之后丢弃所选择的变量。
23.根据权利要求21所述的方法,其中定义所述高速缓存模式包括,在单个取命令中 合并对两个或更多个变量的取操作。
24.根据权利要求23所述的方法,其中合并所述取操作包括为每个变量沿着所述给 定执行序列定义一个取区间,所述取区间自当该变量变得有效之时开始,至当该变量首次 被使用时结束;以及定义所述单个取命令以包括至少两个在相应的取区间有重叠的变量, 并且将所述单个取命令放置为在所述重叠的期间发生。
25.根据权利要求M所述的方法,其中合并所述取操作包括,通过识别在所述单个取 命令的位置和所述给定变量首次被使用的时间之间具有最小距离的给定变量,来选择待要 被合并到所述单个取命令中的给定变量。
26.根据权利要求21所述的方法,其中定义所述高速缓存模式包括,在单个存储命令 中合并对两个或更多个变量的存储操作。
27.根据权利要求21所述的方法,其中所述给定执行序列的确定性高速缓存模式以给 定顺序从所述设备存储器取变量,且其中编译所述计算任务包括,根据所述给定顺序以连 续的地址将所述变量预排列在所述设备存储器中。
28.根据权利要求1-7中任一所述的方法,其中编译所述计算任务包括,通过访问所述 多处理器设备的设备存储器,使得所述第一执行序列提供一个或多个变量作为输入给第二 执行序列。
29.根据权利要求1-7中任一所述的方法,其中编译所述计算任务包括产生多个调用 数据结构,所述多个调用数据结构中的每个调用数据结构包括一个或多个执行序列;以及 使得所述执行序列中的至少一些执行序列通过访问所述多处理器设备的设备存储器而在 不同的调用数据结构之间交换变量。
30.根据权利要求四所述的方法,其中在所述不同的调用数据结构之间交换的每个变 量都由一个或多个源执行序列所产生,并被一个或多个目标序列所使用,且其中编译所述 计算任务包括,根据所述源执行序列和所述目标执行序列将所述变量聚合成组,并且将每 个组以连续的地址存储在所述设备存储器中。
31.根据权利要求30所述的方法,其中使得所述执行序列交换所述变量包括,使得所 述执行序列以读命令从所述设备存储器读所述变量,每个读命令从所述组之一读取预定大 小的数据。
32.根据权利要求31所述的方法,还包括,当两个或更多个组中的变量联合起来未超 过所述预定大小时,定义一个从所述两个或更多个组读取所述变量的合并的读命令。
33.根据权利要求四所述的方法,还包括,当在一个给定调用数据结构中的多个执行序列的一个集合中使用一组变量时,仅仅使得所述多个执行序列中的一个部分子集从所述 设备存储器读取所述一组变量,并且将该变量传递给该集合中的其他的执行序列。
34.根据权利要求33所述的方法,其中使得所述执行序列的部分子集传递所述变量包 括,识别该集合中不能从该调用数据结构的其他执行序列接收所述变量的至少一个执行序 列,并且将所识别的序列添加到所述部分子集。
35.根据权利要求33所述的方法,其中使得所述执行序列的部分子集传递所述变量包 括,识别所述给定调用数据结构中的同步元——其将所述部分子集连接到所述集合中的其 他执行序列,并且分配与所述同步元相关联的通信资源以便传递所述变量。
36.根据权利要求1-7中任一所述的方法,其中编译所述计算任务并且调用所述多处 理器设备包括,运行一个事件驱动仿真——其仿真了所述计算任务。
37.根据权利要求1-7中任一所述的方法,其中将所述PE布置在所述调用数据结构中 包括,根据选自下列因素组成的一组因素中的至少一个因素,将所述PE放置在所述执行序 列中始自所述PE的相应的最长的执行依赖性链的长度; 执行序列的相应的占用程度;以及 由对所述PE的放置而引起的同步元。
38.一种计算方法,包括接受计算任务的定义,该计算任务包括具有执行依赖性的多个原子处理元(PE),每个 执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的第一 PE ;编译所述计算任务以用于在多处理器设备上并发地执行,所述多处理器设备包括并行 运行的多个处理器,并通过在一个包括多个执行序列的调用数据结构中不与所述执行依赖 性冲突地布置所述PE来调度该PE,以用于由所述多个处理器根据微处理器设备的内建调 度策略执行;以及调用所述多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并 行地且无关于所述多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务的结果。
39.一种计算装置,包括一个界面,被连接以接受计算任务的定义,该计算任务包括具有执行依赖性的多个原 子处理元(PE),每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的 第一 PE;以及一个中央处理单元(CPU),所述中央处理单元被布置为编译所述计算任务以用于在 多处理器设备上并发地执行,所述多处理器设备包括多个处理器,所述多个处理器通过在 一个包括第二数量的执行序列的调用数据结构中不与所述执行依赖性冲突地布置所述PE 而能够同时地执行第一数量的PE,所述第二数量大于1且不超过所述第一数量;以及调用 所述多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地执行 所述执行序列,以产生所述计算任务的结果。
40.根据权利要求39所述的装置,其中所述计算任务包括对一个设计进行验证的任务。
41.根据权利要求39所述的装置,其中所述计算任务包括下列之一信号处理任务、图像处理任务、包处理任务和纠错编码(ECC)任务。
42.根据权利要求39所述的装置,其中所述多处理器设备包括图形处理单元(GPU)。
43.根据权利要求39所述的装置,其中所述多处理器设备包括选自由下列组成的一组 类型中的至少一个设备类型数字信号处理器和多核中央处理单元(CPU)。
44.根据权利要求39所述的装置,其中所述CPU被布置为将每个执行序列中的PE分组 成 PE 组(PEG)。
45.根据权利要求39所述的装置,其中所述多处理器设备根据内建调度策略调度所述 PE用于由所述多个处理器执行,且其中所述CPU被布置为使得所述多处理器设备并行地执 行所述第二数量的执行序列,如同布置在执行数据结构中,而与所述内建调度策略无关。
46.根据权利要求39-45中任一所述的装置,其中所述多处理器被分成组布置,每个组 都被指派以执行提供给所述多处理器设备的一个或多个线程块,且其中所述CPU被布置为 提供每个执行序列给所述多处理器设备以作为待要被所述组中的一个组内的处理器执行 的一个相应的线程块。
47.根据权利要求46所述的装置,其中所述每个组中的所述处理器访问一个相应的共 享存储器,且其中所述CPU被布置为使得一个给定执行序列中的PE通过被指派以执行该给 定执行序列的一组处理器的共享存储器来交换数据。
48.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,最小化最长执行 序列的长度同时不超过所述第一数量且不与所述执行依赖性相冲突。
49.根据权利要求39-45中任一所述的装置,其中一个给定执行依赖性规定了使驱PE 将在受驱PE之前被执行,且其中所述CPU被布置为在给定执行序列中将所述受驱PE放置 在所述使驱PE之后。
50.根据权利要求39-45中任一所述的装置,其中一个给定执行依赖性规定了使驱PE 将在受驱PE之前执行,且其中所述CPU被布置为,在第一执行序列中放置所述使驱PE,在不 同于所述第一执行序列的第二执行序列中放置所述受驱PE,并且向所述第二执行序列中插 入一个同步元,该同步元暂停所述第二执行序列的执行直到给定的所述使驱PE完全被执 行为止。
51.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,从所述计算任务 提取多个非循环子图,并且编译所述多个非循环子图以产生相应的多个调用数据结构。
52.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为定义一个顺序,按 此顺序选择所述PE以放置在所述执行序列中,且按此顺序用所述PE填充所述执行序列。
53.根据权利要求52所述的装置,其中所述CPU被布置为,为每个PE确定通向所述PE的一个最长的执行依赖性链的第一长度;确定始自所述给定PE的一个最长的执行依赖性链的第二长度;基于所述第一长度和所述第二长度,确定一个分配区间——其包括沿着所述执行序列 的PE的可能的位置;并且以所述分配区间的相应的长度的升序来排列所述PE。
54.根据权利要求53所述的装置,其中所述CPU被布置为,通过将每个PE放置在所述 执行序列中之一的相应的分配区间之内,来填充所述执行序列。
55.根据权利要求52所述的装置,其中所述CPU被布置为识别输出组,每个输出组包括两个或更多个PE——其驱动了相应的受驱PE ;识别输入组,每个输入组包括至少两个由一个相应的使驱PE所驱动的PE ;基于包含了每个PE的输出组和输入组的数量,为该PE指派一个相应的组评分;并且基于所述PE的组评分,定义所述顺序。
56.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为对于一个给定PE 以及所述执行序列中的一组可能的位置,计算由将所述给定PE放置在所述可能的位置而 导致的相应的分配成本;以及将所述给定PE放置在所述可能的位置中的具有最低分配成 本的一个位置。
57.根据权利要求56所述的装置,其中所述CPU被布置为,根据选自下列因素组成的一 组因素中的至少一个因素,估计给定执行序列中的给定的可能的位置的分配成本由将所述给定PE放置在所述给定的可能的位置而导致的所述调用数据结构的执行时 间的增加;在所述给定执行序列中和所述给定PE共享一个公共使驱PE的PE的第一数量;在所述给定执行序列中和所述给定PE共享一个公共受驱PE的PE的第二数量;在所述给定执行序列中和所述给定PE共享一个公共执行依赖性的PE的第三数量;以及距为所述给定PE计算的最佳位置的距离。
58.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,将所述PE以线程 束布置在每个执行序列中,每个线程束包括给定类型的一个或多个PE。
59.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,对于给定执行序 列,定义将变量从所述多处理器设备的设备存储器取到高速缓存的确定性高速缓存模式, 并且在执行所述给定执行序列期间将所述变量中的至少一些从所述高速缓存丢弃,并且使 得所述多处理器设备在执行所述给定执行序列时实现所述确定性高速缓存模式。
60.根据权利要求59所述的装置,其中所述给定执行序列中的PE被分组成PE组 (PEG),且其中所述CPU被布置为以如下方式定义所述高速缓存模式对于在给定PEG的执行期间存在于所述高速缓存中的每个变量,识别在所述给定执行 序列中接下来将使用该变量的相应的下一个PEG ;一旦在执行所述给定PEG之后需要从所述高速缓存丢弃一个或多个变量时,选择该一 个或多个变量中的一个变量,所选择的变量的相应的下一个PEG具有沿着所述给定执行序 列的距所述给定PEG最大的距离;并且在所述高速缓存模式中定义,在执行所述给定PEG之后丢弃所选择的变量。
61.根据权利要求59所述的装置,其中所述CPU被布置为在单个取命令中合并对两个 或更多个变量的取操作。
62.根据权利要求61所述的装置,其中所述CPU被布置为为每个变量沿着所述给定 执行序列定义一个取区间,所述取区间自当该变量变得有效之时开始,至当该变量首次被 使用时结束;以及定义所述单个取命令以包括至少两个在相应的取区间有重叠的变量,并 且将所述单个取命令放置为在所述重叠的期间发生。
63.根据权利要求62所述的装置,其中所述CPU被布置为,通过识别在所述单个取命令 的位置和所述给定变量首次被使用的时间之间具有最小距离的给定变量,来选择待要被合 并到所述单个取命令中的给定变量。
64.根据权利要求59所述的装置,其中所述CPU被布置为,在单个存储命令中合并对两 个或更多个变量的存储操作。
65.根据权利要求59所述的装置,其中所述给定执行序列的确定性高速缓存模式,以 给定顺序从所述设备存储器取变量,且其中所述CPU被布置为,根据所述给定顺序以连续 的地址将所述变量预排列在所述设备存储器中。
66.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,通过访问所述多 处理器设备的设备存储器,使得所述第一执行序列提供一个或多个变量作为输入给第二执 行序列。
67.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,产生多个调用数 据结构,所述多个调用数据结构中的每个调用数据结构包括一个或多个执行序列,以及使 得所述执行序列中的至少一些执行序列通过访问所述多处理器设备的设备存储器而在不 同的调用数据结构之间交换变量。
68.根据权利要求67所述的装置,其中在所述不同的调用数据结构之间交换的每个 变量都由一个或多个源执行序列所产生,并被一个或多个目标序列所使用,且其中所述CPU 被布置为,根据所述源执行序列和所述目标执行序列将所述变量聚合成组,并且将每个组 以连续的地址存储在所述设备存储器中。
69.根据权利要求68所述的装置,其中所述CPU被布置为,使得所述执行序列以读命令 从所述设备存储器读所述变量,每个读命令从所述组之一读取预定大小的数据。
70.根据权利要求69所述的装置,其中当两个或更多个组中的变量联合起来未超过所 述预定大小时,所述CPU被布置为,定义一个从所述两个或更多个组读取所述变量的合并 的读命令。
71.根据权利要求67所述的装置,其中,当在一个给定调用数据结构中的多个执行序 列的一个集合中使用一组变量时,所述CPU被布置为,仅仅使得所述多个执行序列中的一 个部分子集从所述设备存储器读取所述一组变量,并且将该变量传递给该集合中的其他的 执行序列。
72.根据权利要求71所述的装置,其中所述CPU被布置为,识别该集合中不能从该调用 数据结构的其他执行序列接收所述变量的至少一个执行序列,并且将所识别的序列添加到 所述部分子集。
73.根据权利要求71所述的装置,其中所述CPU被布置为,识别所述给定调用数据结构 中的同步元——其将所述部分子集连接到所述集合中的其他执行序列,并且分配与所述同 步元相关联的通信资源以便传递所述变量。
74.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,与所述多处理器 设备一起,运行一个事件驱动仿真——其仿真了所述计算任务。
75.根据权利要求39-45中任一所述的装置,其中所述CPU被布置为,根据选自下列因 素组成的一组因素中的至少一个因素,将所述PE放置在所述执行序列中始自所述PE的相应的最长的执行依赖性链的长度;执行序列的相应的占用程度;以及由对所述PE的放置而引起的同步元。
76.一种计算装置,包括一个界面,被连接以接受计算任务的定义,该计算任务包括具有执行依赖性的多个原 子处理元(PE),每个执行依赖性规定了在执行一个相应的第二 PE之前要执行一个相应的 第一 PE;以及一个中央处理单元(CPU),所述中央处理单元被布置为编译所述计算任务以用于在 多处理器设备上并发地执行,所述多处理器设备包括并行运行的多个处理器,并通过在一 个包括多个执行序列的调用数据结构中不与所述执行依赖性冲突地布置所述PE来调度该 PE,以用于由所述多个处理器根据微处理器设备的内建调度策略执行;以及调用所述多处 理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地且无关于所述 多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务的结果。
77.一种计算装置,包括一个多处理器设备,包括能够同时执行第一数量的原子处理元(PE)的多个处理器;以及一个中央处理单元(CPU),所述中央处理单元被布置为接受计算任务的定义,该计算 任务包括具有执行依赖性的多个原子处理元(PE),每个执行依赖性规定了在执行一个相应 的第二 PE之前要执行一个相应的第一 PE ;通过在包括第二数量的执行序列的调用数据结 构中不与所述执行依赖性冲突地布置所述PE来编译该计算任务以用于在所述多处理器设 备上并发地执行,所述第二数量大于1且不超过所述第一数量;以及调用所述多处理器设 备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地执行所述执行序列, 以产生所述计算任务的结果。
78.一种计算装置,包括一个多处理器设备,包括并行运行的多个处理器,且根据微处理器设备的内建调度策 略调度原子处理元(PE)以用于由所述多个处理器执行;以及一个中央处理单元(CPU),所述中央处理单元被布置为接受计算任务的定义,该计算 任务包括具有执行依赖性的多个PE,每个执行依赖性规定了在执行一个相应的第二 PE之 前要执行一个相应的第一 PE ;通过在包括多个执行序列的调用数据结构中不与所述执行 依赖性冲突地布置所述PE来编译该计算任务,以用于在所述多处理器设备上并发地执行; 以及调用所述多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构并行 地且无关于所述多处理器设备的调度策略地执行所述执行序列,以产生所述计算任务的结果
79.一种计算机软件产品,所述产品包括计算机可读介质,在所述计算机可读介质中存 储了程序指令,所述指令当被计算机读取时,使得所述计算机接受计算任务的定义,该计 算任务包括具有执行依赖性的多个原子处理元(PE),每个执行依赖性规定了在执行一个相 应的第二 PE之前要执行一个相应的第一 PE ;编译该计算任务以用于在多处理器设备上并 发地执行,所述多处理器设备包括多个处理器,所述多个处理器通过在一个包括第二数量 的执行序列的调用数据结构中不与所述执行依赖性冲突地布置所述PE而能够同时地执行 第一数量的PE,所述第二数量大于1且不超过所述第一数量;以及调用所述多处理器设备 以运行软件代码,所述软件代码响应于所述调用数据结构并行地执行所述执行序列,以产 生所述计算任务的结果。
80.一种计算机软件产品,所述产品包括计算机可读介质,在所述计算机可读介质中存储了程序指令,所述指令当被计算机读取时,使得所述计算机接受计算任务的定义,该计 算任务包括具有执行依赖性的多个原子处理元(PE),每个执行依赖性规定了在执行一个相 应的第二 PE之前要执行一个相应的第一 PE ;编译该计算任务以用于在多处理器设备上并 发地执行,所述多处理器设备包括并行运行的多个处理器,通过在一个包括多个执行序列 的调用数据结构中不与所述执行依赖性冲突地布置所述PE来调度该PE,以用于由所述多 个处理器根据微处理器设备的内建调度策略执行;以及调用该多处理器设备以运行软件代 码,所述软件代码响应于所述调用数据结构而并行地且无关于所述多处理器设备的调度策 略地执行所述执行序列,以产生所述计算任务的结果。
全文摘要
一种计算方法,包括接受计算任务(68)的定义,该计算任务包括具有执行依赖性(80)的多个原子处理元(PE-76)。每个执行依赖性规定了在执行一个相应的第二PE之前要执行一个相应的第一PE。编译该计算任务以用于在多处理器设备(32)上并发地执行,所述多处理器设备包括多个处理器(44),所述多个处理器(44)通过在一个包括第二数量的执行序列(98)的调用数据结构(90)中不与所述执行依赖性冲突地布置所述PE而能够同时地执行第一数量的PE,所述第二数量大于1且不超过所述第一数量。调用所述多处理器设备以运行软件代码,所述软件代码响应于所述调用数据结构而并行地执行所述执行序列,以产生所述计算任务的结果。
文档编号G06F15/16GK102089752SQ200980126852
公开日2011年6月8日 申请日期2009年6月30日 优先权日2008年7月10日
发明者S·密茨拉希, T·本-戴维, U·泰 申请人:洛克泰克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1