
發(fā)布
注冊
/
登錄代碼移植
關(guān)注創(chuàng)建者:鄭雨 創(chuàng)建時間:2015-07-24

代碼移植的實例教程
它不是簡單的代碼移植,而是根據(jù)神威超算的架構(gòu)與特性,特別為OpenFOAM量身定制了一整套的優(yōu)化方案。神威與OpenFOAM二者強強聯(lián)合,真正實現(xiàn)了1+1>2的效果。
swOpenFOAM優(yōu)化之道
OpenFOAM求解CFD問題主要包括“預(yù)處理-求解-后處理”三個步驟,每個步驟的關(guān)鍵流程與面臨的問題如下圖所示。為了讓swOpenFOAM充分發(fā)揮神威的性能優(yōu)勢,需要根據(jù)神威處理器的特點——異構(gòu)眾核,詳細(xì)定制代碼移植與優(yōu)化方案。同時,OpenFOAM求解過程中的三個關(guān)鍵環(huán)節(jié):并行剖分、方程離散與方程求解,其對應(yīng)的負(fù)載均衡、數(shù)據(jù)訪存和代數(shù)求解算法選擇等問題又與處理器架構(gòu)息息相關(guān)。綜上所述,這“三位一體”的問題共同構(gòu)成了swOpenFOAM所面臨的最大挑戰(zhàn)。
OpenFOAM在神威上的求解流程與關(guān)鍵性能瓶頸
01
基于處理器架構(gòu)的優(yōu)化
神威·太湖之光使用中國自主研制的“申威 26010”處理器,其特點是片上融合的異構(gòu)眾核架構(gòu)。每塊處理器包含四個“核組”,一個核組中集成了一個主核與64個從核。一個“申威 26010”處理器總共集成了260個運算核心,因此利用好從核是發(fā)揮神威性能的關(guān)鍵。
“申威 26010”異構(gòu)眾核處理器架構(gòu)圖
與處理器架構(gòu)相關(guān)的問題是數(shù)據(jù)訪存。高性能處理器內(nèi)存帶寬的增長遠(yuǎn)滯后于其浮點性能的提升[1](如下圖所示),這一性能瓶頸對于“申威 26010”處理器顯得更為突出。同時,由于一些圖計算或稀疏矩陣特殊的數(shù)據(jù)結(jié)構(gòu),致使其迭代運算中存在內(nèi)存訪問不連續(xù)的問題。
展開 代碼移植:
將Matlab編輯器中的仿真代碼移植到Matlab的APP Designer中,以創(chuàng)建圖形用戶界面(GUI),使得系統(tǒng)更易于操作和使用。
用戶界面設(shè)計:
設(shè)計直觀易用的界面,包括必要的輸入控件、按鈕、文本框和顯示區(qū)域,使用戶能夠輕松地加載圖像、設(shè)置參數(shù)并啟動讀數(shù)過程。
功能實現(xiàn)與封裝:
利用APP Designer的回調(diào)函數(shù),將圖像預(yù)處理、表盤提取、指針定位、刻度線識別和示數(shù)計算等關(guān)鍵功能封裝成獨立的模塊。
系統(tǒng)測試:
對每個功能模塊進(jìn)行單獨測試,確保它們在集成到用戶界面后能夠正常工作。測試包括圖像加載、參數(shù)設(shè)置、一鍵識別等功能。
性能驗證:
通過實際圖像的測試,驗證系統(tǒng)的識別準(zhǔn)確性和響應(yīng)速度。比較系統(tǒng)讀數(shù)結(jié)果與人工讀數(shù),確保誤差在可接受范圍內(nèi)。
用戶交互優(yōu)化:
根據(jù)測試反饋,調(diào)整用戶界面布局和交互邏輯,提高用戶體驗。確保系統(tǒng)提示信息清晰,操作流程直觀。
打包與部署:
在APP Designer中將應(yīng)用程序打包成可執(zhí)行文件(.exe),以便在不同平臺上部署和使用,無需用戶安裝Matlab環(huán)境。
擴展功能測試:
除了一鍵識別功能外,還提供了一系列輔助功能,如圖像預(yù)處理、表盤提取、指針識別等單獨步驟的測試,以便用戶在識別失敗時進(jìn)行問題診斷。
實驗結(jié)果分析:
分析實驗結(jié)果,評估系統(tǒng)的整體性能,包括識別準(zhǔn)確率、處理速度和用戶滿意度,并根據(jù)結(jié)果進(jìn)行必要的調(diào)整和優(yōu)化。
系統(tǒng)開發(fā)與實驗階段是確保研究成果能夠轉(zhuǎn)化為實際可用技術(shù)的重要環(huán)節(jié),通過這一階段的工作,研究者能夠提供一個成熟的產(chǎn)品,為工業(yè)自動化和智能化做出貢獻(xiàn)。
展開 但創(chuàng)建POSIX就是為了可移植性,所以它并不只適用于UNIX系統(tǒng),非UNIX系統(tǒng)也可以符合POSIX標(biāo)準(zhǔn)。所以像Linux、macOS、QNX和Android這些我們熟悉的操作系統(tǒng),都是遵循POSIX的。而像Windows操作系統(tǒng),本來是獨立于UNIX體系的,但隨著POSIX市場和用戶的擴大,也不得不開發(fā)兼容POSIX的接口和子系統(tǒng)。比如Windows 10里就有支持POSIX的Linux子系統(tǒng)(WSL),方便一些UNIX程序移植到Windows上。
POSIX內(nèi)容簡介
POSIX定義了一個標(biāo)準(zhǔn)的操作系統(tǒng)界面和環(huán)境,包括一個命令解釋器(也就是"Shell"),以及常見的實用程序,以支持源代碼層面的應(yīng)用可移植。POSIX是給應(yīng)用程序開發(fā)人員和系統(tǒng)實施者使用的,包括四個主要部分:
1.基礎(chǔ)定義。
這部分為POSIX提供通用的定義,包括關(guān)于術(shù)語、概念、語法、服務(wù)功能、C語言頭的定義和命令行的信息。
2.系統(tǒng)接口。
這部分提供與接口有關(guān)的術(shù)語和概念細(xì)節(jié),并定義了訪問符合POSIX的系統(tǒng)的應(yīng)用程序可用的功能接口。系統(tǒng)服務(wù)功能和子程序的定義、C語言編程語言的特定系統(tǒng)服務(wù)、功能問題,包括可移植性、錯誤處理和錯誤恢復(fù),都包含在這部分。
3.Shell和可用工具。
這部分描述了命令解釋服務(wù)的標(biāo)準(zhǔn)源代碼級接口,也就是著名的Shell。以及Shell中可用的命令和工具。
4.理論依據(jù)。
這部分主要描述POSIX內(nèi)容的歷史信息,以及為什么增加或刪除某些功能的相應(yīng)理由。
POSIX并沒有規(guī)定具體應(yīng)用程序或操作系統(tǒng)的開發(fā),只是定義了它們之間的接口規(guī)范。符合POSIX標(biāo)準(zhǔn)的應(yīng)用程序源代碼應(yīng)該能夠在許多系統(tǒng)中運行,因為該標(biāo)準(zhǔn)是在源代碼層面上定義的。然而POSIX并不保證任何對象或二進(jìn)制代碼級別的可移植性。
展開 再再再直白一點:
各個廠家在五花八門的硬件上隨意開發(fā),想怎么寫就怎么寫,怎么爽怎么來,導(dǎo)致開發(fā)一時爽,維護火葬場,如果底層硬件換掉了,上面的代碼基本就要全部推倒重來,而且不同廠家之間的代碼移植性也幾乎沒有,各個廠家和工程師都很頭大,于是AUTOSAR應(yīng)運而生。AUTOSAR將各個硬件的底層接口做了封裝,以后如果換硬件,只需要配置一下AUTOSAR,告訴它我換硬件了,趕緊給我適配就可以了,上層代碼完全不需要改動就可以使用。從開發(fā)的角度來講,提高了代碼的復(fù)用性,降低了代碼的復(fù)雜度,提高了代碼的可維護性。
2、什么是網(wǎng)絡(luò)管理?
網(wǎng)絡(luò)管理的目的是使網(wǎng)絡(luò)中的ECU節(jié)點有序的睡眠和喚醒。在沒有通信需求的時候睡眠,在需要通信的時候喚醒,可以節(jié)約汽車電池的電量。
3、什么是CAN總線?
這個CSDN和知乎都有很多的介紹,這里就不贅述了。
4、CAN總線的AUTOSAR網(wǎng)絡(luò)管理報文(以下簡稱NM報文)長啥樣?
首先要明確一點,NM報文就是CAN報文。NM報文符合CAN報文的格式,由幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場、幀結(jié)尾組成。
一般廠家在設(shè)計的時候會規(guī)定好NM報文的ID范圍。
舉個例子:規(guī)定標(biāo)識符在0x500到0x5FF范圍為NM報文。當(dāng)在CANoe中抓取到此ID范圍內(nèi)的報文,那就是NM報文。
展開 ,對開發(fā)團隊進(jìn)行技術(shù)指導(dǎo)和培訓(xùn)
4.負(fù)責(zé)解決核心技術(shù)難題,并能識別風(fēng)險,提供性能優(yōu)化方案等
5.解決各類潛在系統(tǒng)技術(shù)風(fēng)險,加固系統(tǒng),保證系統(tǒng)的安全、穩(wěn)定、快速運行
任職要求:
1.計算機、數(shù)學(xué)、力學(xué)、機械、化機、土木水利等相關(guān)專業(yè),碩士及以上學(xué)歷
2.具有5年及以上C++開發(fā)經(jīng)驗,熟悉C++開發(fā)標(biāo)準(zhǔn)
3.具有軟件架構(gòu)開發(fā)經(jīng)驗和項目經(jīng)驗,獨立完成過中大型軟件架構(gòu)設(shè)計者優(yōu)先考慮
4.對內(nèi)存分配和管理、STL等具有較深的理解,熟悉數(shù)據(jù)結(jié)構(gòu)與編譯原理
5.掌握軟件架構(gòu)設(shè)計的原理,熟悉常用軟件架構(gòu)模式及開發(fā)原則,對大型開源CAx軟件有深入研究者優(yōu)先考慮
6.了解Boost等開發(fā)框架,熟悉Python、Fortan開發(fā)語言
7.熟悉Windows、Linux操作系統(tǒng)基本原理,具有跨平臺開發(fā)經(jīng)驗,熟悉代碼移植與交叉編譯
C++開發(fā)高級工程師
崗位職責(zé):
1.參與CAE前后處理軟件、數(shù)據(jù)庫與測試工具等模塊的開發(fā)與優(yōu)化
2.根據(jù)設(shè)計文檔和技術(shù)規(guī)范,完成模塊設(shè)計、編碼、單元測試及文檔編寫
3.協(xié)助實現(xiàn)界面、數(shù)據(jù)管理、圖形交互、結(jié)果可視化等功能
4.參與軟件缺陷修復(fù)、代碼重構(gòu)、版本維護及系統(tǒng)兼容性處理
5.協(xié)助架構(gòu)師推進(jìn)平臺組件化、模塊化重構(gòu)
6.支持產(chǎn)品上線前的集成測試、性能分析與系統(tǒng)優(yōu)化
任職要求:
1.計算機、軟件工程、數(shù)學(xué)、力學(xué)、機械、化機、土木水利等相關(guān)專業(yè),碩士及以上學(xué)歷
2.具有5年及以上C++開發(fā)經(jīng)驗
3.熟練掌握C++、Python語言,理解常用開發(fā)標(biāo)準(zhǔn),具有良好編碼習(xí)慣
4.了解Qt、Boost、OpenMP、MPI等開發(fā)框架,具有Docker等容器技術(shù)的使用經(jīng)驗
5.具有跨平臺(Windows/Linux)開發(fā)經(jīng)驗,理解代碼移植、依賴管理、動態(tài)庫/靜態(tài)庫機制
6
展開 
代碼移植的相關(guān)專題、標(biāo)簽、搜索
代碼移植的最新內(nèi)容
性能分析與系統(tǒng)優(yōu)化
任職要求:
1.計算機、軟件工程、數(shù)學(xué)、力學(xué)、機械、化機、土木水利等相關(guān)專業(yè),碩士及以上學(xué)歷
2.具有5年及以上C++開發(fā)經(jīng)驗
3.熟練掌握C++、Python語言,理解常用開發(fā)標(biāo)準(zhǔn),具有良好編碼習(xí)慣
4.了解Qt、Boost、OpenMP、MPI等開發(fā)框架,具有Docker等容器技術(shù)的使用經(jīng)驗
5.具有跨平臺(Windows/Linux)開發(fā)經(jīng)驗,理解代碼移植
代碼移植:
將Matlab編輯器中的仿真代碼移植到Matlab的APP Designer中,以創(chuàng)建圖形用戶界面(GUI),使得系統(tǒng)更易于操作和使用。
用戶界面設(shè)計:
設(shè)計直觀易用的界面,包括必要的輸入控件、按鈕、文本框和顯示區(qū)域,使用戶能夠輕松地加載圖像、設(shè)置參數(shù)并啟動讀數(shù)過程。
Klocwork能夠較為全面而準(zhǔn)確地發(fā)現(xiàn)軟件中潛在的問題,例如:可發(fā)現(xiàn)代碼中的質(zhì)量缺陷和安全漏洞;發(fā)現(xiàn)軟件中運行時錯誤及缺陷以及不合規(guī)范代碼;發(fā)現(xiàn)危險、過于復(fù)雜和不可移植代碼等問題。目前已廣泛應(yīng)用于汽車電子商務(wù)、醫(yī)療器械、生產(chǎn)和通信等領(lǐng)域。
同樣,雖然MISRA是一套非強制性標(biāo)準(zhǔn),但由于它有助于關(guān)鍵安保系統(tǒng)中安全、可靠和可移植的代碼開發(fā),所以它仍然被許多行業(yè)廣泛采用。
汽車軟件測試最佳實踐示例
雖然產(chǎn)品在車輛中的功能(安全關(guān)鍵、機械、美學(xué)等方面)會影響所需的安全測試水平,但無論產(chǎn)品如何,軟件測試的最佳實踐始終如一。
在實際情況中,您需要考慮的是如何選擇適合某項測試的工具。
(Sonic Jet 橫流相互作用)
除了在新框架的開發(fā)方面工作外,我還負(fù)責(zé)將源代碼移植到 HPC,這是一項我喜歡的工作,并且從編程中學(xué)到了很多東西。在這里,我使用了多個系統(tǒng)和編程模型:CUDA、OpenMP、OpenACC、MPI 以及它們的組合。我認(rèn)為所有的經(jīng)歷塑造了我現(xiàn)在的工程師/科學(xué)家類型。我的興趣從計算機科學(xué)到數(shù)值分析不等。
然而POSIX并不保證任何對象或二進(jìn)制代碼級別的可移植性。因此,即使在具有相同硬件和操作系統(tǒng)的類似機器上,二進(jìn)制可執(zhí)行文件也可能無法運行。
POSIX與AUTOSAR
在討論POSIX和AUTOSAR的關(guān)系之前,我們得先說說POSIX 1003.13。
它不是簡單的代碼移植,而是根據(jù)神威超算的架構(gòu)與特性,特別為OpenFOAM量身定制了一整套的優(yōu)化方案。神威與OpenFOAM二者強強聯(lián)合,真正實現(xiàn)了1+1>2的效果。
再再再直白一點:
各個廠家在五花八門的硬件上隨意開發(fā),想怎么寫就怎么寫,怎么爽怎么來,導(dǎo)致開發(fā)一時爽,維護火葬場,如果底層硬件換掉了,上面的代碼基本就要全部推倒重來,而且不同廠家之間的代碼移植性也幾乎沒有,各個廠家和工程師都很頭大,于是AUTOSAR應(yīng)運而生。
Klocwork能夠準(zhǔn)確地發(fā)現(xiàn)軟件中潛在的問題,例如:可發(fā)現(xiàn)代碼中的質(zhì)量缺陷和安全漏洞;發(fā)現(xiàn)軟件中運行時錯誤及缺陷以及不合規(guī)范代碼;發(fā)現(xiàn)危險、過于復(fù)雜和不可移植代碼等問題。目前已廣泛應(yīng)用于汽車、電子商務(wù)、醫(yī)療器械、生產(chǎn)和通信等領(lǐng)域。
本文以FreeRTOS為例,如果我們自己在官網(wǎng)下載源碼然后手動移植代碼就是使用FreeRTOS的原生API接口,如果我們使用STM32CubeMX來配置工程就是使用的CMSIS-API接口,是對FreeRTOS的原生API接口進(jìn)行了封裝。
一、RTOS為什么要搞兩種API?