看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) windows 問題(Question): 前陣子工作是先要測 H.D.D. 在大檔的讀寫速度,(先行的效能瓶頸測試與改善) 我的做法是去 malloc 一大塊記憶體,填值進去, 再以 fwrite / fread 做計時,去算硬碟讀寫速度, "平均下來" 其實和現有的 benchmark 測出來差不多, 只是不知道是不是因為磁頭硬碟需要 seek time 的關係, 所以測出來的標準差還蠻大的 ( 結果還蠻飄的,最極端的例子是第一、二次測的時候是 10MB/s , 接下來七、八次測的時候是 1xx MB/s ) , 請問這屬正常情況?如果到時要實際應用的話,我可以先故意對 H.D 先寫一 個大檔做預熱? ---- 後來再看其他的 benchmark,還會測 L1, L2, L3 cache latency , 這點其實我很納悶,一開始初步的想法是, for(int i = 0 ; i < ARY_SIZE ; ++i) sum = sum + s[i]; 對上述敘述做計時 ,不知道這種設計方式是否可行? 不過最讓我納悶的是,benchmark 測出的 cache latency 精度可以達到 xx ns , 這點讓我存疑到底準不準,因目前眾所皆知, windows 計時器準度/穩定度有點 待議,目前 wins 最推的大概是 QueryPerformanceCounter , 我覺得要到 ns 有 點勉強," 在想 " 用 rdtsc 加上 SetThreadAffinityMask 不知道辦不辦得到? 另就算辦到了,不知 L1 cache latency / L2 cache latency / L3 cache latency 是怎分開測? source code 架構是否會不同? --- 綜合問題 --- 1. fwrite / fread 做為 硬碟讀寫速度測試 是否可行 2. cache latency 該如何測試 3. 如何設計測試 L1, L2, L3 cache latency 4. 高精度計時器能否使用 rdtsc + SetThreadAffinityMask 方式達成? 補一下,如果知道一些 benchmark 的 coding 技巧、概念,歡迎分享, 我會非常感激。 謝謝各位不吝指教 感激不盡。 -- 就算把新鮮的肝拿回去,還是一樣寫碼到禿頭,加班到天亮, 永遠當老闆的傀儡 你是不是想這麼做? 是的話你就拿回去~ 拿啊!! 九世宅男 : 下輩子不要再讓我幹工程師了 ~ < Kuso 星爺語錄 > -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.74.188 ※ 編輯: EdisonX 來自: 180.177.74.188 (11/09 18:14)
cobrasgo:cpu種類?不同的cpu技術不一樣,kernel支援的程度也不一 11/09 20:01
cobrasgo:樣。要不要列出你的cpu和kernel版本? 11/09 20:01
EdisonX:疑!進一步請教一下,若不同cpu技術不同的話,意指市面上的 11/09 20:05
EdisonX:benchmark也會有這問題? 因到時產品會連整個主機一起販售, 11/09 20:07
EdisonX:故我沒拿到主機, 要討論的話可暫以 i7-4770k 討論 11/09 20:08
cobrasgo:有些cpu不同core的L2 chache根本沒共用啊 11/09 20:09
cobrasgo:有共用和沒共用,測出來的結果肯定不一樣吧 11/09 20:10
cobrasgo:簡單的說在multi-core的狀況下,很多問題變的很複雜 11/09 20:10
EdisonX:原來如此,我以為和測 HDD 的方式一樣就過了 Orz 11/09 20:13
cobrasgo:基本上測HDD我們只是看到結果,其實這中間從上到下牽扯到 11/09 20:15
cobrasgo:OS層的disk cache實作方式,往下是OS對不同multi-core的 11/09 20:15
cobrasgo:支援程度,最後才是HDD讀寫速度 11/09 20:16
EdisonX:難怪,這樣看下來要測 cache 會複雜很多了..謝謝。 11/09 20:17
cobrasgo:如果你要比的話,os版本和cpu的版本固定可以拿來測 11/09 20:19
cobrasgo:但是不同os/cpu測出來的數據就不可以拿來比了,除非你很 11/09 20:20
cobrasgo:確定中間發生了什麼事 11/09 20:20