Is Parallel Programming Hard - Append C - 读书笔记

书名很长,《Is Parallel Programming Hard, And, If So, What Can You Do About It? 》。中文翻译很短,《深入理解并行编程》,可以中文之博大精深。其中附录C很有意思,值得细读。

附录C从 CPU cache 角度入手,探讨了内存屏障的深层原理。本章先介绍了 CPU 的缓存结构,CPU 将计算所需数据放在 cache 中,对于同一份数据,不同 CPU 的 cache 和内存可能会存有不同的值(新值和旧值),因此如何使它们达成一致性是个很关键的问题。接着说明了 CPU 之间以及 CPU 和内存之间的一致性协议,MESI 协议。搞清了 CPU 之间以及 CPU 和内存之间是如何通信后,作者表明 Invalidate 消息及其响应是通信的瓶颈,因此引入 store buffer 和 invalidate queue 分别从发送端和接收端的角度降低 Invalidate 消息的通信成本。而对于 store buffer 和 invalidate queue 导致的内存乱序问题,则使用读写内存屏障去解决。

cache structure

首先来看看 cache,下图是 CPU cache 的经典示意图。
cpu cache
cache 本质上是一个哈希表,映射到内存地址。一个 cache 可以分为很多个 set ,可以将 set 看成是哈希表的一个桶。这个哈希过程通过取内存地址的若干位作为元素位置,称之为 hardware hash。我们知道哈希表可以通过比如链式指针的方式,将多个哈希值相同的元素放在一个桶里,对应到 cache 结构里,一个 set 可以由多个 way 组成。例如下图就是一个 two-way set-associative cache 。
2-way set-associative cache
上图最小的一个存储单元称之为 cacheline 。cacheline 是内存与 cache 数据交换的最小单位。

本章关于 cache

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值