JUST DO IT ~

          我只想當個程序員

          cache 實驗1

          測試代碼的locality。
          數組的讀區方式不同,按照行讀,被cache也是按行連續加載的。
          如果按照列讀區,那么效率很低,除非cache足夠大,而且也要遍歷所有的數據,并且cache hash算法也好,實現的硬件還是多路組相聯的cache硬件實現。

          ** valgrind --tool=cachegrind ./test2**

          code1:

          #include <stdio.h>
          #define MAXROW 8000
          #define MAXCOL 8000
          int main () {
          int i,j;
           static int x[MAXROW][MAXCOL];
           printf ("Starting!\n");
                 for (i=0;i<MAXROW;i++)
                 for (j=0;j<MAXCOL;j++)
                        x[i][j] = i*j;
                       printf("Completed!\n");
          return 0;                                                    
           }
          

          code2:

          #include <stdio.h>                                                         
           #define MAXROW 8000
           #define MAXCOL 8000
           int main () {
           int i,j;
           static int x[MAXROW][MAXCOL];
           printf ("Starting!\n");
                    for (j=0;j<MAXCOL;j++)
                                   for (i=0;i<MAXROW;i++)
                           x[i][j] = i*j;
           printf("Completed!\n");
           return 0;
           }
           ```
          
          ##結果
          
          

          Command: ./test1
          Starting!
          Completed!

          I refs: 905,721,688
          I1 misses: 4,177
          LLi misses: 2,808
          I1 miss rate: 0.00%
          LLi miss rate: 0.00%

          D refs: 514,830,867 (386,118,735 rd + 128,712,132 wr)
          D1 misses: 4,025,828 ( 23,565 rd + 4,002,263 wr)
          LLd misses: 4,008,456 ( 6,997 rd + 4,001,459 wr)

          D1 miss rate: 0.8% ( 0.0% + 3.1% )
          LLd miss rate: 0.8% ( 0.0% + 3.1% )

          LL refs: 4,030,005 ( 27,742 rd + 4,002,263 wr)
          LL misses: 4,011,264 ( 9,805 rd + 4,001,459 wr)
          LL miss rate: 0.3% ( 0.0% + 3.1% )

          gcc -o test2 test2.c
          ** valgrind --tool=cachegrind ./test2**

          I refs: 905,720,801
          I1 misses: 4,113
          LLi misses: 2,811
          I1 miss rate: 0.00%
          LLi miss rate: 0.00%

          D refs: 514,830,348 (386,118,427 rd + 128,711,921 wr)
          D1 misses: 64,025,705 ( 23,462 rd + 64,002,243 wr)
          LLd misses: 4,016,427 ( 6,977 rd + 4,009,450 wr)
          D1 miss rate: 12.4% ( 0.0% + 49.7% )
          LLd miss rate: 0.8% ( 0.0% + 3.1% )

          LL refs: 64,029,818 ( 27,575 rd + 64,002,243 wr)
          LL misses: 4,019,238 ( 9,788 rd + 4,009,450 wr)
          LL miss rate: 0.3% ( 0.0% + 3.1% )

          Starting!
          Completed!
          ```

          參考:

          valgrind調試CPU緩存命中率和內存泄漏
          http://laoxu.blog.51cto.com/4120547/1395236

          posted on 2015-11-15 22:20 小高 閱讀(279) 評論(0)  編輯  收藏 所屬分類: C

          導航

          <2015年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 天台县| 屯昌县| 临朐县| 霸州市| 安徽省| 朝阳县| 遵义市| 杨浦区| 辽宁省| 惠来县| 杂多县| 曲水县| 葫芦岛市| 宜黄县| 克山县| 铁岭市| 张家港市| 揭阳市| 柘荣县| 五台县| 于田县| 静安区| 富锦市| 沙坪坝区| 甘德县| 华亭县| 城步| 弥勒县| 垫江县| 博客| 郸城县| 哈尔滨市| 汉沽区| 新田县| 桦川县| 德江县| 凤翔县| 桦甸市| 柳江县| 惠来县| 桐梓县|