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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的设计模式相关文章