<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ADSP2106x中并行處理指令的應用技巧

ADSP2106x中并行處理指令的應用技巧

作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:A2106x是AD公司推出的一款性能優(yōu)秀的高速處理芯片,具有多個(gè)并行的內部處理單元和豐富的并行指令,本文主要介紹該芯片中并行運算處理指令的應用技巧。

關(guān)鍵詞:DSP 并行處理指令 ADSP2106x

本文引用地址:http://dyxdggzs.com/article/242359.htm

引言

根據處理器芯片的指令及其實(shí)現形式,我們可以把處理器芯片分為復雜指令系統(CISC)和精簡(jiǎn)指令系統(RISC),前者追求單條指令的強大功能以簡(jiǎn)化編程;后者強調指令的簡(jiǎn)化以提高硬件效率。由于RISC具有指令長(cháng)度一致、單周期執行時(shí)間、易于并行和流水線(xiàn)處理等優(yōu)點(diǎn),絕大多數的DSP處理芯片都采用了RISC。另外,根據計算機的存儲器結構及其總線(xiàn)連接形式,計算機系統可以被分為馮諾依曼結構和哈佛結構,前者共用數據存儲空間和程序存儲空間,共用存儲器總線(xiàn);后者具有分離的數據和程序空間及分離的訪(fǎng)問(wèn)總線(xiàn)。由于哈佛結構在指令執行時(shí),取指和取數可以并行,因此具有更高的執行效率,所以大多數的DSP芯片都采用了哈佛結構。

ADSP2106x就是一款采用超級哈佛結構和RISC的DSP處理芯片,其強大的浮點(diǎn)、定點(diǎn)運算功能和大容量的片內存儲器,使其可以勝任苛刻的實(shí)時(shí)信號處理任務(wù);而它豐富的外部接口和10個(gè)通道的DMA可以使所處理數據的暢通無(wú)阻[1];再加上片內的仲裁邏輯,6個(gè)ADSP2106x和一個(gè)主機可以很容易連在一起構成一個(gè)并行處理系統。利用ADSP2106x可以開(kāi)發(fā)出功能很強的信號處理系統[2]。

雖然ADSP2106x芯片本身提供了優(yōu)異的性能,但該性能的發(fā)揮離不開(kāi)軟件編程的支持。比如,ADSP2106x的峰值運算速度可達120MFLOPS(主頻40MHz),即在一個(gè)時(shí)鐘周期內可以完成一次乘法、一次加法和一次減法,但這三個(gè)并行運算指令是需要合理安排才能實(shí)現的。另外,由于芯片內部采用了超級哈佛結構,因此可以在一定條件下同時(shí)存取兩個(gè)數據,但這也需要合理安排數據在數據存儲器和程序存儲器中的放置,才能使并行的存取指令有效。

本文主要介紹ADSP2106x中并行指令的一些應用技巧,重點(diǎn)針對并行運算指令和數據存取指令。通過(guò)這些技巧的應用,可以提高編程效率,充分發(fā)揮硬件潛力,同時(shí)對ADSP2106x的內部結構有更為深入的了解。

ADSP2106x中的運算處理單元

ADSP2106x中的核心處理部分包含了三個(gè)運算單元:ALU、乘法器和移位器,它們與寄存器組間的連接關(guān)系如圖1所示[3]。三個(gè)運算單元的功能如下:

(1)ALU單元:定點(diǎn)、浮點(diǎn)加減法和求平均;邏輯運算;求絕對值、最大值、最小值、限幅、比較;定點(diǎn)-->浮點(diǎn)轉換。

(2)乘法器:浮點(diǎn)乘法;定點(diǎn)乘法及乘法累加。

(3)移位器:移位操作;位操作;位場(chǎng)(bit field)提取和存儲。

ADSP2106x中三個(gè)運算處理單元的數據通道只與寄存器組相連,而不能直接從存儲器中存取操作數,這是典型的RISC結構,這種結構往往需要大量的寄存器來(lái)存儲和交換中間結果,ADSP2106x中具有32個(gè)寄存器,其中16個(gè)工作于前臺,16個(gè)工作于后臺。乘法器從兩個(gè)寄存器輸入操作數,把結果存入另一個(gè)寄存器;移位器從3個(gè)寄存器輸入數據,把一個(gè)結果存入另一個(gè)寄存器;ALU從兩個(gè)寄存器輸入操作數,把兩個(gè)運算結果分別存入另兩個(gè)寄存器。

寄存器可以在一個(gè)時(shí)鐘周期內從數據存儲器和程序存儲器中各存取1個(gè)數據,這正是ADSP2106x超級哈佛結構的優(yōu)勢。另外,運算單元的運算與寄存器的存取可以并行不悖,但在編程時(shí),這種并行往往伴隨一個(gè)流水線(xiàn)的過(guò)程。

ADSP2106x中的乘法器和ALU還具有并行運算的能力;在一個(gè)時(shí)鐘周期內,乘法器可以完成一次乘法,ALU可以同時(shí)完成一次加法和一次減法,這使ADSP2106x在40MHz的主頻下達到了120MFLOPS峰值運算速度。

下面針對這種并行運算來(lái)考慮軟件編程時(shí)應注意的問(wèn)題。

并行運算指令的基本格式

ADSP2106x中并行運算指令的基本格式如下圖2,這里我們以浮點(diǎn)運算為例,如果是定點(diǎn)運算,只需把所有的前綴“F”換為“R”即可。

并行指令中各操作的順序必須符合圖中的要求,并以逗號隔開(kāi),否則編譯時(shí)會(huì )出錯。

DM地址產(chǎn)生寄存器的范圍為0~7, PM地址產(chǎn)生寄存器的范圍為8~15;即

I0≤ Ia ≤ I7, M0≤ Mb ≤ M7; I8≤ Ic≤ I15, M8≤ Md ≤ M15。并且很重要的是:DM(Ia,Mb)實(shí)際指向的內存地址范圍必須在數據存儲器中,對于A(yíng)DSP21060,在32位數據長(cháng)度下,其數據存儲器的地址范圍為0x30000~0x3FFFF; PM(Ic,Md)實(shí)際指向的內存地址范圍也必須在數據存儲器中。否則雖然編譯時(shí)能通過(guò),但運行時(shí)達不到并行的效果,而且很可能出錯,此種出錯具有一定的不確定性,在程序調試時(shí)不易發(fā)現,潛在的危害很大。

在乘法器和ALU并行時(shí),對它們從寄存器中獲得操作數有嚴格的要求。16個(gè)寄存器被分成4組,F0~F3為第一組,F4~F7為第二組,F8~F11為第三組,F12~F15為第四組。當乘法器和ALU運算并行時(shí),乘法器的兩個(gè)操作數必須分別取自于第一組和第二組;ALU的兩個(gè)操作數必須分別取自于第三組和第四組。

在上面并行處理中,任一寄存器都可以既被讀又被寫(xiě);在指令執行時(shí)遵循先讀后寫(xiě)的原則,即在前半個(gè)時(shí)鐘周期里數據從某個(gè)寄存器中被讀出,在后半個(gè)時(shí)鐘周期里運算結果又被回寫(xiě)到該寄存器中。對這一點(diǎn)的深刻理解有助于在編程時(shí)采用流水線(xiàn)的步驟。

并行處理時(shí)的流水線(xiàn)步驟

在采用ADSP2106x并行指令編程時(shí),由于數據在內存到運算單元之間的流通必須以寄存器為中介,因此編程時(shí)需要采用流水線(xiàn)的步驟。我們以下面例子為通用格式來(lái)表示該流水線(xiàn)步驟。

假設內存中有N個(gè)數據:xn, 0≤n≤N-1;對其經(jīng)過(guò)某種運算處理后,得到N個(gè)處理結果:yn,0≤n≤N-1,并把yn寫(xiě)回內存。如果我們不采用并行處理,則處理步驟如下:

For n=0 to N-1

Fx ← 內存(xn);

Fy = 運算(Fx);

Fy → 內存(yn);

End

上述處理共需要3*N個(gè)時(shí)鐘周期(不考慮循環(huán)的初始化)。如果我們采用下面的并行處理,且把數據從內存?寄存器?運算單元?寄存器?內存的流通步驟進(jìn)行下面的流水線(xiàn)化,

Fx ← 內存(x0);

Fy = 運算(Fx), Fx ← 內存(x1); /*進(jìn)入循環(huán)的準備操作 */

For n=2 to N-1

Fy = 運算(Fx), Fx ← 內存(xn), Fy → 內存(yn); /*并行處理循環(huán)體 */

End

Fy = 運算(Fx), Fy → 內存(yN-2);

Fy ? 內存(yN-1); /*退出循環(huán)后的回寫(xiě)操作 */

則總處理時(shí)間縮短為N+2個(gè)時(shí)鐘周期。此時(shí),為了使循環(huán)體中并行指令能夠實(shí)現,需要在進(jìn)入循環(huán)體之前完成數據預取的準備操作,在循環(huán)體退出后完成運算結果的回寫(xiě)操作;同時(shí)要求xn和yn分處于程序存儲器和數據存儲器中。

該例子雖然簡(jiǎn)單,但基本上表達了并行處理時(shí)的通用流水線(xiàn)步驟。下面部分,我們將以?xún)蓚€(gè)具體的例子來(lái)說(shuō)明并行處理指令的應用。

兩個(gè)實(shí)例

實(shí)例1為求兩個(gè)數組內積。設xn, yn, 0≤n≤N-1為兩個(gè)數組,它們的內積定義為:。為了在運算中能夠同時(shí)獲得xn和yn,我們需要把xn和yn分別安排在程序存儲器和數據存儲器中,經(jīng)過(guò)運算后,內積結果在寄存器f8中。

f8=0; /*對結果寄存器清零 */

i0=x; m0=1; /*把數組xn的首地址賦給i0 */

i8=y; m8=1; /*把數組yn的首地址賦給i8 */

f0=dm(i0,m0), f4=pm(i8,m8);

f12=f0*f4, f0=dm(i0,m0), f4=pm(i8,m8); /*為進(jìn)入循環(huán)作準備*/

lcntr=N-1, do loop until lce;

loop: f12=f0*f4, f8=f8+f12, f0=dm(i0,m0), f4=pm(i8,m8); /*并行處理循環(huán)體*/

f12=f0*f4, f8=f8+f12;

f8=f8+f12; /*退出循環(huán)的殘余操作,內積結果在f8中 */

第二個(gè)例子是復數乘法運算,一次復數乘法需要4次實(shí)數乘法、一次實(shí)數加法和一次實(shí)數減法,因此至少需要四條指令才能完成一次復乘法,在這四條指令中,還要完成四個(gè)操作數的讀入和兩個(gè)結果的回寫(xiě)。這里,我們假設有兩個(gè)復數組:xn=xrn+j*xin與yn=yrn+j*yin,0(n(N-1;二者相乘后得到zn=zrn+j*zin=(xrn*yrn-xin*yin)+j*(xrn*yin+xin*yrn),0(n(N-1。xr、yr及zi被安排在數據存儲器中,xi、yi及zr被安排在程序存儲器中。具體程序如下,

i0=xr; i1=yr; i3=zi; i8=xi; i9=yi; i10=zr; m0=1; m8=1; /*對地址產(chǎn)生寄存器賦初值 */

f0=dm(i0,m0), f4=pm(i9,m8); /* f0= xr0, f4= yi0*/

f5=dm(i1,m0), f1=pm(i8,m8); /* f5=yr0, f1=xi0 */

f8=f0*f5; /* f8= xr0* yr0 */

f12=f1*f4; /* f12= xi0* yi0 */

f9=f0*f4, f2=f8-f12, f0=dm(i0,m0), f4=pm(i9,m8); /* f9= xr0* yi0, zr0=f2= xr0* yr0- xi0* yi0 */

/* f0= xr1, f4= yi1*/

f13=f1*f5, f5=dm(i1,m0), f1=pm(i8,m8); /* f13= xi0* yr0 , f5=yr1, f1=xi1 */

lcntr=N-2, do CMTI until lce;

f8=f0*f5, f3=f9+f13; /* f8= xr* yr , zi=f3=xr* yi+ xi* yr */

f12=f1*f4, dm(i3,m0)=f3, pm(i10,m8)=f2; /* f12= xi* yi, 存zi與zr */

f9=f0*f4, f2=f8-f12, f0=dm(i0,m0), f4=pm(i9,m8); /* f9= xr* yi, zr=f2= xr* yr- xi* yi */

/* f0= xr, f4= yi */

CMTI: f13=f1*f5, f5=dm(i1,m0), f1=pm(i8,m8); /* f13= xi* yr , f5=yr, f1=xi */

f8=f0*f5, f3=f9+f13;

f12=f1*f4, dm(i3,m0)=f3, pm(i10,m8)=f2;

f9=f0*f4, f2=f8-f12;

f13=f1*f5;

f3=f9+f13;

dm(i3,m0)=f3, pm(i10,m8)=f2;

結語(yǔ)

本文對ADSP2106x芯片內部運算處理單元的結構進(jìn)行了分析,并在此基礎上總結了并行處理指令的一般格式和具體應用中的流水線(xiàn)步驟,最后給出數組內積和復數組相乘的兩個(gè)典型例子。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>