以下内容均来自:http://en.wikipedia.org/wiki/Stream_processing
流数据与之前的并行框架之间的比较
基本计算机开始从序列执行框架开始,传统的CPUs基于SISD的,这意味着从理论上看一次只能运行一个操作。当计算需要世界化时,需要管理的数据增长得非常快。显然序列编程模型不能处理处理能力的增长需求。不同的努力被花费在寻找可供选择的方法去实现大数据量的计算但是只唯一的解决办法是开发一定程度的并行执行。这些努力的结果就是SIMD,一个变成框架允许应用简单指令到多种类型的数据实例。绝大部分时间,SIMD被用在SWAR(?)环境。通过使用更复杂的结构,一个还能具有MIMD并行化。
虽然那两种框架式有效的,真实世界实现是用来被为了同步问题和被限制的并行化的排列成行的问题的限制折磨。只有少部分SIMD处理器幸存作为独立操作的组件,大部分都被嵌入到标准的CPUs中。
思考一个简单的问题求2个包括100个4个元素的向量的总和。
传统的序列框架:
for(int i = 0; i < 100 * 4; i++)
result[i] = source0[i] + source1[i];
(这个程序是存在很多变种的,不过最后基本上实质都是这样)
并行SIMD框架,包装寄存器
for(int el = 0; el < 100; el++) // for each vector
vector_sum(result[el], source0[el], source1[el]);
并行流框架(SIMD/MIMD)
// This is a fictional language for demonstration purposes.
elements = array streamElement([number,number])[100]
kernel = instance streamKernel("@arg0[@iter]")
result = kernel.invoke(elements)