缓存用于并行编程的遗忘算法?

时间:2011-05-08 11:09:57

标签: algorithm concurrency cache-oblivious

我已经阅读了很多关于缓存遗忘算法和流树等的内容。我理解我仍然无法看到的基础知识是什么它们对并行编程有好处?我想我看到John Harrop说他们是革命性的。

3 个答案:

答案 0 :(得分:8)

在文章中 http://www.1024cores.net/home/parallel-computing/cache-oblivious-algorithms

他们指出

  

缓存遗忘算法背后的想法是有效使用处理器缓存并降低内存带宽要求。这两者对于单线程算法同样重要,但对于并行算法尤为重要,因为可用内存带宽通常在硬件线程之间共享,并且经常成为可伸缩性的瓶颈。

对内存的访问可能是并行算法的瓶颈,因此使用尝试利用缓存内存的算法会更有效。

在同一篇文章中,他们继续描述缓存遗忘算法如何利用可用的缓存:

  

缓存遗忘算法通过递归地将问题数据集划分为更小的部分,然后对每个部分进行尽可能多的计算来工作。最终子问题数据集适合缓存,我们可以在其上进行大量计算而无需访问内存

答案 1 :(得分:5)

我只想指出,您的问题在多核架构中尤为重要,因为多核处理器在多个核心之间拥有自己的私有缓存和共享缓存。为了实现高效率和可伸缩性,并行算法必须在数据缓存中展示出良好的spatial locality and temporal locality

Harald Prokop's master thesis之前,算法和数据结构是以缓存感知(缓存意识)的方式设计的,以减少缓存未命中率,例如,B-tree是一个众所周知的缓存示例 - 通过使用CPU高速缓存大小来调整参数B的感知数据结构。在缓存遗忘模型中,由于算法的递归性质,子问题最终适合缓存并且操纵这些子问题会导致少量缓存未命中。

缓存遗忘算法的一些不错的属性独立于CPU缓存大小,在任何内存层次结构上运行良好,并且证明在缓存复杂性方面是最佳的。随着多核并行性的兴起,缓存无关的算法可能在导出高性能并行程序中发挥重要作用。我还在下面的文章http://blogs.msdn.com/b/devdev/archive/2007/06/12/cache-oblivious-data-structures.aspx中看到了关于递归数据结构和缓存遗忘算法的一些有趣的讨论。

答案 2 :(得分:4)

多核处理器每个核心的缓存更少。专用单核处理器中的缓存占用了硅片上的大量空间。你可以通过谷歌图像搜索自己看看;你会发现缓存大小很大,例如http://www.bit-tech.net/hardware/memory/2007/11/15/the_secrets_of_pc_memory_part_1/2

因此,如果你有20个内核,并且它们每个都有1/20普通处理器的缓存,那么你最好希望你的算法在没有巨型缓存的情况下表现良好。 =)