1、下載下傳安裝Stream
tar -xvf stream.tar

參數說明:
首先看下源碼中對于編譯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
多線程編譯:
gcc -O -mtune=native -march=native -mcmodel=large -fopenmp -DSTREAM_ARRAY_SIZE=100000000 -DNTIMES=30 -DOFFSET=4096 stream.c -o stream.o
多線程測試:./stream.o
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