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 小高 閱讀(287) 評論(0)  編輯  收藏 所屬分類: C

          導航

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

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鸡西市| 西乌珠穆沁旗| 深水埗区| 增城市| 苍溪县| 松原市| 页游| 河南省| 临高县| 邯郸市| 正蓝旗| 长丰县| 濮阳县| 内江市| 高州市| 华蓥市| 桂林市| 台前县| 天台县| 乌拉特前旗| 上高县| 东山县| 安平县| 泸西县| 乐昌市| 九台市| 蒙自县| 高淳县| 雷波县| 富阳市| 榕江县| 玉环县| 合山市| 渭源县| 安图县| 临朐县| 故城县| 衢州市| 大余县| 南康市| 遵义市|