久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 在DSP處理器上并行實現ATR算法

在DSP處理器上并行實現ATR算法

作者: 時間:2010-01-08 來源:網絡 收藏

③數據的定標

由于TMS320C62x是定點系列芯片,不支持浮點操作。在程序編寫過程中,應當盡量采用定點的數據結構。而實際處理的數據通常都是浮點的,所以需要把浮點數據通過定標轉化為整型數據處理,提高程序的處理速度。數據的定標是十分關鍵的步驟,既要使數據處理精度滿足性能要求,又要防止在數據處理過程中出現溢出。

(2)優化C代碼

優化C代碼包括向編譯器指明不相關的指令、循環展開、循環合并、使用內聯函數、使用字訪問短整型數據和軟件流水等方法。

①向編譯器指明不相關的指令

為使指令操作,編譯器必須確定指令間的相關性,只有不相關的指令才可以執行。如果編譯器不能確定兩條指令是不相關的,則認為是相關的,安排它們串行招待。用戶可通過如下方法指明相關的指令:

?關鍵字const可以指定一個目標,const表示一個變量或者一個變量的存儲單元保持不變,使用const可以提高代碼的性能和適應性。

?一起使用-pm選項和-03選項可以確定程序優先級。在程序優先級中,所有源文件都被編譯成一個模塊,從而使編譯器更有效地消除相關性。

?使用-mt選項向編譯器說明在代碼中不存在存儲器相關性,即允許編譯器在無存儲器相關性的假設下進行優化。

②循環展開

循環展開就是把循環計數小的循環展開,成為非循環形式的串行程序,或者把循環計數大的循環部分展開,減少循環迭代次數,增加單個循環內的代碼,使得循環內的操作可以均勻分布在各個功能單元上,保持的各個功能單元滿負荷運行。

③循環合并

如果兩個循環計數差不多、循環執行互不相同的操作,可以把它們合并在一起組成一個循不。當兩個循環的負荷都不滿時,這是非常有用的。

④使用內聯函數

TMS320C62x編譯器提供的內聯函數是直接映射為內聯指令的特殊函數,內聯函數的代碼高效、代碼長度短。用戶可以使用內聯函數優化C代碼。

⑤使用字節訪問短整型數據

內聯函數中有些指令是對存儲在32位寄存器的高16位和低16位字段進行操作的。當有大量短整型數據進行操作時,可以使用字(整型數)一次訪問兩個短整型數據。然后使用內聯函數對這些數據進行操作,從而減少對內存的訪問。

⑥軟件流水

軟件流水是用來安排循環指令,使這個循環多次迭代并行執行的一種技術。在編譯時使用-o2和-o3選項,編譯器可對循環代碼軟件流水;使用-o3和-pm選項,使優化器訪問整個程序,了解循環次數;使用_nassert內聯函數,防止冗余循環產生;使用投機執行(_mh選項)消除軟件注流水循環的排空,從而減少代碼尺寸。

在嵌套循環中,編譯器僅對最里面的循環執行軟件流水,因此對招待周期很少的內循環作循環展開,外循環進行軟件流水,這樣可以改進C代碼并行執行的性能。使用軟件流水還應當注意:盡管軟件流水循環可以包含內聯函數,但是不能包含函數調用;在循環中不可以有條件終止指令;在循環體中不可以修改循環控制變量。

(3)編寫線性匯編代碼

編寫線性匯編代碼是并行軟件開發流程的第三個階段。了提高并行軟件代碼的性能,對影響并行程序速度的關鍵C代碼可以用線性編重新編寫。編寫線性匯編代碼不需要指明使用的寄存器、指令的并行與否、指令的延遲周期和指令使用的功能單元,匯編優化器會根據情況確定這些住處。優化線性匯編代碼的方法包括:為線性匯編指令指定功能單元,使得最后的匯編指令并行執行;使用字訪問短整型數據;使用軟件流水對循環進行優化。編寫線性匯編代碼的工作量非常大,需要很長的開發周期,而且開發后的匯編代碼不能像C代碼那樣移植在其它的平臺上。

應用上述并行程序開發方法,在TMS320C6201 EVM板上了寬帶毫米波雷達目標時延神經網絡識別。經過實際測試,并行算法程序執行時間為0.850ms,滿足了目標識別算法的實時性需求。


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉