內存帶寬測試-STREAM的使用

一:STREAM的起源    

     STREAM測試工具是由時爲美國Delaware大學教授 John McCalpin提出和完成的, 現在隨着John McCalpin教授的工作變動, 負責 STREAM 的維護和改進的所有工作人員也轉移到了Virginia大學的計算機科學系。

二:STREAM的用途

      STREAM是一套綜合性能測試程序集,通過fortran和C兩種高級且高效的語言編寫完成,由於這兩種語言在數學計算方面的高效率, 使得 STREAM 測試例程可以充分發揮出內存的能力。 STREAM 測試得到的是可持續運行的內存帶寬最大值,而並不是一般的硬件廠商提供的理論最大值。

三:軟件環境準備

    採用最新的內核版本的linux,測試時系統啓動到單用戶模式,可以通過編輯/etc/inittab文件,把其中的
    id:5:initdefault
    編輯爲
    id:3:initdefault
    將一些沒有必要的系統守護進程去掉,可以運行ntsysv命令,關閉除了irqbalance和messagebus.之外的系統服務進程,也可以節省系統的資源。

四:STREAM的使用方法

    1、下載STREAM源程序 stream.tar (http://www.nersc.gov/users/computational-systems/cori/nersc-8-procurement/trinity-nersc-8-rfp/nersc-8-trinity-benchmarks/stream/)

    2、解壓stream.tar, 進入目錄stream;

    3、打開Makefile文件(如下圖),根據平臺修改編譯器,以及打開需要的編譯選項,例如:使用多線程打開#CFLAGS += -fopenmp編譯選項,等。


     編譯 make ;

    4、執行 (結果如下圖)

      ./stream_c.exe


5、執行結果說明

    以上測試是默認的單線程測試結果。

   主要有四種數組的運算,測試到內存帶寬的性能,分別是:
   數組的複製(Copy)、數組的尺度變換(Scale)、數組的矢量求和(Add)、數組的複合矢量求和(Triad)。
   數組的大小:Array size = 20000000

五:數據維度N定義

     其中STREAM ARRAY_SIZE對測試結果影響較大。修改數組的大小,迭代的次數、數組的偏移等在源文件中。其中,數組的偏移最好對齊(如下圖)。


其中N指定計算中a[],b[],c[]三個數組的大小,且數組的值採用了雙精度(8個字節)。數組的維數 N定義時需要注意以下幾點:

   一、要充分考慮內存容量的需求,粗略估計是 N× 8(雙精度) × 3 (三個數組)<= 0.6*M;M 是用戶的可用內存。
   二、要保證測試過程中,使用到的內存容量要大於處理器內的緩存,只有這樣纔會有內存的操作,而不僅僅是對處理器內緩存的操作。
   三、爲了保證測試可以持續一段時間,測試過程中內存帶寬可以達到一定的最大值, 從而避免得不到實際最大峯值的情況,如果四項測試中有完成時間小於20微秒的情況,就需要適當的增大測試數組的維度 N。

另外,需要注意的是:-mcmodel=medium ;當單個Memory Array Size 大於2GB時需要在編譯選項中添加此參數,否則編譯出錯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章