7K+ 次浏览
存在六种基本的计算模型,例如图灵机、冯·诺依曼机、数据流、应用性、基于对象的、基于谓词逻辑等等。这些模型被称为基本模型,因为它们可以使用一组基本的抽象来声明。可以为每个基本模型定义任意数量的子类层次结构。例如,如果将过程抽象引入冯·诺依曼模型,则可以根据所有进程是否可以访问全局数据空间(共享内存子类)或进程可以拥有自己的局部数据空间,并通过……阅读更多
2K+ 次浏览
计算模型的理论比编程语言和计算机体系结构的方法具有更高的抽象级别。编程语言可以被视为一种规范设备,它使特定计算模型的计算任务系统适用。计算机体系结构可以被认为是执行计算模型或实现使用编程语言定义的给定计算任务的工具,其中给定特定的计算模型。为了演示这些关系,可以考虑编程语言和计算机体系结构的基本特征,这些特征与冯·诺依曼计算模型相比。一种编程……阅读更多
537 次浏览
全局指令调度的实现是一种称为跟踪调度的技术。跟踪调度首先应用于为耶鲁大学的实验性 VLIW 机器 ELI-512 开发的 Bulldog 编译器 (Fisher 等人,1984),随后应用于商用 VLIW 机器 TRACE 系列的跟踪调度编译器 (Colwell 等人,1987)。最近发表的一种新的全局调度技术是 FRGS(有限资源全局调度),由 IBM 为 VLIW 和超标量处理器开发和实验性地实现 (Moon 和 Ebcioglu,1992,Moon 等人,1993)。跟踪调度这种技术起源于大多数指令调度技术,用于水平微码机器……阅读更多
ILP 编译器必须提取可接受的指令级并行性才能正确利用可用的硬件资源,特别是执行单元 (EU)。对于极度并行的 ILP 处理器(包括 VLIW 机器或高度超标量处理器)来说,这并非易事。具体来说,通用程序(包括操作系统或应用程序程序),其基本块大小较小,并行性极不规则,其特征在于不可预测的分支,使这项任务极其困难甚至无法解决。在这种方法中,无法预测基本块调度器能否提取足够的并行性来准确地为高度并行的 ILP 处理器提供足够的资源。因此,并行性贪婪的 ILP 处理器的编译器必须使用非常有效的调度技术,这些技术被称为……阅读更多
218 次浏览
软件流水线是一种编译时调度技术,它重叠连续的循环迭代以揭示操作级并行性。开发足够的软件流水线算法的一个必要问题是如何处理包含条件分支的循环。条件分支通过将一些可能的执行路径引入调度范围来提高复杂性并降低软件流水线算法的性能。软件流水线是通过基于展开的技术或模调度来实现的,如图所示。基于展开的技术的基本思想非常简单——展开循环几次并将展开的代码排列在……阅读更多
软件流水线是一种编译时调度技术,它重叠后续的循环迭代以揭示操作级并行性。开发足够的软件流水线算法的一个必要问题是如何处理包含条件分支的循环。条件分支通过提供一些可能的执行路径到调度机会来提高复杂性并降低软件流水线算法的性能。为了演示基本思想,让我们看看在具有多个并行运行的执行单元的 ILP 处理器上循环最可行的并行执行。让我们假设循环体的类似 RISC 的中间代码……阅读更多
循环是 ILP 处理器并行性的重要来源。因此,控制结构的规律性可以加快计算速度。循环调度是为高度并行 ILP 处理器(包括 VLIW)开发的指令调度器的中心点。循环调度的类型存在两种不同的循环调度类型:循环展开循环展开的基本概念是重复循环体多次,并丢弃不必要的迭代间代码,包括递减循环计数、循环结束验证和迭代间的条件回跳。这将缩短实现时间。循环展开可以执行……阅读更多
3K+ 次浏览
基本块调度是一种简洁但效率最低的代码调度技术。因此,只有基本块内的指令才能重新排序。结果,可行的加速由真实数据和控制依赖关系决定。基本块调度器通常用于轻度和中度并行的 ILP 处理器,例如流水线和早期超标量处理器。大多数用于 ILP 处理器的基本块调度器属于列表调度器的类别,例如为 MIPS 处理器、Sparc 处理器、RS/6000、HP 精确架构和 DEC α 21064 开发的那些(Kerns 和 Eggers,1993,Gibbons 和 Muchnick,1986)。列表调度器可以用于……阅读更多
代码调度用于涵盖依赖性检测和解决以及并行优化。代码调度通常与传统编译结合使用。代码调度器将一组或一系列可执行指令和强制执行在其上的优先级约束(通常以 DAG 的形式)作为输入。作为输出,它在每个调度阶段都尝试交付一个与依赖性无关的指令,并定义调度器管理精确可用执行时间的最佳选项。传统的非优化编译器可以被视为包含两个主要部分。编译器的前端部分实现……阅读更多
VLIW 指的是超长指令字 (Very Long Instruction Word)。这是一种指令集架构,旨在充分利用指令级并行性 (ILP) 来改进实现。中央处理器 (CPU) 使程序只能按顺序确定要执行的指令,而 VLIW 处理器则允许程序显式地定义要并行执行的指令。这种设计旨在实现更高的性能,而不会像某些多核设计那样复杂。VLIW 方法需要超长指令字来定义每个执行单元必须执行的操作。VLIW 指令的长度是传统 RISC 指令字长度的 n 倍……阅读更多