首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

smp停cpu cache并行测试

2013-10-24 
smp下cpu cache并行测试int main(){? ? ? ? int steps 256 * 1024 * 1024? ? ? ? int a[] {0,0}? ?

smp下cpu cache并行测试

int main()

{

? ? ? ? int steps = 256 * 1024 * 1024;

? ? ? ? int a[] = {0,0};

? ? ? ? int i ;

? ? ? ? struct timeval start ;

? ? ? ? struct timeval end ;

? ? ? ? unsigned long diff ;

? ? ? ? gettimeofday(&start, NULL);

? ? ? ? for (i=0; i<steps; i++) { a[0]++; a[0]++; }

? ? ? ? gettimeofday(&end, NULL);

? ? ? ? diff = 1000000 * (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec);

? ? ? ? printf("diff----%ld\n",diff);

?

? ? ? ? mb(); ? ?------加和不加,对输出的数字有较大影响

?

? ? ? ? gettimeofday(&start, NULL);

? ? ? ? for (i=0; i<steps; i++) { a[0]++; a[0]++; } ? -----先用a[0],后面用a[1]作不同实验

? ? ? ? gettimeofday(&end, NULL);

? ? ? ? diff = 1000000 * (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec);

? ? ? ? printf("diff2----%ld\n",diff);

}

加mb()

diff----3919898

diff2----6281302

去掉mb()

diff----4068821

diff2----3803478

疑问:为什么加mb()之后,执行时间要多花这么多

?

改为a[1],加mb()

diff----3815021

diff2----3473165

不加mb()

diff----3815935

diff2----3463169

考虑到误差,这两者基本一样

疑问:为什么分开两个程序,和一个程序内执行时间差别这么大。

有空看看两者产生的汇编语言,看看有什么不同之处。

并行编程真是个神奇的怪物,还有待深入。

?

? ? ? ?这两天稍微有点空,看了一下汇编,在上面的mb()之前产生的汇编和mb()之后产生的汇编不一样,估计就是传说中的乱序优化,在第一个gettimeofday(&start,NULL)之前加上mb(),其结果就比较正常了,a[0]++,a[0]++比a[0]++,a[1]++慢将近一倍

diff----6159865

diff2----3427905

? ? ? ?但不加mb(),a[1]++这个速度相比下不明显,不知何故?

? ? ? ?直接用 gcc -O2 -o test test.c,之后执行便变成了

diff----0

diff2----0

热点排行