出版信息:
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)
2011-05-16,22:59:14
原文链接:https://www.f2er.com/javaschema/287251.html