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

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 婺源县| 建湖县| 达日县| 齐齐哈尔市| 夹江县| 南乐县| 庆元县| 明星| 嘉峪关市| 沈丘县| 和林格尔县| 金川县| 牙克石市| 高州市| 永善县| 阜新市| 恩施市| 宁陕县| 台湾省| 稷山县| 汪清县| 禹州市| 利川市| 奉节县| 五指山市| 大英县| 崇阳县| 焦作市| 昌乐县| 象山县| 兴城市| 隆德县| 克什克腾旗| 肥乡县| 绵竹市| 专栏| 灵璧县| 宜兰县| 滁州市| 香河县| 阳谷县|