天天看點

stream測試記憶體性能

1、下載下傳安裝Stream

tar -xvf stream.tar

stream測試記憶體性能

參數說明:

首先看下源碼中對于編譯stream.c的參數介紹:

#ifdef _OPENMP 定義開啟多處理器運作環境,

extern int omp_get_num_threads();

#endif

#ifndef STREAM_ARRAY_SIZE 定義計算的數組大小(成員個數)

# define STREAM_ARRAY_SIZE 45000000

#endif

#ifdef NTIMES 定義值非法時,若定義計算次數,10

#if NTIMES<=1

# define NTIMES 10

#endif

#endif

#ifndef NTIMES 若定義計算次數,10

# define NTIMES 10

#endif

#ifndef OFFSET 定義數組偏移量

# define OFFSET 0

#endif

#ifndef STREAM_TYPE 定義數組為雙精度,64bit,8Bytes

#define STREAM_TYPE double

#endif

以上參數可以在執行前編譯指定具體值

1. -mtune=native -march=native   \\針對CPU指令的優化,由于測試編譯機即運作機器,故采用native的優化方法

2. -O3                                           \\優化級别

3. -mcmodel=medium                  \\當單個Memory Array Size 大于2GB時需要設定此參數

4. -fopenmp                                 \\适應多處理器環境;開啟後,程式預設線程為CPU線程數,也可以運作時也可以動态指定運作的程序數 。例如:export OMP_NUM_THREADS=12 #12為自定義的要使用的處理器數

5. -DSTREAM_ARRAY_SIZE     \\計算方法參考stream.c中的說明 例如本環境中查詢cpu資料 L3緩存 8MB  其值為 8MB*4*2*1000*1000/8 = 8millions (此值為最小值,可以适當大于此值,增大array size會增加測試時間)注意 double 64bit= 8byte

6. -DNTIMES                              \\執行次數,并從所有結果中取最優

7. -DOFFSET=4096                   \\數組的偏移,一般可以不設定

 2、使用stream測試記憶體帶寬

單線程編譯:

gcc -O -mtune=native -march=native -mcmodel=large -DSTREAM_ARRAY_SIZE=100000000  -DNTIME=30 -DOFFSET=4096  stream.c -o stream.o

單線程測試:./stream.o

stream測試記憶體性能

 多線程編譯:

gcc -O -mtune=native -march=native -mcmodel=large -fopenmp -DSTREAM_ARRAY_SIZE=100000000 -DNTIMES=30 -DOFFSET=4096 stream.c -o stream.o

多線程測試:./stream.o

stream測試記憶體性能

3、測試記憶體延遲

下載下傳安裝英特爾MLC工具:

(在新型的Intel處理器上精确測試記憶體延遲是非常困難的,因為它有複雜的硬體預取器。Intel MLC在測試延遲時會自動禁用這些預取器,并且在測試完成後自動恢複預取器原狀态。預取器控制是通過修改MSR實作(Disclosure of H/W prefetcher control on some Intel processors),在Linux上需要root權限。Windows平台,提供了簽名的驅動用于通路MSR)

下載下傳位址:

https://software.intel.com/content/www/us/en/develop/articles/intelr-memory-latency-checker.html

tar -zxvf mlc_xxx.tgz -C mlc

進入mlc / Linux目錄下測試

指令行參數:

mlc --latency_matrix

      列印本地和跨插槽記憶體延遲矩陣

mlc --idle_latency

      列印平台的空閑記憶體延遲

mlc --loaded_latency

      列印平台的加載記憶體延遲

mlc --c2c_latency

      列印平台的緩存到緩存傳輸延遲

mlc -e

      不要修改預取器設定

參考:

https://software.intel.com/content/www/us/en/develop/articles/intelr-memory-latency-checker.html