A Practical Approach to Exploiting Coarse-Grained Pipeline Parallelism in C Program

出版信息:

Conference: 40th IEEE/ACM International Symposium on Microarchitecture

Author: William Thies, Vikram Chandrasekhar, Saman Amarasinghe

Year: 2007

p.p.: 356 ~ 368

 


内容总结:

文章寻求一种将老旧的C程序并行化的办法。文章的办法是让程序员在程序中加入提示符,而提示符是以宏的形式定义的,用途是把一个循环内的工作分阶段地并行化。

当任务分好阶段后,就通过不同的读写通道,将任务分发到不同的管道去做,然后再把结果回收。具体细节暂时还没有看懂。

实验的对象是流文件,比如MP3、MPEG2

 

贡献:

1. 展示了在流应用(Stream Application)的类中,用流水化做并行是很稳定的。在执行时的通信在程序的执行过程中通常会得到保持。

2. 定义了简单的API,用于指出程序中潜在的可流水线并行化的区域。这种API与传统的OpenMP相比,充当了流水线式并行化的基础抽象作用。

3. 提供了一个在Valgrind上实现的程序动态分析工具,这个工具用于在老旧C程序中跟踪消费者/生产者的关系。它还可以输出应用程序的流图(Stream Graph),可用于验证和驳倒程序员用上面所说的API所提议的并行处理方案。最后,他还可以提供语句级的详细跟踪,以及一套宏,用于自动化的并行化。

4. 将上面的成果应用到不同的流应用(如MP3解码)以及3个SPEC的benchmarks,能提取出有意义的流图,加速比在4核处理器上达到2.78。

 

感想:

这篇文章提供的方法与工具,可以让程序或者算法的原作者通过少量的提示符对程序进行并行化,而工具的提供者不需要深入到算法内部,在理解算法后再把程序重新改写。可以说,它达到了半自动化的目标。

可是文章提供的内容仅在一个多核处理器上测试,即在共享存储地址的机制下测试,这对于机器集群以及超级计算机这种存储地址分开、通过网络连接的体系架构,显然是需要改进的。

但是我们现在的知识储备并不足以完全读懂这篇文章,所以即使这是一个好的方案,也需要继续去学习,才能获得其中的真秘。

 

需要补习的内容:

1. 编译原理

2. 程序静态分析、动态分析

3. 并行编程模式(至少要知道什么是流水线模式pipeline pattern)

4. 这个领域相关的文章,以及文章之间的异同点

 

2011-05-16,22:59:14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值