OK527N-C
CoreMark
獲取CoreMark源碼
首先使用Git克隆倉庫:
git clone https://github.com/eembc/coremark.git
cd coremark
修改Makefile
首先復制文件夾
cp -rf posix ok527
之后修改ok527文件夾下的core_portme.mak文件,將CC修改如下
CC = aarch64-none-linux-gnu-gcc
交叉編譯
make PORT_DIR=ok527
編譯結束后會報錯,但是已經生成了交叉編譯的coremark.exe可執行程序。這是由于架構不同,該交叉編譯的程序并不能在電腦上直接運行。
將文件夾下的coremark.exe復制到板卡上,執行
chmod 777 coremark.exe
./coremark.exe
多核
make PORT_DIR=ok527 XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK -pthread"
Dhrystone(單核性能測試工具)
首先下載源碼(http://www.roylongbottom.org.uk/classic_benchmarks.tar.gz)并解壓
tar -vxf classic_benchmarks.tar.gz
之后新建一個編譯文件夾,復制相關源碼到此,并新建Makefile文件
cd classic_benchmarks
mkdir ./build
cd ./buildcp -rf ../source_code/common_64bit/cpuidc64.c ./
cp -rf ../source_code/common_64bit/cpuidh.h ./
cp -rf ../source_code/dhrystone2/dhry.h ./
cp -rf ../source_code/dhrystone2/dhry_1.c ./
cp -rf ../source_code/dhrystone2/dhry_2.c ./
touch Makefile
將如下內容復制到Makefile文件中并保存
CC=aarch64-none-linux-gnu-gccmain:*.o${CC} -o dhry2_64 *.o${CC} -O2 -o dhry22_64 *.o${CC} -O3 -o dhry23_64 *.o*.o:*.c${CC} -g -c *.cclean:rm -f *.o dhry2_64 dhry22_64 dhry23_64
此外由于source_code/common_64bit/cpuida64.asm代碼并不適配aarch64-none-linux-gnu-as匯編器,所以我們在復制的時候沒有復制此文件,并且需要注釋掉 cpuidc64.c中的_cpuida() 、_calculateMHz() 兩個匯編函數。
最后執行編譯
make clean
make
生成的三個可執行文件分別為dhry2_64(無優化等級)、dhry22_64(優化等級2)、dhry23_64(優化等級3)。這里我們將dhry2_64復制到板卡中并運行,得到的結果如下
Stream
STREAM是一種內存帶寬測試工具,主要用于評估計算機系統的內存子系統性能,特別是其讀寫速度和帶寬。它通過一系列簡單但計算密集型的操作來模擬對連續內存區域的訪問,以此來測量系統的實際內存帶寬性能。
STREAM測試主要提供以下四種指標:
- Copy (復制):測量一個數組中的數據復制到另一個數組的速度。這項測試代表了簡單的數據移動操作,如內存拷貝。
- Scale (尺度變換):測量將數組中的每個元素乘以一個常數的速度。這代表了需要讀取、修改并重新寫回內存的數據操作。
- Add (矢量求和):測量將兩個數組的相應元素相加,并將結果存儲到第三個數組中的速度。這代表了常見的向量加法操作。
- Triad (復合矢量求和):測量將一個數組的元素與另一個數組的元素相加,然后將結果乘以一個常數,并存儲到第三個數組中的速度。這是最復雜的一項測試,因為它涉及讀取、計算和寫回三個數組的操作。
首先下載源碼(http://www.roylongbottom.org.uk/classic_benchmarks.tar.gz),并在同一目錄下新建Makefile,并將以下內容復制進去
CC=aarch64-none-linux-gnu-gccmain:${CC} stream.c -o streamclean:rm -f *.o stream
編譯執行后得到可執行文件stream,將其復制到板卡上并執行
此外,在編譯程序時還可以啟用-fopenmp選項,它會告訴編譯器生成能利用多線程的代碼,從而可以并行地執行內存讀取和寫入操作,從而更好地模擬真實應用的負載情況,因為現代應用程序往往利用了多核架構的并行處理能力。因此,啟用-fopenmp可以得到更接近實際工作負載下的內存帶寬測量值。啟用-fopenmp選項后的測試結果如下:
可以看到板卡的內存性能也很不錯。
之后我們修改Makefile來查看不同編譯優化等級的影響,
CC=aarch64-none-linux-gnu-gccmain:${CC} stream.c -fopenmp -o stream${CC} stream.c -fopenmp -O1 -o stream1${CC} stream.c -fopenmp -O2 -o stream2${CC} stream.c -fopenmp -O3 -o stream3clean:rm -f *.o stream
交叉編譯后分別得到無優化、優化等級1、優化等級2、優化等級3的程序,將其下載到板卡中進行測試。
-
無優化
-
優化等級1
-
優化等級2
-
優化等級3
可以看到當為優化等級1時效果最好,O2和O3都會導致部分指標有一定的衰減。
ELFBoard
下面以搭載i.MX6ULL芯片的ELFBoard為例進行單核性能比對測試。
coremark
Dhrystone
可以看到在單核性能上T527N就比i.MX6ULL大約高了三倍。