数据流体系结构
DataFlow体系结构是基于数据流的计算机体系结构,它直接与传统的von Neumann架构或控制流架构进行对比。数据流架构在概念上没有程序计数器:指令的可执行性和执行仅根据指令的输入参数的可用性确定,因此可能难以预测指令执行顺序。
尽管没有商业上成功的通用计算机硬件已经使用了数据流架构,但它已在专业硬件中成功实施,例如在数字信号处理,网络路由,图形处理,遥测,遥测以及数据仓库和人工智能中(如AS AS) :多态性数据流卷积引擎,结构驱动,数据流计划)。当今许多软件体系结构(包括数据库引擎设计和并行计算框架)也非常相关。
同步数据流架构调谐以匹配由实时数据路径应用程序(例如电线速度数据包转发)呈现的工作负载。自然界确定性的数据流体系结构使程序员能够管理复杂的任务,例如处理器负载平衡,同步和访问公共资源。
同时,由于术语dataFlow用于并行编程的子区域:用于数据流编程。
历史
数据流的硬件体系结构是1970年代和1980年代初计算机体系结构研究的主要主题。麻省理工学院的杰克·丹尼斯(Jack Dennis)开创了静态数据流体系结构的领域,而曼彻斯特数据流机器和标记为代币架构的架构是动态数据流的主要项目。
但是,这项研究从未克服与:
- 在大规模并行系统中有效地广播数据令牌。
- 在大规模并行系统中有效派遣指令令牌。
- 构建足够大的内容构建内容的内存(CAM),以保持真实程序的所有依赖关系。
事实证明,指令及其数据依赖性太细粒了,无法有效分布在大型网络中。也就是说,指令和标记结果通过大型连接网络传播的时间比进行许多计算的时间更长。
尽管如此,自1990年代以来,排序执行(OOE)已成为主要的计算范式。这是限制数据流的一种形式。该范式介绍了执行窗口的想法。执行窗口遵循von Neumann架构的顺序顺序,但是在窗口中,允许在数据依赖性顺序中完成指令。这是在CPU中完成的,该CPU会在执行窗口中动态标记代码的数据依赖项。动态跟踪数据依赖性,将OOE CPU限制为少数执行单元(2-6)并将执行窗口大小限制为32至200个指令的逻辑复杂性,将执行窗口大小限制为32至200个说明,比整个数据流机器所设想的要小得多。 。
数据流架构主题
静态和动态数据流机器
使用常规内存地址作为数据依赖性标签的设计称为静态数据流机。这些计算机不允许同时执行相同例程的多个实例,因为简单的标签无法区分它们。
使用内容 - 可调件内存(CAM)的设计称为动态数据流计算机。他们在内存中使用标签来促进并行性。
编译器
通常,在控制流架构中,编译器分析了指令之间数据依赖项的程序源代码,以便更好地组织二进制输出文件中的指令序列。指令是依次组织的,但依赖性信息本身未记录在二进制文件中。为数据流计算机编译的二进制文件包含此依赖项信息。
数据流编译器通过为每个依赖项创建唯一的标签而不是使用变量名来记录这些依赖项。通过给出每个依赖性一个唯一的标签,它允许二进制中的非依赖性代码段未顺序执行和并行执行。编译器检测数据流的循环,中断语句和各种编程控制语法。
程式
程序被加载到动态数据流计算机的CAM中。当指令的所有标记操作数可用时(即从先前的指令和/或用户输入输出)时,该指令将标记为可执行单元的执行。
这被称为激活或发射指令。指令由执行单元完成后,将其输出数据(带有标签)发送到CAM。然后,任何取决于此特定基准的说明(由其标签值识别)都被标记为准备执行。这样,随后的说明以适当的顺序执行,以避免种族条件。该顺序可能与人类程序员(编程订单)设想的顺序订单不同。
指示
指令及其所需的数据操作数将作为数据包传输到执行单元,也称为指令令牌。同样,将输出数据作为数据令牌传输回CAM。指令和结果的包装化允许大规模平行执行就绪指令。
DataFlow网络将指令令牌传递给执行单元,并将数据令牌返回到CAM。与传统的von Neumann架构相反,数据令牌并未永久存储在内存中,而是瞬态消息,仅在运输到指令存储时才存在。