2016-11-14 35 views
0

是否可以查詢每個內核的執行單元/端口數量以及英特爾CPU上的類似信息?查詢執行單元,端口等的Intel CPU詳細信息

我有一個彙編程序,並注意到性能上的不同CPU的完全不同。例如,在Core i5 4570上,某些功能需要比Core i7 4970HQ持續25%的週期才能完成。它們都是同一代Haswell的。基準程序中沒有記憶運動。所以我想也許差異來自執行單元數量,端口數量等細節。基準測量單核CPU週期,所以頻率/ HT等不起作用。

我有權對這種性能差異進行解釋嗎?如果是,我可以在哪裏找到特定CPU的信息。有沒有可能動態查詢它?如果可能的話,那麼我可以根據這些信息動態派發更加均勻和類似的技術來優化多CPU的程序。

+0

你爲什麼不提供一個鏈接到你的基準,或張貼完整的代碼,所以我們可以嘗試我們自己?否則,我們只是在黑暗中刺傷。 – BeeOnRope

回答

2

你有沒有時間參考週期(RDTSC),而不是內核時鐘週期(以PERF櫃)?這將解釋你的觀察。

渦輪產生很大的差別,和最大渦輪和最大持續/額定時鐘速度(即基準週期節拍率)之間的比例是在不同的CPU不同。例如see my answer on this related question

CPU的TDP越低,比越大持續峯值之間。該Haswell wikipedia article有表:

  • 84W桌面i5 4570:持續了3.2GHz = RDTSC頻率,最大渦輪3.6GHz的(核心可能是實際運行的大多數基準測試的速度,如果有時間從上低功率怠速)。

  • 47W膝上型i7-4960HQ:2.6GHz的持續= RDTSC頻率對3.8GHz的最大渦輪。

使用性能計數器計時您的代碼,並查看「核心時鐘週期」計數。 (還有很多其他的東西)。


每Haswell的核心是從相同核心-M 5WATT CPU來大功率四核〜18核Xeon(實際上具有每個內核功率預算更象一臺筆記本電腦CPU);只有L3高速緩存,內核數量(和互連)以及HT和/或Turbo的支持與否有所不同。基本上,內核之外的所有內容都可以不同,包括GPU。 它們不會禁用執行端口,甚至L1/L2緩存都是相同的。我認爲禁用執行端口將需要在無序調度程序中進行重大設計以及類似的東西。

更重要的是,每個端口至少有一個執行單元在任何其他端口都沒有找到:p0具有分隔符,p1具有整數乘法單元,p5具有shuffle單元,p6是唯一的端口,可以執行預測分支。實際上,P2和P3是相同的裝載口(可處理商店地址的uop)...

所有關於Haswell的內部參見Agner Fog's microarch pdf,並且還David Kanter's writeup與不同的塊的圖。

(然而,這並不完全正確,整個核心是相同的:Haswell的奔騰/賽揚CPU不支持AVX/AVX2,或BMI/BMI2。我認爲他們通過禁用解碼器中的VEX前綴解碼來實現這一點。 Skylake Pentium/Celerons仍然是這種情況,所以謝謝英特爾延遲我們可以支持新指令集的時間。據推測,他們這樣做是爲了讓處於缺陷狀態的處理器只有上半部或下半部的矢量執行單元仍然可以作爲Celeron或奔騰處理器出售,就像其中某些L3缺陷的CPU可以作爲i5而不是i7一樣銷售)

+0

感謝您的詳細解答。它應該是4960HQ,這是一個錯字。這是CPUID所需的型號。我用RDTSC計時。更準確地說,一個條目,循環數以CPUID作爲屏障讀取,然後是RDTSC。在退出時,用RDTSCP讀取計數,然後用CPUID作爲屏障。 –

+1

@YanZhou:'rdtsc'沒有在幾代CPU的週期內進行測量 –

+0

經過一番試驗,我認爲最簡單的方法是在優化代碼時簡單地禁用CPU的turbo boost和其他非確定性行爲,當我需要精確的週期數。我嘗試了PMC和類似的方法,但有時候他們只是沒有得到可靠的結果。另外,我沒有找到沒有特權的計數器。 –