上海婦科疾病研究所 上海女性不孕醫(yī)院 上海引產(chǎn)醫(yī)院 無痛引產(chǎn)痛不痛 上海人流醫(yī)院 白癜風(fēng)治療醫(yī)院 上海小兒腦癱醫(yī)院 上海女子醫(yī)院
古风,兽性总裁的爱奴,盗墓笔记

国产精品无码毛片AV_亚洲毛片精品在线_全球黄色短视频在线免费观看_亚洲一区二区爱av_成年人免费观看网址_欧美美女性爱喷水网址_亚洲毛片av无码不卡_国产无码视频在线观看_高清国语自产拍在线播放_女人午夜免费黄片

用戶名: 密碼:
主頁 設(shè)為首頁 加入收藏
      產(chǎn)品中心       技術(shù)中心       下載中心        社區(qū)新聞        誠聘英才       大學(xué)計(jì)劃        關(guān)于我們       技術(shù)論壇
  您的當(dāng)前位置:ADSP開源社區(qū) >> 技術(shù)中心 >> SHARC 今天是:
技術(shù)中心  
SigmaDSP
SHARC
A2B音頻總線
Blackfin
ADI操作系統(tǒng)
ADSP-218X
TigerSAHRC
ADI DSP仿真器
產(chǎn)品導(dǎo)航
ADI DSP仿真器
SigmaDSP開發(fā)板
ADI A2B總線開發(fā)板
SHARC DSP開發(fā)板
銷售網(wǎng)絡(luò)
SHARC  
ADSP2106x中并行處理指令的應(yīng)用技巧
[ 作者:admin ] [ 來源:ADSP開源社區(qū) ] [ 發(fā)布時(shí)間:2011-5-28 ]
引言

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

ADSP2106x中并行處理指令的應(yīng)用技巧

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

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

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

  ADSP2106x中的運(yùn)算處理單元

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

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

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

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

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

ADSP2106x中并行處理指令的應(yīng)用技巧

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

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

 下面針對(duì)這種并行運(yùn)算來考慮軟件編程時(shí)應(yīng)注意的問題。

  并行運(yùn)算指令的基本格式

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

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

  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í)際指向的內(nèi)存地址范圍必須在數(shù)據(jù)存儲(chǔ)器中,對(duì)于ADSP21060,在32位數(shù)據(jù)長度下,其數(shù)據(jù)存儲(chǔ)器的地址范圍為0x30000~0x3FFFF; PM(Ic,Md)實(shí)際指向的內(nèi)存地址范圍也必須在數(shù)據(jù)存儲(chǔ)器中。否則雖然編譯時(shí)能通過,但運(yùn)行時(shí)達(dá)不到并行的效果,而且很可能出錯(cuò),此種出錯(cuò)具有一定的不確定性,在程序調(diào)試時(shí)不易發(fā)現(xiàn),潛在的危害很大。

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

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

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

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

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

  For n=0 to N-1

  Fx ← 內(nèi)存(xn);

  Fy = 運(yùn)算(Fx);

  Fy → 內(nèi)存(yn);

  End

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

  Fx ← 內(nèi)存(x0);

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

  For n=2 to N-1

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

  End

  Fy = 運(yùn)算(Fx), Fy → 內(nèi)存(yN-2);

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

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

  該例子雖然簡單,但基本上表達(dá)了并行處理時(shí)的通用流水線步驟。下面部分,我們將以兩個(gè)具體的例子來說明并行處理指令的應(yīng)用。

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

  實(shí)例1為求兩個(gè)數(shù)組內(nèi)積。設(shè)xn, yn, 0≤n≤N-1為兩個(gè)數(shù)組,它們的內(nèi)積定義為:ADSP2106x中并行處理指令的應(yīng)用技巧。為了在運(yùn)算中能夠同時(shí)獲得xn和yn,我們需要把xn和yn分別安排在程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器中,經(jīng)過運(yùn)算后,內(nèi)積結(jié)果在寄存器f8中。

      f8=0; /*對(duì)結(jié)果寄存器清零 */
  i0=x; m0=1; /*把數(shù)組xn的首地址賦給i0 */
  i8=y; m8=1; /*把數(shù)組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)作準(zhǔ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)的殘余操作,內(nèi)積結(jié)果在f8中 */

  第二個(gè)例子是復(fù)數(shù)乘法運(yùn)算,一次復(fù)數(shù)乘法需要4次實(shí)數(shù)乘法、一次實(shí)數(shù)加法和一次實(shí)數(shù)減法,因此至少需要四條指令才能完成一次復(fù)乘法,在這四條指令中,還要完成四個(gè)操作數(shù)的讀入和兩個(gè)結(jié)果的回寫。這里,我們假設(shè)有兩個(gè)復(fù)數(shù)組: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被安排在數(shù)據(jù)存儲(chǔ)器中,xi、yi及zr被安排在程序存儲(chǔ)器中。具體程序如下,

  i0=xr; i1=yr; i3=zi; i8=xi; i9=yi; i10=zr; m0=1; m8=1; /*對(duì)地址產(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;

  結(jié)語

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

聯(lián)系我們 | 關(guān)于我們 | 免責(zé)聲明 | 誠征英才 | 友情鏈接
Copyright 2019 All rights reserved  本網(wǎng)頁版權(quán)屬Open ADSP所有
北京海淀區(qū)中關(guān)村大街32號(hào)新中發(fā)市場(chǎng)3659 郵編100100
電話 18611096839 
粵ICP備14035876號(hào)-1