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
也許緩存足夠大,使內存訪問不相關。您沒有提供有關問題大小和緩存大小的任何信息。 – 2012-02-02 11:33:53
您是如何確定緩存區域不好?一個好的包應該優化緩存的使用。另外,你的數據是什麼樣的?如果它是非常結構化或重複的,實現可能會檢測到這一點,並進一步優化以減少內存訪問。 – Iterator 2012-02-03 05:15:29
我通過perf描述了執行統計信息。有大量的緩存未命中,而且這個程序的IPC很低。 – 2012-02-03 06:03:40