大数据数据流技术在GPU和大数据处理中的应用


数据流技术在GPU和大数据处理中的应用
苏华友, 梅松竹, 李荣春, 窦勇
国防科技大学计算机学院
1 引言数据流(dataflow)是相对于控制流而言的一种计算技术 , 从维基百科的解释来看 , 数据流在不同的上下文中有不同的含义 。 从计算机硬件体系结构的角度看 , 数据流计算机由数据流节点组成 , 当数据流节点需要的操作数就绪之后就可以执行指令 , 其执行结果被直接输送到需要该结果的其他数据流节点 。 数据流计算机中的指令包含数据的输入节点标识和输出节点标识 , 指令之间数据的依赖关系决定了程序指令的执行顺序 。 从软件体系结构的角度来看 , 数据流是一种软件范式 , 其基本思想是将计算参与者分离为多个可以同时执行的阶段 。
数据流一词最早出现在20世纪70年代 , 当时数据流计算机是体系结构研究的一个热点话题 , 是非冯·诺伊曼结构研究的一个重要分支 。 数据流计算机根据对数据令牌(token)的处理方式不同 , 可以分为静态数据流计算机和动态数据流计算机 。 数据流计算机体系结构具有十分明显的特点 , 包括:数据的就位顺序决定了指令的执行顺序;数据流节点的资源就位后就可以直接执行指令;程序通过数据流图的形式描述 。 其主要优点是可以开发很好的并行性 , 只有真正与数据相关才会引起程序指令之间的依赖问题 , 这一优点在非规则计算中具有明显的作用 。 但是 , 数据流计算机的缺点也十分明显:首先 , 因为程序的状态并不是确定的 , 程序的调试会比较困难;第二 , 指令包含了执行结果的流向信息 , 不会存回到存储器中 , 没有有效利用数据的局域性来提高程序的性能 。 正是因为如此 , 严格意义上的数据流计算机并没有获得成功 , 至少在商业领域没有被广泛地应用 。 但是 , 数据流计算机的思想极大地影响了计算机体系结构的思想 , 尤其是在并行体系结构方面 , 通过大量积累同一类型的计算单元 , 计算系统能够同时处理不同的数据 , 计算单元之间相互独立 。 受数据流计算思想的影响 , 在冯·诺伊曼结构的基础上加入数据流计算的理念 , 融合控制流和计算流的优点 , 面向某些特定的计算领域出现了十分高效的计算机系统 , 例如面向媒体处理的流处理器和面向大规模科学计算的图形处理器(graphics processing unit , GPU)等 。
随着并行计算机体系结构的出现 , 相应的编程模型也发生了变化 。 高性能是很多应用追求的主要目标 , 为了解决多核处理器的效率问题 , 研究人员提出了数据流编程模型 , 它可以充分挖掘应用中的并行性 , 提高计算资源的效率 。 与传统编程语言相比 , 数据流编程模型有明显不同的特点 。 首先 , 数据流编程模型将计算和通信分离 , 将应用描述成数据流图的模式 , 数据流图刻画了整个应用的数据流动方式 , 数据流图中的节点表示计算单元 , 边表示数据传输路径 。 数据流编程模型通过对数据流图的解析 , 完成对数据之间依赖关系的刻画 , 根据数据的依赖关系对任务进行调度和分配 , 并利用软件流水充分挖掘程序的并行性 。 目前 , 已经有很多采用数据流编程模型思想的编程语言 , 如面向特定领域的流编程模型StreamIt , 它主要针对科学计算与编解码处理 。 英伟达(NVIDIA)公司的统一计算设备架构(compute unified device architecture , CUDA)是一种借鉴数据流模型的、面向GPU的、服务于高性能计算的编程模型 。 随着大数据的持续广泛应用 , 流编程也在大数据系统中得到了应用 , 如MapReduce、Spark、Flink等 。
本文将从硬件和软件2个角度介绍数据流技术的主要应用 , 重点阐述数据流思想在微观体系结构方面的应用 , 从数据流计算机、流处理器到如今极度火热的GPU 。 在软件框架方面 , 重点介绍典型流计算模型在大规模并行与分布处理中的使用 。
2 数据流技术在计算机硬件体系结构中的应用 数据流计算的思想对计算机硬件体系结构的发展具有十分重要的作用 。 最初 , 研究人员是希望找到一种非冯·诺伊曼结构的计算机体系结构 , 解决传统冯·诺伊曼计算机在并行计算方面的问题 , 因此出现了单纯的数据流计算机及与其相关的系统 。 之后 , 他们发现严格意义上的数据流计算机的实现和维护都具有一定的难度 , 而且性能并没有太大的提升 , 因此就产生了将数据流和控制流结合的思想 , 流处理器就是这一思想的产物 。 流处理器采用超长指令字(very long instruction word ,VLIW)技术 , 将计算和访存进行解耦 , 将数据组织成流 , 并加载到流处理单元进行处理 。 流处理器的研究成果被应用到GPU中并持续改良 , 其中GPU中的计算单元——流多处理器(streaming multiprocessor ,SM)就是流处理器的产物 。


推荐阅读