LINPACK测试
1簡介
LINPACK是線性系統軟件包(Linear?system?package)?的縮寫。
Linpack現在在國際上已經成為最流行的用于測試高性能計算機系統浮點性能的benchmark。通過利用高性能計算機,用高斯消元法求解一元N次稠密線性代數方程組的測試,評價高性能計算機的浮點性能。
Linpack測試包括三類,Linpack100、Linpack1000和HPL。Linpack100求解規模為100階的稠密線性代數方程組,它只允許采用編譯優化選項進行優化,不得更改代碼,甚至代碼中的注釋也不得修改。Linpack1000要求求解規模為1000階的線性代數方程組,達到指定的精度要求,可以在不改變計算量的前提下做算法和代碼上做優化。HPL即High?Performance?Linpack,也叫高度并行計算基準測試,它對數組大小N沒有限制,求解問題的規模可以改變,除基本算法(計算量)不可改變外,可以采用其它任何優化方法。前兩種測試運行規模較小,已不是很適合現代計算機的發展,因此現在使用較多的測試標準為HPL,而且階次N也是linpack測試必須指明的參數。
LINPACK壓力測試的目的主要為檢測系統中CPU的工作的穩定性及內存訪問的穩定性。
2測試分類
Linpack測試分為兩種測試方式,一?單板測試?二?集群測試
3?測試前的準備
為了提高CPU訪問的內存的效率,及降低頁表占用CPU資源。采用內存hugepage,系統進程是通過虛擬地址訪問內存,但是CPU必須把它轉換成物理內存地址才能真正訪問內存。為了提高這個轉換效率,CPU會緩存最近的虛擬內存地址和物理內存地址的映射關系,并保存在一個由CPU維護的映射表中。為了盡量提高內存的訪問速度,需要在映射表中保存盡量多的映射關系。?
????而在Linux中,內存都是以頁的形式劃分的,默認情況下每頁是4K,這就意味著如果物理內存很大,則映射表的條目將會非常多,會影響CPU的檢索效率。因為內存大小是固定的,為了減少映射表的條目,可采取的辦法只有增加頁的尺寸。這種增大的內存頁尺寸在Linux?2.1中,稱為Big?page;在AS?3/4中,稱為Hugepage。?
如果系統有大量的物理內存(大于8G),則物理32位的操作系統還是64位的,都應該使用Hugepage。?
???注意:使用Hugepage內存是共享內存,它會一直keep在內存中的,不會被交換出去,也就是說使用hurgepage的內存不能被其他的進程使用,所以,一定要合理設置這個值,避免造成浪費。
???所以在進行測試之前,一定要確保系統內核支持Hugepage內存分頁。
4?測試步驟
第一部分:環境設置
1設置內存大頁面
#?umount?/mnt
首先將臨時掛載文件夾的目錄/mnt卸載
#?mount?-t?hugetlbfs?none?/mnt
掛載一個大頁面系統,將hugetlbfs掛載到/mnt目錄
#?echo?3?>/proc/sys/vm/drop_caches
通過修改proc系統的drop_caches清理free的cach
#?echo?80>?/proc/sys/vm/nr_hugepages
設置大頁面的數量
計算方式:
1?確定物理內存的大小
2?確定大頁面單頁的大小
大頁面單頁的大小,可以在內核中進行設置。查看方式:
#?cat?/proc/meminfo?|?grep?huge
注|:大頁面被設置后,這部分內存就會被占用,不能被其他程序所調用。建議大頁面的容量應該在物理內存的80%左右。
例如:物理內存為4G,單頁的大小為32M,則大頁的數量應該設置為:4*1024*80%除以32?為102.,大頁面的數量在102左右。原則上不超過這個值。
2?PATH設置
MPICH
提供并行環境的軟件
1、下載mpich2.tar.gz壓縮包,將其放在制定的目錄下(這里以放在/usr/local/目錄下為
例);
2、進入mpich2.tar.gz所在的目錄,執行如下命令:
#?tar?xf?mpich2.tar.gz?–C?/usr/local/
可以通過#which?mpirun;which?mpiexec來check是否安裝成功
3、設置PATH環境變量
#?export?PATH=/usr/local/mpich2/bin:$PATH
4、配置/etc/mpd.conf文件
#?echo?“secretword=loongson”?>?/etc/mpd.conf
Secretword?是你的密鑰,是每臺機臺進行并行環境運行的基礎。
#?chmod?600?/etc/mpd.conf
設置mpd.conf文件的權限
注:這是單板測試,如果在集群測試中,每個Node都必須添加該文件,并且設置文件的權限
5、執行mpd?&?命令;
#?mpd?&?
單機時啟動MPI的命令?,如果為集群測試,此處有修改,參見下面文檔。
3?
?
?
運行單板測試
在進行測試之前,需要進行HPL優化設置。
?
HPL的設置說明:
如果編譯正常,在hpl/bin/Linux_xeon目錄下就會生成兩個文件HPL.dat和xhpl。?HPL.dat文件是Linpack測試的優化配置文件,這個對測試的結果十分重要,xhpl為可執行程序。如果是集群測試,就將linpack目錄復制到機群中其余節點相同的目錄下。注:公司提供的linpack為編譯完成的,不在需要重新編譯。
第1行HPLinpack?benchmark?input?file??
第2行Innovative?Computing?Laboratory,?University?of?Tennessee
前兩行為說明性文字,不用作修改
第3行?HPL.out?output?file?name?(if?any)??
第4行?6???device?out?(6=stdout,7=stderr,file)??
device?out"為"6"時,測試結果輸出至標準輸出(stdout)
"device?out"為"7"時,測試結果輸出至標準錯誤輸出(stderr)
"device?out"為其它值時,測試結果輸出至第三行所指定的文件中
可以通過設置此處用來保存測試結果。
第5行?1???#?of?problems?sizes?(N)??
選擇矩陣的數量?如?1?則為第一個矩陣。
第6行10240?26680?28800?30720?29?30?34?35??Ns??
矩陣的規模N越大,有效計算所占的比例也越大,系統浮點處理性能也就越高;但與此同時,矩陣規模N的增加會導致內存消耗量的增加,一旦系統實際內存空間不足,使用緩存、性能會大幅度降低。
由于之前采用了大頁面內存系統,所以此處計算規模的大小,應以設置的大頁面內存總量做計算。計算方式為:N*N*8=大頁內存總量*0.8?,內存總量換算為字節。
而且規模的大小最好為384的倍數。
第7行?1??#?of?NBs??
第8行?128?2?3?4?????NBs??
提高數據的局部性,從而提高整體性能,HPL采用分塊矩陣的算法。分塊的大小對性能有很大的影響,NB的選擇和軟硬件許多因素密切相關。NB值的選擇主要是通過實際測試得到最優值。但NB的選擇上還是有一些規律可尋,如:NB不可能太大或太小,一般在256以下;NB?×?8一定是Cache?line的倍數等。例如,我們的L2?cache為1024K,?NB就設置為192另外,NB大小的選擇還跟通信方式、矩陣規模、網絡、處理器速度等有關系。一般通過單節點或單CPU測試可以得到幾個較好的NB值,但當系統規模增加、問題規模變大,有些NB取值所得性能會下降。所以最好在小規模測試時選擇3個左右性能不錯的NB,再通過大規模測試檢驗這些選擇。此處一般選擇128。
第9行?1???PMAP?process?mapping?(0=Row-,1=Column-major)??
選擇處理器陣列是按列的排列方式還是按行的排列方式。按HPL文檔中介紹,按列的排列方式適用于節點數較多、每個節點內CPU數較少的系統;而按行的排列方式適用于節點數較少、每個節點內CPU數較多的大規模系統。在機群系統上,按列的排列方式的性能遠好于按行的排列方式。此處一般選擇1
第10行?3??#?of?process?grids?(P?x?Q)??
第11行?2?1?4??Ps??
第12行?2?4?1??Qs??
)第10~12行說明二維處理器網格(P?×?Q),二維處理器網格(P?×?Q)的有以下幾個要求。
P?×?Q?=?系統CPU數?=?進程數。一般來說一個進程對于一個CPU可以得到最佳性能。對于Intel?Xeon來說,關閉超線程可以提高HPL性能。P≤Q;一般來說,P的值盡量取得小一點,因為列向通信量(通信次數和通信數據量)要遠大于橫向通信。P?=?2n,即P最好選擇2的冪。HPL中,L分解的列向通信采用二元交換法(Binary?Exchange),當列向處理器個數P為2的冪時,性能最優。例如,當系統進程數為4的時候,P?×?Q選擇為1?×?4的效果要比選擇2?×?2好一些。?在集群測試中,P?×?Q?=?系統CPU總核數。如系統為總核數為16核,則P*Q值應該為4.
第13行?16.0???threshold??
第13行說明測試的精度。這個值就是在做完線性方程組的求解以后,檢測求解結果是否正確。若誤差在這個值以內就是正確,否則錯誤。一般而言,若是求解錯誤,其誤差非常大;若正確,則很小。所以沒有必要修改此值
第14行1??#?of?panel?fact??
第15行?0?1?2??PFACTs?(0=left,?1=Crout,?2=Right)??
第16行?2??#?of?recursive?stopping?criterium??
第17行?2?4????NBMINs?(>=?1)??
第18行?1??#?of?panels?in?recursion??
第19行?2??NDIVs??
第20行?3??#?of?recursive?panel?fact.??
第21行?0?1?2??RFACTs?(0=left,?1=Crout,?2=Right)??
第14~21行指明L分解的方式。在消元過程中,zHPL采用每次完成NB列的消元,然后更新后面的矩陣。這NB的消元就是L的分解。每次L的分解只在一列處理器中完成。對每一個小矩陣作消元時,都有3種算法:L、R、C,分別代表Left、Right和Crout。在LU分解中,具體的算法很多,測試經驗,NDIVs選擇2比較理想,NBMINs?4或8都不錯。而對于RFACTs和PFACTs,對性能的影響不大。在HPL官方文檔中,推薦的設置為:
1???????#?of?panel?fact??
1???????PFACTs?(0=left,?1=Crout,?2=Right)??
2???????#?of?recursive?stopping?criterium??
4?8?????NBMINs?(>=?1)??
1???????#?of?panels?in?recursion??
2???????NDIVs??
1???????#?of?recursive?panel?fact.??
2???????RFACTs?(0=left,?1=Crout,?2=Right)?
?
第22行?1??#?of?broadcast??
第23行?0??BCASTs?(0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)??
第22、23行說明L的橫向廣播方式,HPL中提供了6種廣播方式。其中,前4種適合于快速網絡;后兩種采用將數據切割后傳送的方式,主要適合于速度較慢的網絡。目前,機群系統一般采用千兆以太網甚至光纖等高速網絡,所以一般不采用后兩種方式。一般來說,在小規模系統中,選擇0或1;對于大規模系統,選擇3。推薦的配置為:
2???????#?of?broadcast??
3?????BCASTs?(0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
第24行?1??#?of?lookahead?depth??
第25行?0??DEPTHs?(>=0)??
第24、25行說明橫向通信的通信深度。這依賴于機器的配置和問題規模的大小,推薦配置為:
2???????#?of?lookahead?depth??
0?1?????DEPTHs?(>=0)?
?
第26行?0??SWAP?(0=bin-exch,1=long,2=mix)??
第27行?32?????swapping?threshold??
第26、27行說明U的廣播算法。U的廣播為列向廣播,HPL提供了3種U的廣播算法:二元交換(Binary?Exchange)法、Long法和二者混合法。SWAP="0",采用二元交換法;SWAP="1",采用Long法;SWAP="2",采用混合法。推薦配置為:?
2???????SWAP?(0=bin-exch,1=long,2=mix)???
60??????swapping?threshold??
?
第28行?0??L1?in?(0=transposed,1=no-transposed)?form??
第29行?0??U?in?(0=transposed,1=no-transposed)?form??
第28、29行分別說明L和U的數據存放格式。若選擇"transposed",則采用按列存放,否則按行存放。推薦配置為:?
0???????L1?in?(0=transposed,1=no-transposed)?form???
0???????U??in?(0=transposed,1=no-transposed)?form??
?
第30行?1??Equilibration?(0=no,1=yes)??
第30行主要在回代中使用,一般使用其默認值
第31行?8??memory?alignment?in?double?(>?0)?
第31行的值主要為內存地址對齊而設置,用于在內存分配中對齊地址。出于安全考慮,可以選擇8
運行
一、單進程(即4核4線程)情況
直接執行./xhpl即可;
二、兩進程(即8核8線程)情況:
#?mpirun?-np?2?./xhpl?
?
?
集群測試
配置環境
各板子配置ssh免密碼登錄
系統一般已經啟用了SSH服務,
1?#:cd?~/.ssh
進入系統保存SSH密鑰的目錄
2?#:ssh-keygen?-t?rsa?
生成私鑰
3:cp?id_rsa.pub?authorized_keys
?id_rsa_pub是與本機上面的私鑰可以對上號的公鑰。
由于每臺機器既要當作SSH服務器又要當作SSH客戶端,因此我們需要做的就是將這對公鑰和私鑰分發給每臺機器,但是首先必須將公鑰的文件名改?成"authorized_keys"
4:scp?*?test@192.168.1.2:~?/.ssh/
將私鑰和公鑰分發到各個子板。通過遠程CP將私鑰和公鑰復制到各個子板的.ssh目錄下。用來實現各節點之間的免密碼SSH登陸。
5?嘗試是否可以實現無密碼登陸。
使用?SSH?xx.xx.xx.xx或者SSH?主機名的方式check是否實現免密碼登陸
設置主機名映射和IP
準備確保網絡環境是可以聯通的。可以設置各節點的網卡的靜態IP,及各節點的主機名稱。
命令為:hostname?test1
編輯各子板/etc/hosts文件,添加各子板IP與主機名映射。
VI?/etc/hosts文件,格式如下:
192.168.1.1test1
192.168.1.2?test2
注意?各個節點都應該添加該文件
文件m,添加要聯跑的主機名(一行寫一個)
格式為:test1?
????????Test2?
可以通過mpdboot?–n?【主機名】-f?m?來驗證并行環境是否建立。
配置測試環境
集群測試環境的配置和單板一致,但必須確保每個節點的環境一致。
需要注意的是:在啟動MPI并行環境時,應采用運行
mpdboot?-n?[主機數量]?-f?m?
編輯HPL.dat文件。更改規模,Ps,Qs值,
規則:1.Ps<Qs
Ps為2的n次方。
Ps*Qs?=?聯跑主機的總核數/4
規模計算方法:
mpi分配計算量是每個板子一樣的。
應該按照內存最小子板的大頁數來計算規模的大小
運行
??運行mpiexec?-n?[Ps*Qs的值]?./xhpl
總結
- 上一篇: DT时代即将到来
- 下一篇: 显卡java_装个显卡就那么难阿!!!