Chinaunix
标题:
测试cpu的cacheline大小对于数组操作性能影响,不符合预期
[打印本页]
作者:
cdsfiui
时间:
2017-04-22 20:18
标题:
测试cpu的cacheline大小对于数组操作性能影响,不符合预期
本帖最后由 cdsfiui 于 2017-04-23 10:48 编辑
书上说x86的缓存行默认是64字节,所以我有下面的测试代码:
#include<sys/time.h>
#include<stdlib.h>
#include<stdio.h>
size_t cacheline=16;
int main(int argc,char*argv[]){
size_t loopCount=2000000000;
if(argc==2){loopCount=atol(argv[1]);}
printf("loop=%ld\n",loopCount);
int array[cacheline];
for(size_t a=0;a<cacheline;++a){
array[a]=a;
}
size_t c=0;
long sum=1;
for(size_t i=0;i<loopCount;++i){
if(c==cacheline)c=0;
sum+=array[c++];//array应该始终
}
printf("sum=%ld\n",sum);
return 0;
}
复制代码
我期待的是,cacheline小于等于64的时候,int array这个数组会在操作的时候,全部缓存在同一个cacheline里面,性能没有变化。
而当大于64的时候,会有一次大幅度的降低。
但是我用了clang和gcc编译,结果发现不论是16,还是64,还是256,还是65536,结果都一样。无法理解。
clang++ test07_cacheline.cpp -O2 -o test07_cacheline && time ./test07_cacheline 2000000000
复制代码
为什么cacheline这个参数的设定,对于性能的影响在我的程序里面没有体现出来? 求解释。
当cacheline=65536的时候,这个应该包含了很多个缓存行了吧,应该有很多cache invalidate发生? 但是我的测试结果还是没变啊
作者:
cdsfiui
时间:
2017-04-23 10:48
自己顶一下
作者:
学到老lll
时间:
2017-06-30 10:58
帮你顶一下
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2