Stream測試是內存測試中業界公認的內存帶寬性能測試基准工具。
Stream安裝
官方源碼地址:http://www.cs.virginia.edu/stream/FTP/Code/stream.c
配好軟件源,安裝編譯器:
yum -y install gcc
上傳Stream.c(stream.c版本為5.9)到待測試機器。編譯:
gcc -O3 -fopenmp -DN=2000000 -DNTIMES=10 stream.c -o stream
編譯參數解釋:
- -O3:指定最高編譯優化級別,即3
- -fopenmp:啟用OpenMP,適應多處理器環境,更能得到內存帶寬實際最大值。開啟后,程序默認運行線程為CPU線程數
- -DN=2000000:指定測試數組a[]、b[]、c[]的大小(Array size)。該值對測試結果影響較大(5.9版本默認值2000000,。若stream.c為5.10版本,參數名變為-DSTREAM_ARRAY_SIZE,默認值10000000)。注意:必須設置測試數組大小遠大於CPU 最高級緩存(一般為L3 Cache)的大小,否則就是測試CPU緩存的吞吐性能,而非內存吞吐性能。
推薦計算公式:
{最高級緩存X MB}×1024×1024×4.1×CPU路數/8,結果取整數
解釋:由於stream.c源碼推薦設置至少4倍最高級緩存,且STREAM_ARRAY_SIZE為double類型=8 Byte。所以公式為:最高級緩存(單位:Byte)×4.1倍×CPU路數/8
例如:測試機器是雙路CPU,最高級緩存32MB,則計算值為32×1024×1024×4.1×2/8≈34393292
- -DNTIMES=10:執行的次數,並從這些結果中選最優值。
- stream.c:待編譯的源碼文件
- stream:輸出的可執行文件名
其他參數:
- -mtune=native -march=native:針對CPU指令的優化,此處由於編譯機即運行機器。故采用native的優化方法。更多編譯器對CPU的優化參考
- -mcmodel=medium ;當單個Memory Array Size 大於2GB時需要設置此參數
- -DOFFSET=4096 ;數組的偏移,一般可以不定義
Stream使用
使用命令指定運行線程為X:
export OMP_NUM_THREADS=X
在編譯輸出的可執行文件(stream)所在目錄下運行:
./stream
Stream測試結果示例:
附stream.c v5.10源碼中的介紹:
參考: