把两个核的数据错开
把第二个核的数据从地址 1 挪到地址 4,验证搬运次数真的降了,并给出降了几倍。
伪共享「伪」在哪
伪共享之所以叫「伪」,是因为【0】。
怎么消掉伪共享
消除伪共享最直接的办法是【0】。
两个计数器挤在一起
运行下面这段程序,填写它打印出来的结果。 BLK = 4 def traffic(seq): owner = {} moves = 0 for core, addr in seq: b = addr
垫开之后
运行下面这段程序,填写它打印出来的结果。 BLK = 4 def traffic(seq): owner = {} moves = 0 for core, addr in seq: b = addr
自己写:构造一次伪共享
两个核各更新五次自己的计数器,两个计数器挤在同一块。数出访问次数和搬运次数。
给它加上填充
把第二个计数器挪到下一块(加填充),量出改进前后的搬运次数和倍数。
几个核一起抢会怎样
把核数从 2 个加到 4 个,都挤在同一块上。数出 2 核和 4 核各搬了多少趟。
⚠️ 看代码完全看不出来
两段代码逻辑完全一样(都是两个核各加五次),只有变量摆放的位置不同。把两段的「加了几次 / 搬了几趟」都打出来。
优化命中率的第一步
要提高一段程序的命中率,第一步应该【0】。