Benchmark的定義
Benchmark(computing)的維基百科簡介如下所示。
In computing, a benchmark is the act of running a computer program, a set of programs, or other operations, in order to assess the relative performance of an object, normally by running a number of standard tests and trials against it. The term benchmark is also commonly utilized for the purposes of elaborately designed benchmarking programs themselves.
在計算機技術中,基準測試(Benchmark)是運作一個計算機程式,或一組程式,以及其他操作的行為,目的是評估一個對象的相對性能,通常通過對該對象運作一系列标準測試和試驗。術語基準也通常用于精心設計的基準程式本身。
Benchmark在商業詞典(BusinessDictionary)的解釋如下所示。
Standard, or a set of standards, used as a point of reference for evaluating performance or level of quality. Benchmarks may be drawn from a firm's own experience, from the experience of other firms in the industry, or from legal requirements such as environmental regulations.
标準,或一組标準,作為評價性能或品質水準的參考點。基準可以從公司自身的經驗、行業内其他公司的經驗或環境法規等法律要求中确定。
這裡提到的一點,可以參考一下,即“基準可以從公司自身的經驗、行業内其他公司的經驗或環境法規等法律要求中确認”。
如果僅僅将Benchmark作為基準測試,不足以展現Benchmark的重要性,如果轉換一下思路,将Benchmark作為工作目标的一部分,則會讓我們的工作目标更清晰,例如不同版本的設計,第二版是否比第一版有進步?有多少進步?就可以有一個相對量化的标準。Benchmark的作用,可以類别“摩爾定律”在半導體産業中的指導性作用。
目前常用的Benchmark 簡介
通用處理器CPU的Benchmark
Dhrystone
Dhrystone 的目标和性能機關
Dhrystone是測量處理器運算能力的最常見基準程式之一,常用于測量處理器整型運算的性能。
Dhrystone可能比MIPS(每秒百萬指令)更有意義,因為不同指令集之間的指令計數比較(例如RISC和CISC)會混淆簡單的比較。例如,相同的進階任務可能需要RISC機器上更多的指令,但是執行速度可能比一條CISC指令更快。是以,Dhrystone的得分隻計算每秒程式疊代完成的次數,允許機器以其特定的方式運作。
另一種基于Dhrystone Benchmark的性能機關是DMIPS(Dhrystone MIPS)。為定義該性能機關,業界選擇VAX 11/780作為一台基準機型,在該機型上,一秒鐘可以執行1757次Dhrystone程式,而該機型上的1757次Dhrystone程式約為一百萬條指令。DMIPS即基于Dhrystone程式,1秒鐘内,能執行多少“一百萬條指令(1757次Dhrystone)”。是以,DMIPS的計算公式如下所示。
DMIPS = 每秒鐘Dhrystone疊代完成的次數/1757
Dhrystone 的缺陷
Dhrystone缺陷包括以下幾點:
1.它的代碼與具有代表性的實際程式代碼并不相同;
2.Dhrystone容易受到編譯器優化的影響,廠商可以對Dhrystone做針對性的優化,影響其可信度;
3.Dhrystone代碼量過小,在現代CPU中,它能夠被放進指令緩存中,是以它并不能嚴格的測量取指性能。
由于以上缺點,Dhrystone飽受争議。但是,由于Dhrystone在Coremark出現前,一直是唯一公開、一緻地提供所有CPU性能的标準,是以依然在被廣泛的應用。
擷取Dhrystone 的版本
Github上,可以下載下傳Dhrystone各個版本的源碼,連結如下所示。
https://github.com/Keith-S-Thompson/dhrystone

Coremark
EEMBC
EEMBC(Embedded Microprocessor Benchmark Consortium,嵌入式微處理器基準評測協會) 是一個緻力于幫助設計人員快速有效地選擇處理器的非盈利組織,由會員和授權費資助。EEMBC為自動駕駛、移動成像、物聯網、移動裝置和許多其他應用程式中使用的硬體和軟體開發性能基準。EEMBC社群包括世界各地高校的成員公司、商業許可機構和學術許可機構。
EEMBC基準套件由其成員組成的工作組開發,目前的基準套件的主要分類如下:
- Ultra-Low Power and Internet of Things,超低功耗和IoT
- Heterogeneous Compute,異構計算
- Single-core Processor Performance,單核處理器性能
- Multi-core Processor Performance,多核處理器性能
- Phone and Tablet,行動電話和平闆電腦
EEMBC的願景是,如果參與者能夠通過協商一緻的過程就績效評估的标準标準達成一緻,那麼每個人都會受益。自1997年EEMBC成立以來的20多年裡,EEMBC積累了一個基準測試分數資料庫,EEMBC社群的每個人都可以使用該資料庫進行産品開發、研發,或者将其作為與自己的基準測試結果進行比較的基準。釋出的分數,如果可用,可以從這裡列出的每個主要基準頁面通路。這個公共基線通過提高透明度和使原始裝置制造商更容易地與處理器供應商進行溝通來為每個人服務,反之亦然。 EEMBC的官網連結如下所示。
https://www.eembc.org/
EEMBC由各種各樣的貢獻者組成。董事會成員、小組委員會成員和工具供應商構成了組織的主體。此外,EEMBC還擁有來自學術界、企業界和研究公司的顧問,他們通過提供來自其特定專業領域的回報或技術建議做出貢獻。平頭哥半導體旗下中天微系統有限公司就是EEMBC的董事會成員(Board Member)之一。
Coremark 的簡介
EEMBC的CoreMark®是用于測量嵌入式系統中使用的微控制器(mcu)和中央處理器(cpu)性能的Benchmark。Coremark取代了過時的Dhrystone基準測試,包含以下算法的實作:清單處理(查找和排序)、矩陣操作(常見矩陣操作)、狀态機(确定輸入流是否包含有效數字)和CRC(循環備援檢查)。它被設計在從8位微控制器到64位微處理器的裝置上運作。
CRC算法具有對偶功能;它提供了嵌入式應用程式中常見的工作負載,并確定CoreMark基準的正确操作,本質上提供了一種自我檢查機制。具體來說,為了驗證正确的操作,對連結清單元素中包含的資料執行16位CRC。
為了確定編譯器不能在編譯時預先計算結果,基準測試中的每個操作都派生一個在編譯時不可用的值。此外,在基準測試的定時部分中使用的所有代碼都是基準測試本身的一部分(沒有庫調用)。
Coremark 改進了哪些Dhrystone的缺陷
與 Dhrystone類似,CoreMark小巧、便攜、易于了解、免費,并顯示一個數字基準分數。與Dhrystone不同的是,CoreMark有特定的運作和報告規則,旨在避免Dhrystone的問題方面。例如,Dhrystone的主要部分實際上暴露了編譯器優化工作負載的能力,而不是MCU或CPU的能力。是以,Dhrystone作為編譯器基準測試比作為硬體基準測試更能說明問題。同樣,庫調用是在Dhrystone的定時部分内進行的。通常,這些庫調用消耗基準測試所消耗的大部分時間。由于庫代碼不是基準測試的一部分,是以如果使用不同的庫,就很難比較結果。最後,關于如何運作Dhrystone的指導原則是存在的,但是由于結果沒有經過認證或驗證,是以沒有強制執行。使用各種格式(DMIPS、Dhrystones每秒、DMIPS/MHz)報告Dhrystone結果的方式沒有标準化。
擷取Coremark 的版本
Coremark包括兩個版本,一個是面向單核處理器性能的Benchmark,即CoreMark;另一個是面向多核處理器性能的Benchmark,即CoreMark-Pro。兩個Benchmark都可以在EEMBC的官網下載下傳,而且這兩個Benchmark除了分别遵循COREMARK® ACCEPTABLE USE AGREEMENT、COREMARK®-PRO ACCEPTABLE USE AGREEMENT外,還都遵循Apache License(Version 2.0,2004年1月),一個對商業應用友好的許可。
https://github.com/eembc/coremarkhttps://github.com/eembc/coremark-pro
個人PC的Benchmark
個人PC的Benchmark已經比較成熟,例如國内常見的360、魯大師等等,都有比較完整的Benchmark。
PC的Benchmark,一般包括CPU的Benchmark,GPU的Benchmark,以及存儲系統(如記憶體、硬碟等)的Benchmark。
其中, GPU的Benchmark較為獨特。因為關注GPU性能的主要是遊戲玩家,是以GPU的Benchmark會在不同的遊戲場景(如《絕地求生》、《殺出重圍:人類分裂》等)下測試系統的一些名額,例如GPU核心占用、溫度、頻率,VRAM(視訊存儲)占用,CPU占用、溫度、頻率,RAM占用,每秒的幀數等資訊。
其中,每秒幀數是最為貼近遊戲體驗的一個名額。
個人移動終端的Benchmark
個人移動終端的Benchmark,以國内比較熟悉的安兔兔(ANTUTU)為例,也是做了比較全面的Benchmark,包括GPU、GPU、MEM、UX幾個方面。除了傳統的幾個内容外,這裡的UX比較特别。UX部分主要考驗的就是硬體對于使用場景的優化,具體見圖中清單。
面向DSSoC的Benchmark的需求
目标應用和目标客戶
在一份講解《計算機量化展現結構》的課件中,提到了這樣一句話。
Computers are always designed with some target applications and target customers in mind 計算機的設計一直會考慮到一些目标應用程式和目标客戶
這裡的“目标應用”和“目标客戶”是我們需要關注的兩個次元。
測量基準的次元
從安兔兔的例子就可以看出,測量基準的次元已經變得多元化。
其中,既包括常用的基于嵌入式體系結構的次元,會測試CPU、GPU、MEM的性能,這些測試使用相對公認的Benchmark,檢測這些僅僅從體系結構次元來定義的名額。
但是,安兔兔還會根據不同業務場景做專門的測試,例如之前提到的UX測試。除此之外,安兔兔還做了面向AI的圖像分類、公路場景下的模式識别的手機測試。
DSSoC的定義
(DSSoC,Domain-Specific System on Chip 特定領域的片上系統)在DARPA(Defense Advanced Research Projects Agency,美國國防部進階研究計劃局)網站上的介紹如下所示。
在過去的50年裡,通用計算機一直是主流的計算架構,這在很大程度上是由摩爾定律(Moore’s Law)的無情步伐推動的。然而,随着這一趨勢顯示出放緩的迹象,從通用硬體獲得性能收益變得越來越具有挑戰性,這為專業架構的複興奠定了基礎。目前,專用內建電路(ASIC)——為特定應用程式定制的硬體——僅能提供有限的靈活性,并且設計、制造和程式設計的成本很高。
領域特定的片上系統(DSSoC)程式試圖證明,在asic中發現的效率和通用處理器的标志靈活性之間,不需要持續的權衡。DSSoC的目标是開發一個由多個核心組成的異構片上系統(SoC),這些核心混合了通用處理器、專用處理器、硬體加速器、記憶體和輸入/輸出(I/O)裝置,以顯著提高某個領域内應用程式的性能。一個領域比任何一個應用程式都要大,其中一個處理器可以比通用處理器更有效地解決問題,但不需要挑戰、時間和成本來建構像ASIC這樣的專用系統。DSSoC正在探索通過特殊處理提高計算效率的體系結構,同時保持可程式設計性。
為了更好地支援國防部(DoD)維持其技術優勢所需要的大範圍和不斷增長的應用,DSSoC計劃将尋求為嵌入式處理需求提供更高計算效率的概念,同時使這些系統更具可程式設計性。為此,DSSoC将解決當今開發周期中的關鍵問題,這些問題迫使底層工程将應用程式移植到底層處理器的具體細節上。具體來說,DSSoC計劃将尋求開發軟體棧,通過提供從硬體到開發環境的垂直內建工具,進而實作更好的軟硬體協同設計。DSSoC的第二個關鍵影響将是在異構處理器上開發應用程式和資料的智能排程,以便更好地利用這些系統的異構性和并行性,而如今,為複雜系統編寫應用程式是一項耗時的手工調優工作。
面向DSSoC的Benchmark的離散化傾向
由于DSSoC面向許多特定領域,基于上節的分析,想讓通用的系統架構滿足所有特定領域的需求是不現實的。系統架構設計有時候是權衡的過程,包括但不限于:性能和功耗的權衡,性能和成本的權衡,功能的豐富性和硬體資源(如IP的種類、存儲空間大小等)之間的權衡等等。在某個領域表現優秀的系統架構,可能完全不滿足另一個領域的要求,所謂“汝之蜜糖,彼之砒霜”。
為了判斷系統的架構是否滿足某個特定領域,基于特定領域的Benchmark不斷疊代優化是一種解決問題的方法。
通用Benchmark的七個關鍵屬性
在維基百科中,提出了Benchmark有七個重要特征。這些關鍵屬性是: 1.相關性:Benchmark應該度量相對重要的特性(基于二八定律); 2.代表性:Benchmark選出性能名額應該被業界和學術界廣泛接受; 3.公平性:所有系統都應該進行公平比較; 4.重複性: Benchmark結果是可以被重複驗證的; 5.成本效益:Benchmark是經濟的(投入可接受); 6.可伸縮性:Benchmark範圍應該具有伸縮性(例如從單個核到多個異構核); 7.透明度:Benchmark應該易于了解(可讀性)。
面向DSSoC的Benchmark面臨的挑戰
基準測試并不容易,通常需要幾個疊代周期才能得出可預測的、有用的結論。基準資料的解釋也異常困難。以下是一些常見的挑戰:
- Benchmark獲得的結果與實際工作場景的可能不一緻,針對Benchmark的“調優”可能無法在實際工作場景獲得類似的收益;
- 某些Benchmark的設計僅僅針對系統的某個次元,例如性能,但是卻忽略了很多其它重要特性,包括但不限于:功耗、安全性、可靠性等等;
- 供應商基準測試往往忽略對開發、測試和災難恢複能力的需求。供應商隻喜歡報告生産能力的狹義需求,以便使他們的初始收購價格盡可能低;
- 目前較成熟的Benchmark一般為單機形式,面向網絡拓撲結構的Benchmark,尤其涉及到分布式計算的結構時,還不是很成熟;
- 标杆機構往往忽視或不遵循基本的科學方法。這包括但不限于:樣本量小,缺乏變量控制,結果重複性有限等等。
綜合“通用Benchmark的七個關鍵屬性”、“面向DSSoC的Benchmark面臨的挑戰”兩節,考慮DSSoC系統的獨特性,可以提出面向DSSoC的Benchmark需求:
1.獨特性:DSSoC相關領域的Benchmark應是專門針對該領域的Benchmark; 2.有效性:Benchmark能夠展現實際工作環境的情況,對Benchmark的“調優”可以在實際工作環境獲得類似的收益; 3.一緻性:Benchmark得到的結果可以展現在實際場景下的結果,是以Benchmark需要考慮到類似實際工作時的多個核或網絡節點共同工作,在總線或其它資源出現搶占,導緻仲裁的壓力場景; 4.公平性: 相同領域的不同DSSoC系統,基于相同的Benchmark獲得的結果應能夠作為多個系統比較的基準; 5.豐富性:Benchmark要考慮影響該DSSoC系統的多個次元,包括但不限于功耗、安全性、可靠性、可擴充性等等(容災恢複可了解為可靠性的一部分); 6.接受度:相關專業領域的業界和學術界能夠基本認可該Benchmark的度量方法; 7.經濟性:投入Benchmark的工作量是可接受的; 8.重複性:每次Benchmark的執行,結果是可重複驗證的; 9.伸縮性:Benchmark可以支援類似單核~異構多核的場景,單網絡節點~多網絡節點的場景。
面向未來的Benchmark
供應商自定義的Benchmark
供應商如果具備自定義Benchmark的能力,可以滿足以下的需求: 1. 供應商面對的特定領域,進入的組織可能很少,沒有現成的Benchmark可以使用; 2. 業界對一個新興領域的了解在一段時間内很難達到共識,但是業務發展需要一個度量基準; 3. 從供應商角度來看,某些特定領域需要搶占先機,從商業保密的角度來看,相關Benchmark無法提前對外釋出。
自學習的Benchmark
面對新興的領域,如果采用傳統的建構Benchmark的方法,可能很難找到合适的Benchmark度量資訊;但是,将不同場景擷取的大量資料交給機器學習,讓機器從大量資料中自動總結出可能對系統産生關鍵影響的一些名額,可能會收到一些意想不到的效果。
參考說明
https://en.wikipedia.org/wiki/Benchmark_(computing)原文作者:藍空
點選檢視原文