Intel的cache行大小是不是太小了,只能存八条指令
首先,x86不是定长。第二,一般程序指令缺失率比数据低太多后来因特尔针对指令专门开发了一个uop cache,号称80%命中率,每周期最多读出6条指令,同时搞定了命中率,功耗和性能...
■网友
1. 单从miss rate考虑,请看图:首先,Cache有3C\u0026#39;s. Compulsory miss, capacity miss和conflict miss.在Cache size一定的情况下,block size增大会使cache line的数量减少。因此这里存在一个compulsory miss和conflict miss的trade-off,这一点可以从图上很清楚地看到。一般L1 Icache和Dcache的大小都是16KB-64KB之间,所以不难看出选多大的Block size吧。哦什么?128 Bytes看着好?Partially correct。但注意纵坐标只是miss rate。Block size大,一次miss的penalty也大。如果miss rate相近,可能反而选block size小的占便宜。减少Compulsory miss可以通过instruction/data prefetch来做到。
【Intel的cache行大小是不是太小了,只能存八条指令】
2. 从带宽考虑:64 bytes=512 bits. 一般来说bus width以64-bit, 128-bit居多。 Intel很可能是64bit (Intel的我不太了解,欢迎指正)。因此一次cache fill需要multiple bus transfers. 如果Last Level Cache miss了需要访问内存,block size增大一倍也就意味着占用了比原来多一倍的带宽。如果这一个cache line的内容全部都是CPU需要的,那很好。但是很多情况下cpu只需要这一个cache line的某些word,因此这时候block size的增大意味着更多的带宽被浪费了。在Cache coherence maintainence时,cache line的内容有可能会在不同Core之间传输。所以也会有类似的考量。
■网友
12%....Intel芯片命中率也看应用代码吧,举个例子,在一个循环中,有int a ;int b ;int c ;且执行for ( int i=0; i<8; i++){a =b × c ;}假设就只有L1一级缓存,而且只有2个组,每组只有一个cache line, (卧槽这不就是直接映射嘛),cache line 如果长度是128 bits, 那第一次运算时,set0中会存b从0到3,根据因为地址连续,所以set1会存b 从4-7,
如上图所示
但是同样的,c 也是一样会被映射到和b相同位置就酱婶于是运算过程就好玩了:每次计算b × c 都会经过这几个步骤:取出b 放到一个寄存器,把b 放回主存,再从主存取出来 c 放到cache, 再放到寄存器,相加把结果给a 计算完一次循环,哦,你需要再把这个c放回主存,再把b拿出来,再把b放回去拿出c………这种感觉就是,你要从冰箱拿十个大象,我们的目的是,打开门,直接拿出来十只,关上门,但是,由于算法和硬件不匹配,就变成了打开门,拿出一个,关上门,来回十次。这跟冰箱多大仇。所以,命中率的决定因素太多,跟算法和优化关系太大,而且除了片内的L1,这块只是单核私有缓存,还有L2和L3啊,考虑到这些,最大的问题还是消费电力问题。如果片内缓存过大,会导致很大的电力消费,这不只是电费的问题,芯片过热,散热压力会很大的,毕竟cache是芯片最大的热源。而且,多核共享cache的 data coherence的协议也要考虑,如果每组的cacheline加大,每次同步时传输数据也会大,时间也需要考虑吧。嘛,总之这里因素实在太多,命中率早就不是主要考虑因素了。最大的问题还是芯片发热和数据一致性协议。
■网友
记得有个统计 BB的平均大小是7条指令
推荐阅读
- 警惕!它脱落砸死路过男子!鸡蛋大小就可致死!谁担责?有先例!
- 婴儿|仅成年人手掌大小,如今怎样了湖南“巴掌姑娘”出生时680克
- windows 7怎样使文件系统区分大小写
- tcp通讯时,发送30多个1024的包到客户端,中间有包的大小不对,为啥
- 收费站闯卡逃费还撞伤了人,一枚硬币大小碎片锁定逃逸车
- 【百度又摊上事了】优化产品的一个小事,何以惹得诸多大小公司的大神群殴百度,还展开了骂战,你们咋看
- 玩游戏是amd的显卡好还是intel的显卡好
- Intel 寄存器命名规则是啥
- 办公室在一楼,地下室是服务器机房,大小有个几百平米请问辐射大吗
- 视频编码所支持的视频尺寸大小是固定的吗
