流数据处理学习1

来源:互联网 发布:黑豹乐队 知乎 编辑:程序博客网 时间:2024/05/17 00:15

以下资料均来自:http://en.wikipedia.org/wiki/Stream_processing

流处理是一种计算机编程范例,与简单指令复杂数据相关,允许一些应用更容易地开发一种受限制的并行计算,这些应用能使用多种计算单元,比如在一个GPU(图像处理器)或者现场可编程门阵列(FPGAs)上的FPUs(浮点计算单元),而不需要显式地管理分配,永不以及这些单元之间的通信。

流处理范例通过限制并行计算实现了简化了并行软件和硬件。给到一个数据集(流)和一系列的操作(内核函数)被应用到流里的每一个元素。均匀流,也就是每一个内核函数被应用到流利的所有元素,这是典型的。内核函数经常是流水线的,本地的芯片上的内存被重用来减少外部内存带宽。因为内核和流的抽象暴露了数据关联,变异工具能完全自动和优化芯片上的管理任务,流处理硬件能使用寄存器计数,比如,为了实时运行DMAs(直接内存存取),这时依赖被知道了。减少了人工的DMA控制降低了软件的复杂度,除去硬件的缓存减少了用于计算单元比如ALU(算数逻辑单元)的区域的数量。

直到1980年代数据流在数据流编程中被探索,一个例子是SISAL语言(流和迭代在一个简单分配语言)。

流数据处理本质上是一个被数据中心化模型驱动和平衡的在传统的DSP(数字信号处理)或者GPU类型应用运行得非常好,但是对于通用的带有更多随即数据存取的处理则效果不佳。通过牺牲模型中的一些灵活性,蕴含式允许更简单,更快更有效地执行。依靠上下文,处理器设计可能被调整到最大效率或者是与灵活性的一个折中。

流处理特别适合于显示出以下3个特征的应用:

1.计算强度,每个I/O的算数操作的数量或者全局内存引用,在很多信号处理应用现在是以超过50:1而且随便算法复杂度增长。

2.数据并行度存在一个内核中如果相同的函数被应用到全部的输入流的记录中和一定量的记录能被处理同时不需要等待前一部分记录的结果。

3.数据局部性是一种很特殊的时间局部性在信号和媒体处理应用中,数据产生一次,读一次或者两次,然后就再也不会读了。中间流在内核之间传递就像是直接使用流数据模型中间数据和内核函数能捕捉到局部信息。

 

原创粉丝点击