簡體   English   中英

如何測量 C/C++ 中的順序內存讀取速度

[英]How to measure sequential memory read speed in C/C++

該問題沒有考慮 CPU 緩存。 也就是說,讓緩存做它的工作(讓 cpu 緩存提高性能)。

我的想法是分配足夠大的內存塊(以便並非所有內存都適合緩存)並將它們視為一種數據類型(如int )並進行加法以避免編譯器完全優化掉讀取內存的代碼。 問題是數據類型會影響測量嗎? 或者有更通用的方法嗎?

編輯:之前可能有點誤導。 一個例子是 AIDA64 的內存和緩存基准測試,它能夠測量內存讀/寫速度以及延遲。 我想知道它是如何完成的。

像這樣的微基准測試在 C/C++ 中並不容易。 在 C++ 中花費的時間不是該語言的特定方面。 事實上,對於除了這個用例之外的每個用例,越快越好,因此鼓勵編譯器做一些聰明的事情。

這些的訣竅是編寫基准測試,編譯它,然后查看程序集,看看它是否在做聰明的把戲。 或者,至少,檢查以確保它有意義(訪問更多內存 = 更多時間)。

編譯器越來越聰明。 添加並不總是足夠的。 我不止一次讓 Visual Studio 意識到我正在做什么來構建微基准並將其全部編譯。

目前,我使用傳遞給 main 的argc參數作為種子,並使用像 SHA1 或 MD-5 這樣的加密哈希來填充數據,這讓我很幸運。 這往往足以誘使編譯器實際寫入所有讀取內容。 但是請驗證您的結果。 不能保證新編譯器不會變得更聰明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM