英特爾PMU可以用於測量每核心讀/寫內存帶寬使用情況嗎?這裏「存儲器」意味着DRAM(即,不擊中任何高速緩存級別)。英特爾性能監視器計數器可用於測量內存帶寬嗎?
回答
是的,這是可能的,但它不一定像編程通常的PMU計數器一樣簡單。
一種方法是使用通過PCI空間訪問的可編程內存控制器計數器。一個好的開始是通過檢查英特爾自己在pcm-memory
的執行pcm-memory.cpp。此應用程序向您顯示每個插槽或每個內存控制器的吞吐量,這適用於某些用途。特別是,所有內核之間共享帶寬,因此在一臺安靜的機器上,您可以假定大部分帶寬都與被測進程相關聯,或者如果您想在套接字級別進行監視,則它正是您想要的。
另一種選擇是使用「offcore repsonse」計數器的仔細編程。據我所知,這些涉及L2(最後的核心 - 私有緩存)和系統其餘部分之間的流量。您可以通過offcore響應的結果進行過濾,因此可以組合各種「L3未命中」事件並乘以高速緩存行大小以獲得讀取和寫入帶寬。這些事件是相當精細的,所以你可以進一步將它分解爲什麼導致訪問的第一個地方:指令提取,數據需求請求,預取等,等等。
offcore響應計數器通常滯後於支持工具如perf
和likwid
,但至少最近的版本似乎有合理的支持,即使像SKL這樣的客戶端部件。
我不確定英特爾PMU,但我認爲你可以使用英特爾VTune放大器(https://software.intel.com/en-us/intel-vtune-amplifier-xe)。這個有很多用於性能監視的工具(內存,cpu緩存,cpu)。也許這會爲你工作。
是(ish),間接。您可以使用計數器之間的關係(包括時間戳)推斷其他數字。例如,如果您採樣1秒的時間間隔,並且有N個最後一級(3)緩存未命中,則可以非常確信您每秒鐘佔用N * CacheLineSize字節。
它變得有點棘手把它與準確地計劃活動,因爲這些缺失可能反映CPU預取,中斷活動等
還有的「此CPU不計泥沼(MMX, SSE,AVX等),除非該配置位處於此狀態';從而滾動你自己的是繁瑣的....
- 1. 帶寬監視器
- 2. 英特爾至強處理器緩存事件的性能計數器
- 3. 性能監視器:ASP.NET v4.0的計數器不可用
- 4. 英特爾酷睿雙核上的硬件性能計數器
- 5. 英特爾性能基元只能在基於英特爾處理器的設備上工作嗎?
- 6. 性能監視計數器閾值
- 7. 使用性能計數器監視特定端口
- 8. 英特爾8080:內存偏移計算
- 9. Windows性能監視器中的性能計數器計時器值不準確
- 10. .NET性能計數器監視計算機的計算能力
- 11. 如何讀取特定內核(性能計數器)寄存器?
- 12. 英特爾編譯器值得嗎?
- 13. 英特爾8080模擬器測試儀
- 14. 初始化CPU上的性能計數器監視器控制寄存器
- 15. 捕獲所有Windows性能監視器計數器
- 16. 錯誤英特爾XDK寄存器
- 17. 與英特爾相比,排序向量對時GNU C++編譯器性能不佳英特爾
- 18. 用於Windows關閉矢量化的英特爾C++編譯器
- 19. Windows XP性能監視器應用程序(perfmon)中缺少處理器/內存計數器
- 20. 使用性能監視器的Microsoft Excel Interop內存泄漏測試
- 21. 監測Azure存儲帶寬使用
- 22. OpenCL:NVIDIA的矢量寄存器(float4,float8,..)VS英特爾的矢量寄存器
- 23. 許可英特爾Fortran編譯器
- 24. react-native性能監視器
- 25. ZK性能監視器
- 26. Ruby/Rspec性能監視器
- 27. Android內存監視器
- 28. eclipse mtj內存監視器
- 29. SignalR性能計數器不會顯示在性能監視器中
- 30. 應用程序和SQL Server中的性能計數器監視
VTune是一個使用硬件性能計數器(即PMU =性能監視單元)的工具。除非你能解釋*如何讓VTune測量內存帶寬,否則這不是一個有用的答案。 (VTune是一個有用的工具,可以幫助找到cache-miss熱點和類似的東西,顯然遠不止是簡單地記錄perf計數器,但這不是這個問題所要求的。) –