一: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時需要在編譯選項中添加此參數,否則編譯出錯。