C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) Linux 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) GCC 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) STL only 问题(Question): Stackoverflow 详细内容: https://stackoverflow.com/questions/57343855/program-to-measure-cache-size-please-explain-results/57344177#57344177 我写了一个简单的程式来量测Cache Line Size 就是每次跳一个step (offset)去存取array, 透过加大offset来观察执行时间 预计当offset超过cache line size时 会导致每次都要从下层(L2)抓一条新的cache line Code: void access_array(char* arr, int steps) { const int loop_cnt = 1024 * 1024 * 32; // arbitary loop count int idx = 0; for (int i = 0; i < loop_cnt; i++) { arr[idx] += 10; idx = (idx + steps) & (ARRAY_SIZE - 1); } } Result: step , time(us) 1 , 29929 2 , 30003 4 , 30410 8 , 30046 16 , 31987 32 , 36796 64 , 72008 128 , 72300 256 , 71439 512 , 71460 1024 , 126504 2048 , 156086 4096 , 212619 8192 , 188025 16384 , 155549 32768 , 46295 在64的时候执行时间增加两倍, 因为我的cache line size = 64, 符合预期 我的问题是: 为什麽从64到512时间几乎都没有改变, 而从1K开始到4K又递增上去? Array size是256KB, 我试过128KB / 64 / 32 都是一样结果 Stackoverflow上面的回应是觉得跟prefetch / TLB miss有关, 我觉得解释听起来还算合理但是好像没有办法证明 我试着查过不少资料, 大多数是讲理论没有讲到太详细spec 所以想请各位帮忙解惑... 感谢 CPU: Intel Xeon(R) CPU E5-2667 0 @ 2.90GHz Cache size: LEVEL1_ICACHE_SIZE 32768 LEVEL1_ICACHE_ASSOC 8 LEVEL1_ICACHE_LINESIZE 64 LEVEL1_DCACHE_SIZE 32768 LEVEL1_DCACHE_ASSOC 8 LEVEL1_DCACHE_LINESIZE 64 LEVEL2_CACHE_SIZE 262144 LEVEL2_CACHE_ASSOC 8 LEVEL2_CACHE_LINESIZE 64 LEVEL3_CACHE_SIZE 15728640 LEVEL3_CACHE_ASSOC 20 LEVEL3_CACHE_LINESIZE 64 LEVEL4_CACHE_SIZE 0 LEVEL4_CACHE_ASSOC 0 LEVEL4_CACHE_LINESIZE 0 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.229.42.20 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1565324968.A.C35.html
1F:推 wa120: 32768bytes/1024刚好32KB,for loop的loop_cnt用const,他会 08/09 23:58
2F:→ wa120: 自动unrolling排vector register,因为vector register用满 08/09 23:58
3F:→ wa120: 了,所以在固定倍数上产生两倍的load/store 08/09 23:58
4F:→ wa120: register说错 不好意思 用的是general register排满 08/10 00:07
5F:推 eye5002003: 从32768开始,花费的时间反而变少了,确实值得研究 08/10 14:57
6F:推 johnjohnlin: Benchmarking GPUs to Tune Dense Linear Algebra 08/10 21:45
7F:→ johnjohnlin: ↑这篇论文有说明,主要原因是 cache assoc 08/10 21:46
8F:→ johnjohnlin: google 可以找这篇有公开 08/10 21:46







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP