2009-12-15 45 views
0

當我用兩個不同的部件運行一個程序時,我試圖獲取頁面錯誤。如何使用getrusage閱讀C中的頁面錯誤?

我所做的是使用兩種矩陣乘法方法的一些操作,並試圖找出導致更多頁面錯誤的操作。

/Operations for method 1 

getrusage (RUSAGE_SELF, &usage); 
fault1=usage.ru_minflt; 

/operations for Method 2 


getrusage (RUSAGE_SELF, &usage); 
fault2=usage.ru_minflt-fault1; 

但似乎fault2 = 0,我不認爲是正確的。如果我使用兩個不同的變量usage和usage2,似乎也不工作。 是否有任何命令開始計算每個乘法方法的故障? 我的代碼有問題嗎?

感謝您的答案

回答

0

這是完全有可能的頁面錯誤數爲爲零。它的作用更多的是你加載數據的方式,你正在使用的共享庫(以及它們是否已經在內存中),寫入時複製的用法以及類似於你的算法。

你確定你不是在尋找處理器緩存未命中的數量嗎?對於大矩陣的矩陣乘法,樸素算法可能比最優算法具有更差的緩存使用情況。嘗試使用valgrindcachegrind工具。

+0

感謝您的評論,我該如何檢查緩存故障呢? – Peter 2009-12-15 22:31:49

+0

在'cachegrind'下運行它(緩存命中和未命中發生在硬件深處,低於操作系統級別,因此操作系統不會跟蹤它們)。 – caf 2009-12-15 23:14:08