關于ARM指令
英創公司開發的基于WEC7的工控主板目前包括3種型號:
主板型號 | CPU架構 | 其他重要技術指標 |
ESM6802 | Cortex-A9雙核 | ESMARC主板架構體系,主推產品型號 |
ESM3354 / ESM3352 | Cortex-A8 | ESMARC主板架構體系,主推產品型號 |
EM335x / EM3352 | Cortex-A8 | 成熟產品型號 |
在使用英創的WEC7主板時,用戶需要使用Visual Studio 2008(簡稱VS2008)來開發其應用程序。盡管Cortex-A8和Cortex-A9處理器均支持性能更高的ARMv7指令集,但微軟在VS2008中所仍然使用ARMv4i指令集的通用arm編譯器(編譯器版本號為:15.00.20720)。而A8、A9處理器所帶的矢量浮點處理器(Vector Float-Point Processor)都需要在ARMv7指令下才能正常啟動運行。換句話說,在ARMv4i指令集下,對浮點的處理仍然是采用軟件仿真包來實現,而沒有用到高端ARM處理器自帶的硬件浮點處理器。這對涉及大量浮點處理應用的客戶來說是很遺憾的事。
本文將以ESM3354為測試平臺,介紹在現有VS2008基礎上實現硬件浮點處理的方法。
編譯器及SDK的準備
我們為需要浮點處理的客戶準備了ARMv7編譯工具以及基于ARMv7工具的SDK,具體如下表所示:
ARMv7編譯工具包 | ms-armv7-compiler.tar 編譯器版本 15.01.50304.03 |
ESM335x SDK | ESM335XARMV7SDK.msi |
ESM6802 SDK | ESM6802ARMV7SDK.msi |
客戶需要首先安裝新的AMRv7的SDK,ARMv7的SDK與原來的ARMv4i的SDK是獨立并行的,并不需要卸載原來的SDK。安裝完成后,再把ARMv7編譯器工具包解壓到本地硬盤上,例如D:\ms-armv7-compiler。
建立測試程序1
打開VS2008,建立測試程序3354_armv7_t1,平臺(platform)選擇ESM335XARMV7SDK,用戶可以看到其指令集顯示為armv7:
點擊,選擇Console Application,
最后點擊,進入代碼窗口。以下是測試的完整代碼,客戶可拷貝粘貼到所生成的代碼窗口區域中。
// 3354_armv7_t1.cpp : Defines the entry point for the console application.
//
#include"stdafx.h"
int_tmain(intargc, _TCHAR* argv[])
{
doublef1 = 2.200002;
doublef2 = 2.200001;
doubleans = 1.0;
longiterations = 5 * 1000 * 1000;
DWORDdwStartTick, dwEndTick;
_tprintf(TEXT("Microsoft compiler version: %d\r\n"),_MSC_FULL_VER);
_tprintf(TEXT("ARM instruction set: %d\r\n"),_M_ARM);
if(argc > 1)
{
f1 = _wtof(argv[1]);
}
if(argc > 2)
{
f2 = _wtof(argv[2]);
}
if(argc > 3)
{
iterations = _wtoi(argv[3]) * 1000 * 1000;
}
dwStartTick = GetTickCount();
wprintf(L"f1=%f f2=%f loop=%d starting...%d\r\n", f1, f2, iterations, dwStartTick);
for(inti=0; i
{
ans *= f1;
ans /= f2;
}
dwEndTick = GetTickCount();
wprintf(L"ans = %f %d loop/msec end...%d\r\n", ans, (int)(iterations/(dwEndTick - dwStartTick)), dwEndTick);
return0;
}
設置編譯器路徑
準備好測試程序后,首先需要把ARMv7編譯器加入到VS2008中,具體設置方法是在菜單欄中選擇 Tools -> Options -> Projects and Solutions -> VC++ Directories,然后選擇頁面的Platform欄目中選擇ESM335XARMV7SDK(ARMv7),最后在路徑欄目中添加新路徑如下:
編譯器路徑設置,對一個平臺只需要設置一次。也就是對本機說,當創建其他基于ESM335XARMV7SDK的應用程序時,都不需要再重復設置編譯器路徑了。
設置應用程序編譯鏈接選項
從工具欄點擊Project -> Properties -> C/C++ -> Command Lines,添加ARMv7指令選項以及浮點處理選項:“/QRarch7 /QRfpe- /arch:VFPv3-D32”如下:
各個選項的功能微軟的大致解釋如下:
●/QRarch7// -> ARMv7 Architecture
●/QRfpe-// -> Enable Hardware Floating-Point Targeting (Compact 7)
●/arch:VFPv3-D32// -> 使用VFP內部的32個64位寄存器
由于ARMv7編譯器并不知道VS2008的基本環境庫路徑,也需要通過菜單添加:Project -> Properties -> Linker -> General,在Additional Library Directories欄加入:
“C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\lib\armv4i”
設置的界面為:
設置完成后,就可Build測試程序,并下載至目標板上運行。該測試程序在ESM335x和EM335x兩個系列的主板上均可正常運行:
這里“19455 loop/msec”表示每ms的循環次數,是反應計算能力的主要參數。
測試結果比較
按構造上述測試程序的方法,可方便地構造一個使用VS2008缺省編譯器(ARMv4i)的t1程序,以進行比較。進一步地,我們在t1主循環中增加一行超越函數計算,構成測試程序t2:
for(inti=0; i
{
ans *= f1;
ans /= f2;
ans = cos(ans); //t2新加代碼
}
為了更全面比較測試結果,我們還在Linux版本上運行相同測試程序,進行編譯器的橫向對比。
整個測試的綜合結果如下表所示:
t1 | t2 | |
CL-15.00.20720 (armv4i) | 6858 loop/ms | 644 loop/ms |
CL-15.01.50304.03 (armv7) | 19455 loop/ms | 687 loop/ms |
Improvement | 2.83 (+183%) | 1.07(+7%) |
Gcc-4.4.1+soft (armv7-a) | 1921 loop/ms | 470 loop/ms |
Gcc-4.4.1+vfp (armv7-a) | 13857 loop/ms | 587 loop/ms |
improvement | 7.2 (+620%) | 1.25 (+25%) |
上表的改進欄目中是ARMv7運行速度相對ARMv4i速度的倍數,括號內為提高的百分比。測試程序t1評估的是常規的浮點計算,使能VFP后,是有明顯改進的;而且Linux版本的相對改進更大。但加入超越函數后,VFP的硬件優勢就幾乎全部喪失了。我們理解ARM的VFP與傳統x86的協處理器(Co-processor)在對超越函數的處理上還是差別很大的,基本上還是采用多項式級數來合成的,本來設置VFP的主要目的也是面向數字濾波、圖形處理這類以乘加為主要特色的浮點處理,對數學超越函數的處理確實不在行。
小結
對需要大量使用乘加類型浮點處理的應用,采用本文的方法啟動ARMv7指令及VFP浮點處理器,是能夠大大改善應用程序的性能的。對超越函數的處理,需要轉換成表格方式處理,而規避直接的計算,以保持程序總的處理性能。
微軟在VS2008配置的ARMv4i編譯器,其性能明顯優于Linux平臺中使用的開源GCC編譯器,估計這也是微軟保留這款編譯器的原因之一。關于ARMv7指令相對ARMV4i指令的性能比較,第三方公司已做詳細測試,感興趣的客戶可向英創索取相關文檔。
有需求客戶可向英創索取ARMv7編譯器以及相應的SDK,英創公司的技術支持郵箱為:support@emtronix.com。
點此閱讀第三方測試報告:Building WEC7 application with ARMv7 compiler - TI Benchmark。
-
Linux
+關注
關注
87文章
11508瀏覽量
213568 -
嵌入式主板
+關注
關注
7文章
6100瀏覽量
36264
發布評論請先 登錄
科普|信創是什么?一文讀懂“信息技術應用創新”戰略

ADSP-21371/ADSP-21375面向汽車音頻的32位高性能浮點SHARC處理器技術手冊

迅為3A6000開發板/龍芯3A6000與龍芯3A5000等龍架構處理器軟件兼容
RV1109處理器概述
EE-218:為ADSP-TS201 TigerSHARC處理器編寫高效浮點FFT

迅為3A6000_7A2000開發板龍芯全國產處理器與龍芯 3A5000完全兼容
中科創達榮獲2024年軟件和信息技術服務優秀企業
迅為3A6000_7A2000核心主板龍芯全國產處理器LoongArch架構
盛顯科技:在拼接處理器上配置混合矩陣的步驟是什么?
信創國產化背景下的工控主板發展現狀
龍芯ITX主板GM7-3601搭載龍芯3A5000處理器的工控主板

評論