2012-02-02 176 views
1

我正在檢查來自JGF基準測試的java版本稀疏矩陣乘法程序。我在多種CPU頻率下運行這個程序。我也爲這個程序做了一些簡介。我將它歸類爲一個內存密集型程序,因爲緩存局部性很差,並且訪問量很大。這種程序以較慢的頻率運行的執行時間應該比較快的頻率略微下降,因爲它會浪費CPU的閒置時間。但是在我的實驗中,這個程序的執行時間與CPU頻率成正比。爲什麼是原因?稀疏矩陣乘法執行時間

矩陣(數組)的維數是500000,這個程序在i7-920中運行,它有三層緩存。 有32KB L1數據2KB,每核L1指令,L2每核256KB和L3 8MB共享高速緩存。

我也得到了由PERF執行統計:對「java命令

性能計數器的統計數據。 JGFSparseMatmultBenchSizeC':

83925.084119 task-clock-msecs   #  1.001 CPUs 
     2,045 context-switches   #  0.000 M/sec 
      28 CPU-migrations   #  0.000 M/sec 
     29,687 page-faults    #  0.000 M/sec 
223,130,573,396 cycles     # 2658.688 M/sec (scaled from 66.68%) 
66,679,432,987 instructions    #  0.299 IPC (scaled from 83.33%) 
12,779,607,690 branches     # 152.274 M/sec (scaled from 83.32%) 
    11,389,605 branch-misses   #  0.089 %  (scaled from 83.32%) 
11,056,332,293 cache-references   # 131.740 M/sec (scaled from 83.34%) 
3,847,329,243 cache-misses    #  45.842 M/sec (scaled from 83.35%) 

    83.816412311 seconds time elapsed 
+0

也許緩存足夠大,使內存訪問不相關。您沒有提供有關問題大小和緩存大小的任何信息。 – 2012-02-02 11:33:53

+0

您是如何確定緩存區域不好?一個好的包應該優化緩存的使用。另外,你的數據是什麼樣的?如果它是非常結構化或重複的,實現可能會檢測到這一點,並進一步優化以減少內存訪問。 – Iterator 2012-02-03 05:15:29

+0

我通過perf描述了執行統計信息。有大量的緩存未命中,而且這個程序的IPC很低。 – 2012-02-03 06:03:40

回答

0

Integer對象表示接近0值可以由JVM緩存以節省內存 - 也許可能在其中發揮一定的作用。