李競擇, 茍喜東, 范承宇
(中國兵器裝備集團自動化研究所有限公司, 四川 綿陽 621000)
STREAM 工具是由美國教授John McCalpin 提出的一套綜合性能測試程序集, 旨在測試計算機的內存帶寬性能。 現在世界上存在的個人計算機和專用計算機大部分是使用美國生產、研發的處理器、固件以及操作系統,全國產化的計算機目前還比較少,性能較差,針對全國產化計算機的內存性能測試也比較少。 本文選用由飛騰(FT2000/4)處理器、昆侖固件以及銀河麒麟操作系統構成的全國產化計算機進行STREAM 測試,設置不同參數取值下的對照實驗, 挖掘發現內存性能測試的規律和優化方法。
隨著處理器處理核心數量的增多, 內存帶寬對于提升整個系統性能越發重要, 如果某個系統不能足夠迅速地將內存中的數據傳輸到處理器當中, 若干處理核心就會處于等待數據的閑置狀態, 所產生的閑置時間不僅會降低系統的效率, 還會抵消多核心和高主頻所帶來的性能提升[1]。
STREAM 是由時為美國特拉華州大學(Delaware University) 的教授John McCalpin 團隊提出和完成的一套用于測試處理器內存性能的測試工具。 后由弗吉尼亞大學(Virginia University) 的計算機科學系負責它的維護和版本更新。
STREAM 包括Copy、Scale、Add、Triad 四種對連續一維向量數組的操作。 Copy 先訪問一個內存單元讀出其中的值,再將值寫入另一個內存單元。Scale 操作先從內存單元讀出其中的值,作一個乘法運算,再將結果寫入另一個內存單元。 Add 操作先從內存單元讀出兩個值,做加法運算,再將結果寫入另一個內存單元。Triad 操作先從內存單元中讀兩個值,將其中一個數值乘以一個標量,與另一個值相加, 將運算結果寫入另一個內存單元。 表1 給出了STREAM 基準測試程序的四種算法操作。

表1 STREAM 基準測試程序算法操作
FT-2000/4 是飛騰旗下的一款面向桌面計算機,包括臺式機、一體機、筆記本和終端控制主機的高性能通用處理器。 它集成了4 個64 位高性能核, 主頻標準配置為2.6GHz 并且可超頻至3GHz。 商業級版本工作溫度范圍在0 到70℃而工業級版本工作溫度范圍在-40℃到85℃。
作為國產處理器的領頭人,FT-2000/4 詳細技術指標如下: 采用ARM64 指令集、 主頻可調范圍為1.9GHz 到3GHz、4 個64 位處理器核FTC663、集成2 個DDR4/3200存 儲 接 口、 集 成2 路16lane PCIE3.0 接 口、2 路1lane PCIE3.0 接口、 集成2 個千兆網口、1 個SD2.0 控制器、1個高保真音頻接口、以及串口、FLASH 接口等慢速I/O 接口、全芯片典型工作功耗為10W。
FT-2000/4 可以根據實際應用需求,設計出不同的硬件配置。 具體設計可以根據需求裁剪、添加、替換外設模塊。 用戶可以根據具體應用靈活調整。
昆侖固件是中電科技旗下的一款具有自主知識產權,以固件技術和可信計算技術為核心,支持整機主板硬件初始化和操作系統引導, 廣泛應用于主流國產處理器平臺的服務器、終端、移動設備和嵌入式設備的明星產品。 昆侖固件可信版已經全面支持國產硬件平臺, 并實現了多種安全可信功能。目前,昆侖固件已在多個國家項目和軍隊項目中廣泛應用,并獲得了解放軍科學技術進步一等獎[2]。
“銀河麒麟”操作系統由中國自主研發的基本內核層和基于FreeBSD(一種Unix 操作系統)改造的系統服務層組成,是一個擁有層次式內核、安全等級達到結構化保護級、 能支持多種微處理器和多種計算機體系結構, 并與Linux 目標代碼兼容的國產服務器操作系統[3]。
作為國產操作系統的領頭羊, 銀河麒麟V10 操作系統擁有:同源代碼構建、國產平臺優化、圖形顯示優化、內生安全體系、輕量桌面環境、統一軟件、安卓兼容環境、版本兼容升級等特點。
STREAM 工具主要使用四種數組的運算來測試內存帶寬的性能,分別是:數組的復制(Copy)、數組的尺度變換(Scale)、數組的矢量求和(Add)、數組的復合矢量求和(Triad)。
STREAM 作為一款完善的內存寬帶性能測試工具擁有很多可選參數, 確保用戶可以根據自己的需求選用最優參數進行測試。 具體參數說明見表2。

表2 STREAM測試參數說明
本次實驗目的是對STREAM 測試工具的各項參數進行調試、設置,根據測試數據進行分析,從而得到測試得分最高的參數設置方案。
為防止偶然數據影響分析, 每次測試均加上參數-DNTIMES=30,表示測試30 次取最優值。
因為單線程與多線程測試分數肯定相差很大, 所以不加-fopenmp 的單線程測試結果不與添加了-fopenmp的多線程測試結果比較, 僅與無-fopenmp 參數測試結果比較。
針對參數-mtune/-march, 由于測試編譯機即運行機器,所以該參數值選擇為native。 編譯對照命令見表3。

表3 編譯命令
參數-mtune/-march 測試結果見表4。

表4 跑分結果
由測試數據可以看出,該參數會降低得分,因此后續實驗均不添加此參數。
針對參數-O,同樣如表3 制定類似編譯策略,進行對比試驗,編譯對照命令見表5。

表5 編譯命令
參數-O 測試結果,如表6 所示。

表6 跑分結果
從表5 可以看出,加上-O 參數后,得分明顯超過未加-O 參數得分,因此,后續實驗中均加入-O 參數討論。
針對參數-DSTREAM_ARRAY_SIZE,查看stream 測試工具源碼可知,未定義此參數時默認值為-DSTREAM_ARRAY_SIZE=10000000。 考慮到篇幅大小與CPU 正常工作情況(多核工作),針對該參數僅對多線程進行實驗,測試初始值從2000000 開始,每隔2000000 設置一次參數,直到10000000,編譯命令如表7 所示。

表7 編譯命令
實驗結果如表8 所示。

表8 跑分結果
從表中可以看出,該參數大小對性能得分影響很大,因此該參數取值應該擴大設置范圍進行重點討論。于是,我們從2000000 開始每隔2000000 取一次值, 直到110000000。 跑分結果見表9。
為方便分析結果,我們將表9 制成曲線圖,并且畫出趨勢線見圖1。

表9 跑分結果
觀察該圖,可知在一定范圍內,跑分分數呈周期性上下波動,觀察整體趨勢線,可知總體趨勢是隨該參數取值的增大而下降的。 由于平均分數是由4 項分數:Copy、Scale、Add、Triad 平均得出, 所以為了探究各測試項對平均分數影響的大小,我們做出了4 個測試項的曲線圖,如圖2~圖5 所示。

圖2 Copy 得分

圖5 Add 得分

圖3 Scale 得分

圖4 Triad 得分
觀察上圖, 可以看到,4 項分數均呈周期性變化。 其中Copy 在一個周期內(約5000000 一個周期)呈類三角函數變化;Scale 在一個周期內(約7500000 一個周期)呈類三角函數變化;Triad 在一個周期內(約29000000 一個周期)呈周期性變化,可以取到極值;Add 在一個周期內(約29000000 一個周期)呈周期性變化,可以取到極值。因為4 項得分都呈周期性變化, 所以4 項得分的平均得分也呈周期性變化。
在2.3 節進行了科學且系統的參數選取實驗,并且得到了實驗結果。 根據表格及曲線圖分析可得到以下結論:
(1)-mtnue/-march 參數會導致得分負增長,不建議在測試時加入。
(2)-O 參數會優化編譯器使得得分大幅度增長,建議在測試時加入。
(3)-DSTREAM_ARRAY_SIZE 參數的取值變化會使得得分呈周期性變化,在取值時應該根據測試方要求選取不同值。 例如測試要求參數取值范圍為0 到10000000,則在此范圍內應該取4000000 作為參數值,此時得分最高。
數據測試結果表明, 進行STREAM 多線程內存性能測試時相較于不添加任何參數,加上-O 以及-DSTREAM_ARRAY_SIZE 參數后,程序測試分數最大可以提升56.34%。
隨著科技的高速發展, 科學和工程的各個領域都對高性能數據處理有極高的要求, 但計算機訪存性能的瓶頸制約了應用程序的發揮, 使得其峰值性能只有機器實際性能的5%到10%左右。
本文研究了STREAM 在使用了FT2000/4 微處理器的全國產筆記本上的性能優化方法。 從參數方向入手系統地討論了-mtune/-march、-O、-DSTREAM_ARRAY_SIZE等關鍵參數對內存性能測試結果的影響。
數據測試結果表明,優化后,并行程序的最高訪存性能能達到13.93GB/s,對比優化前的最高訪存性能提高了56.34%。
程序優化是一個永無止境的過程, 希望其他學者在尋找更好優化方法的同時, 把本文的優化方法應用到其他具有相似訪存特點的程序中。