什么是流计算模型
什么是流(stream)?简而言之就是不间断的、连续的、移动的元素队列。所谓元素(record)由相关数据的集合组成,例如:一个三角形的顶点、法线、颜色信息,或者是一幅图像的8×8的像素区域,或者是一个简单的整数等。
实际上,在传统的标量程序设计模型中已经有流的概念,但是Imagine、MASA-I、YHFT64-2等流处理器中所使用的的流具有比标量体系结构中的流更深刻、更丰富的含义,是一种相对于机器中的字(word)更高级的抽象数据结构。在流体系结构中,流具有双重身份:既作为一个软件可见的程序变量存在,又作为一个硬件可见的管理单位存在。在程序中流具有很多属性,例如:流的名字、流的方向、流类型、流长、流元素的种类、流的使用者等等。当流被映射到硬件中时,这些属性仍然保持或者变个形式被硬件所见,例如流的名字变成stream id,而不是像变量名被映射到机器字后被丢弃。实际上流编译器已经利用过这些属性,但这些属性仍然被保存在一系列的特殊寄存器文件如流属性寄存器和软件中间件中。这些软件与硬件统一管理的属性成为流体系结构管理流的基础,也决定了流不同于一般数据集合,而是软硬件同时可见的抽象数据类型。同时,对流属性的看法决定了流体系结构强调软硬件联合管理的设计思想。
流在软件级和硬件级统一的属性(也称为流的基本约束)包括:
1. 流始终是大量数据聚合成的一维连续数据结构,虽然对其访问的索引可以不连续,但流中的数据始终是连续成批组织的;
2. 流是有向的,对于任何一个使用者来说,在对流的一次引用期间,该流不能既作为输入流又作为输出流;
3. 流是一个完整的整体,始终作为一个整体被使用和管理,在其生命周期内是不可以切割或者合并的,但可以允许派生和复制,派生流和复制的流与原来的流是不同的流。
4. 流具有唯一标示,这个标示与机器字不同,不仅仅是其在存储空间中的地址。
5. 流具有长度属性,长度属性有两个含义,一个是其初始长度,一个是其当前访问长度,但无论如何对流元素的任何访问包括索引访问不能越界。
6. 流本身具有类型属性,流编译器和流体系结构硬件模块都能够识别流的类型,并根据类型不同做出不同的反应,机器字不具备这种属性。
流所具有的这些属性是流体系结构中的某些数据集合被称为“流”的根本原因。
流计算模型简称流模型,是对流进行处理的模型,其主要思想是将应用分解成一连串对流进行操作的计算核心(Kernel),流在Kernel之间传递,在Kernel内部完成对流中元素的处理,图1.1以图像深度提取应用为例给出了一个流计算模型的示例。

图1. 流计算模型示例_图像深度提——图像深度提取
流计算模型的本质思想可归纳为以下五点:
1.计算过程的分解;
2.解耦数据的运算和存取;
3.数据的分块处理;
4.显式通信;
5.并行处理。
流计算模型是一种高可预知的结构化模型,在流程序级,Kernel和Stream的生产者消费者关系将任务级并行(TLP)显式地暴露出来,包括Kernel和Kernel之间的, 流加载或存储和Kernel执行之间等,同时流的数据成批的特性和Kernel内部的密集计算分别揭示了丰富的数据级并行(DLP)和指令级并行(ILP)。
