李競(jìng)擇, 茍喜東, 范承宇
(中國(guó)兵器裝備集團(tuán)自動(dòng)化研究所有限公司, 四川 綿陽(yáng) 621000)
STREAM 工具是由美國(guó)教授John McCalpin 提出的一套綜合性能測(cè)試程序集, 旨在測(cè)試計(jì)算機(jī)的內(nèi)存帶寬性能。 現(xiàn)在世界上存在的個(gè)人計(jì)算機(jī)和專用計(jì)算機(jī)大部分是使用美國(guó)生產(chǎn)、研發(fā)的處理器、固件以及操作系統(tǒng),全國(guó)產(chǎn)化的計(jì)算機(jī)目前還比較少,性能較差,針對(duì)全國(guó)產(chǎn)化計(jì)算機(jī)的內(nèi)存性能測(cè)試也比較少。 本文選用由飛騰(FT2000/4)處理器、昆侖固件以及銀河麒麟操作系統(tǒng)構(gòu)成的全國(guó)產(chǎn)化計(jì)算機(jī)進(jìn)行STREAM 測(cè)試,設(shè)置不同參數(shù)取值下的對(duì)照實(shí)驗(yàn), 挖掘發(fā)現(xiàn)內(nèi)存性能測(cè)試的規(guī)律和優(yōu)化方法。
隨著處理器處理核心數(shù)量的增多, 內(nèi)存帶寬對(duì)于提升整個(gè)系統(tǒng)性能越發(fā)重要, 如果某個(gè)系統(tǒng)不能足夠迅速地將內(nèi)存中的數(shù)據(jù)傳輸?shù)教幚砥鳟?dāng)中, 若干處理核心就會(huì)處于等待數(shù)據(jù)的閑置狀態(tài), 所產(chǎn)生的閑置時(shí)間不僅會(huì)降低系統(tǒng)的效率, 還會(huì)抵消多核心和高主頻所帶來(lái)的性能提升[1]。
STREAM 是由時(shí)為美國(guó)特拉華州大學(xué)(Delaware University) 的教授John McCalpin 團(tuán)隊(duì)提出和完成的一套用于測(cè)試處理器內(nèi)存性能的測(cè)試工具。 后由弗吉尼亞大學(xué)(Virginia University) 的計(jì)算機(jī)科學(xué)系負(fù)責(zé)它的維護(hù)和版本更新。
STREAM 包括Copy、Scale、Add、Triad 四種對(duì)連續(xù)一維向量數(shù)組的操作。 Copy 先訪問(wèn)一個(gè)內(nèi)存單元讀出其中的值,再將值寫(xiě)入另一個(gè)內(nèi)存單元。Scale 操作先從內(nèi)存單元讀出其中的值,作一個(gè)乘法運(yùn)算,再將結(jié)果寫(xiě)入另一個(gè)內(nèi)存單元。 Add 操作先從內(nèi)存單元讀出兩個(gè)值,做加法運(yùn)算,再將結(jié)果寫(xiě)入另一個(gè)內(nèi)存單元。Triad 操作先從內(nèi)存單元中讀兩個(gè)值,將其中一個(gè)數(shù)值乘以一個(gè)標(biāo)量,與另一個(gè)值相加, 將運(yùn)算結(jié)果寫(xiě)入另一個(gè)內(nèi)存單元。 表1 給出了STREAM 基準(zhǔn)測(cè)試程序的四種算法操作。
表1 STREAM 基準(zhǔn)測(cè)試程序算法操作
FT-2000/4 是飛騰旗下的一款面向桌面計(jì)算機(jī),包括臺(tái)式機(jī)、一體機(jī)、筆記本和終端控制主機(jī)的高性能通用處理器。 它集成了4 個(gè)64 位高性能核, 主頻標(biāo)準(zhǔn)配置為2.6GHz 并且可超頻至3GHz。 商業(yè)級(jí)版本工作溫度范圍在0 到70℃而工業(yè)級(jí)版本工作溫度范圍在-40℃到85℃。
作為國(guó)產(chǎn)處理器的領(lǐng)頭人,F(xiàn)T-2000/4 詳細(xì)技術(shù)指標(biāo)如下: 采用ARM64 指令集、 主頻可調(diào)范圍為1.9GHz 到3GHz、4 個(gè)64 位處理器核FTC663、集成2 個(gè)DDR4/3200存 儲(chǔ) 接 口、 集 成2 路16lane PCIE3.0 接 口、2 路1lane PCIE3.0 接口、 集成2 個(gè)千兆網(wǎng)口、1 個(gè)SD2.0 控制器、1個(gè)高保真音頻接口、以及串口、FLASH 接口等慢速I(mǎi)/O 接口、全芯片典型工作功耗為10W。
FT-2000/4 可以根據(jù)實(shí)際應(yīng)用需求,設(shè)計(jì)出不同的硬件配置。 具體設(shè)計(jì)可以根據(jù)需求裁剪、添加、替換外設(shè)模塊。 用戶可以根據(jù)具體應(yīng)用靈活調(diào)整。
昆侖固件是中電科技旗下的一款具有自主知識(shí)產(chǎn)權(quán),以固件技術(shù)和可信計(jì)算技術(shù)為核心,支持整機(jī)主板硬件初始化和操作系統(tǒng)引導(dǎo), 廣泛應(yīng)用于主流國(guó)產(chǎn)處理器平臺(tái)的服務(wù)器、終端、移動(dòng)設(shè)備和嵌入式設(shè)備的明星產(chǎn)品。 昆侖固件可信版已經(jīng)全面支持國(guó)產(chǎn)硬件平臺(tái), 并實(shí)現(xiàn)了多種安全可信功能。目前,昆侖固件已在多個(gè)國(guó)家項(xiàng)目和軍隊(duì)項(xiàng)目中廣泛應(yīng)用,并獲得了解放軍科學(xué)技術(shù)進(jìn)步一等獎(jiǎng)[2]。
“銀河麒麟”操作系統(tǒng)由中國(guó)自主研發(fā)的基本內(nèi)核層和基于FreeBSD(一種Unix 操作系統(tǒng))改造的系統(tǒng)服務(wù)層組成,是一個(gè)擁有層次式內(nèi)核、安全等級(jí)達(dá)到結(jié)構(gòu)化保護(hù)級(jí)、 能支持多種微處理器和多種計(jì)算機(jī)體系結(jié)構(gòu), 并與Linux 目標(biāo)代碼兼容的國(guó)產(chǎn)服務(wù)器操作系統(tǒng)[3]。
作為國(guó)產(chǎn)操作系統(tǒng)的領(lǐng)頭羊, 銀河麒麟V10 操作系統(tǒng)擁有:同源代碼構(gòu)建、國(guó)產(chǎn)平臺(tái)優(yōu)化、圖形顯示優(yōu)化、內(nèi)生安全體系、輕量桌面環(huán)境、統(tǒng)一軟件、安卓兼容環(huán)境、版本兼容升級(jí)等特點(diǎn)。
STREAM 工具主要使用四種數(shù)組的運(yùn)算來(lái)測(cè)試內(nèi)存帶寬的性能,分別是:數(shù)組的復(fù)制(Copy)、數(shù)組的尺度變換(Scale)、數(shù)組的矢量求和(Add)、數(shù)組的復(fù)合矢量求和(Triad)。
STREAM 作為一款完善的內(nèi)存寬帶性能測(cè)試工具擁有很多可選參數(shù), 確保用戶可以根據(jù)自己的需求選用最優(yōu)參數(shù)進(jìn)行測(cè)試。 具體參數(shù)說(shuō)明見(jiàn)表2。
表2 STREAM測(cè)試參數(shù)說(shuō)明
本次實(shí)驗(yàn)?zāi)康氖菍?duì)STREAM 測(cè)試工具的各項(xiàng)參數(shù)進(jìn)行調(diào)試、設(shè)置,根據(jù)測(cè)試數(shù)據(jù)進(jìn)行分析,從而得到測(cè)試得分最高的參數(shù)設(shè)置方案。
為防止偶然數(shù)據(jù)影響分析, 每次測(cè)試均加上參數(shù)-DNTIMES=30,表示測(cè)試30 次取最優(yōu)值。
因?yàn)閱尉€程與多線程測(cè)試分?jǐn)?shù)肯定相差很大, 所以不加-fopenmp 的單線程測(cè)試結(jié)果不與添加了-fopenmp的多線程測(cè)試結(jié)果比較, 僅與無(wú)-fopenmp 參數(shù)測(cè)試結(jié)果比較。
針對(duì)參數(shù)-mtune/-march, 由于測(cè)試編譯機(jī)即運(yùn)行機(jī)器,所以該參數(shù)值選擇為native。 編譯對(duì)照命令見(jiàn)表3。
表3 編譯命令
參數(shù)-mtune/-march 測(cè)試結(jié)果見(jiàn)表4。
表4 跑分結(jié)果
由測(cè)試數(shù)據(jù)可以看出,該參數(shù)會(huì)降低得分,因此后續(xù)實(shí)驗(yàn)均不添加此參數(shù)。
針對(duì)參數(shù)-O,同樣如表3 制定類似編譯策略,進(jìn)行對(duì)比試驗(yàn),編譯對(duì)照命令見(jiàn)表5。
表5 編譯命令
參數(shù)-O 測(cè)試結(jié)果,如表6 所示。
表6 跑分結(jié)果
從表5 可以看出,加上-O 參數(shù)后,得分明顯超過(guò)未加-O 參數(shù)得分,因此,后續(xù)實(shí)驗(yàn)中均加入-O 參數(shù)討論。
針對(duì)參數(shù)-DSTREAM_ARRAY_SIZE,查看stream 測(cè)試工具源碼可知,未定義此參數(shù)時(shí)默認(rèn)值為-DSTREAM_ARRAY_SIZE=10000000。 考慮到篇幅大小與CPU 正常工作情況(多核工作),針對(duì)該參數(shù)僅對(duì)多線程進(jìn)行實(shí)驗(yàn),測(cè)試初始值從2000000 開(kāi)始,每隔2000000 設(shè)置一次參數(shù),直到10000000,編譯命令如表7 所示。
表7 編譯命令
實(shí)驗(yàn)結(jié)果如表8 所示。
表8 跑分結(jié)果
從表中可以看出,該參數(shù)大小對(duì)性能得分影響很大,因此該參數(shù)取值應(yīng)該擴(kuò)大設(shè)置范圍進(jìn)行重點(diǎn)討論。于是,我們從2000000 開(kāi)始每隔2000000 取一次值, 直到110000000。 跑分結(jié)果見(jiàn)表9。
為方便分析結(jié)果,我們將表9 制成曲線圖,并且畫(huà)出趨勢(shì)線見(jiàn)圖1。
表9 跑分結(jié)果
觀察該圖,可知在一定范圍內(nèi),跑分分?jǐn)?shù)呈周期性上下波動(dòng),觀察整體趨勢(shì)線,可知總體趨勢(shì)是隨該參數(shù)取值的增大而下降的。 由于平均分?jǐn)?shù)是由4 項(xiàng)分?jǐn)?shù):Copy、Scale、Add、Triad 平均得出, 所以為了探究各測(cè)試項(xiàng)對(duì)平均分?jǐn)?shù)影響的大小,我們做出了4 個(gè)測(cè)試項(xiàng)的曲線圖,如圖2~圖5 所示。
圖2 Copy 得分
圖5 Add 得分
圖3 Scale 得分
圖4 Triad 得分
觀察上圖, 可以看到,4 項(xiàng)分?jǐn)?shù)均呈周期性變化。 其中Copy 在一個(gè)周期內(nèi)(約5000000 一個(gè)周期)呈類三角函數(shù)變化;Scale 在一個(gè)周期內(nèi)(約7500000 一個(gè)周期)呈類三角函數(shù)變化;Triad 在一個(gè)周期內(nèi)(約29000000 一個(gè)周期)呈周期性變化,可以取到極值;Add 在一個(gè)周期內(nèi)(約29000000 一個(gè)周期)呈周期性變化,可以取到極值。因?yàn)? 項(xiàng)得分都呈周期性變化, 所以4 項(xiàng)得分的平均得分也呈周期性變化。
在2.3 節(jié)進(jìn)行了科學(xué)且系統(tǒng)的參數(shù)選取實(shí)驗(yàn),并且得到了實(shí)驗(yàn)結(jié)果。 根據(jù)表格及曲線圖分析可得到以下結(jié)論:
(1)-mtnue/-march 參數(shù)會(huì)導(dǎo)致得分負(fù)增長(zhǎng),不建議在測(cè)試時(shí)加入。
(2)-O 參數(shù)會(huì)優(yōu)化編譯器使得得分大幅度增長(zhǎng),建議在測(cè)試時(shí)加入。
(3)-DSTREAM_ARRAY_SIZE 參數(shù)的取值變化會(huì)使得得分呈周期性變化,在取值時(shí)應(yīng)該根據(jù)測(cè)試方要求選取不同值。 例如測(cè)試要求參數(shù)取值范圍為0 到10000000,則在此范圍內(nèi)應(yīng)該取4000000 作為參數(shù)值,此時(shí)得分最高。
數(shù)據(jù)測(cè)試結(jié)果表明, 進(jìn)行STREAM 多線程內(nèi)存性能測(cè)試時(shí)相較于不添加任何參數(shù),加上-O 以及-DSTREAM_ARRAY_SIZE 參數(shù)后,程序測(cè)試分?jǐn)?shù)最大可以提升56.34%。
隨著科技的高速發(fā)展, 科學(xué)和工程的各個(gè)領(lǐng)域都對(duì)高性能數(shù)據(jù)處理有極高的要求, 但計(jì)算機(jī)訪存性能的瓶頸制約了應(yīng)用程序的發(fā)揮, 使得其峰值性能只有機(jī)器實(shí)際性能的5%到10%左右。
本文研究了STREAM 在使用了FT2000/4 微處理器的全國(guó)產(chǎn)筆記本上的性能優(yōu)化方法。 從參數(shù)方向入手系統(tǒng)地討論了-mtune/-march、-O、-DSTREAM_ARRAY_SIZE等關(guān)鍵參數(shù)對(duì)內(nèi)存性能測(cè)試結(jié)果的影響。
數(shù)據(jù)測(cè)試結(jié)果表明,優(yōu)化后,并行程序的最高訪存性能能達(dá)到13.93GB/s,對(duì)比優(yōu)化前的最高訪存性能提高了56.34%。
程序優(yōu)化是一個(gè)永無(wú)止境的過(guò)程, 希望其他學(xué)者在尋找更好優(yōu)化方法的同時(shí), 把本文的優(yōu)化方法應(yīng)用到其他具有相似訪存特點(diǎn)的程序中。
機(jī)電產(chǎn)品開(kāi)發(fā)與創(chuàng)新2022年3期