基于單端口sram的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開了一種基于單端口SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法,包括:基于單端口SRAM來存儲(chǔ)矩陣數(shù)據(jù);當(dāng)開啟設(shè)置在單端口SRAM前端的矩陣轉(zhuǎn)置開關(guān)后,所要訪問的目標(biāo)地址:第n行第m列,通過矩陣轉(zhuǎn)置進(jìn)行行列地址交叉轉(zhuǎn)換為:第m行第n列;所述單端口SRAM將轉(zhuǎn)換后的地址作為目標(biāo)地址,并輸出該地址中存放的數(shù)據(jù)。本發(fā)明的方案將矩陣轉(zhuǎn)置的時(shí)間復(fù)雜度直接降為0,不需要耗費(fèi)任何時(shí)間即可實(shí)現(xiàn)矩陣的轉(zhuǎn)置,與傳統(tǒng)的軟件實(shí)現(xiàn)方式相比較,能極大的節(jié)省時(shí)間開銷。
【專利說明】
基于單端口 SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及矩陣數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種基于單端口 SRAM的零耗時(shí)矩陣 轉(zhuǎn)置實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002] 在計(jì)算機(jī)數(shù)據(jù)處理過程中,經(jīng)常會(huì)遇到矩陣轉(zhuǎn)置的數(shù)學(xué)問題,傳統(tǒng)CPU在處理此類 問題時(shí)將會(huì)消耗大量的資源,目前最快的軟件轉(zhuǎn)置算法時(shí)間復(fù)雜度也在O(mXn),其中m、n 為矩陣的列數(shù)和行數(shù),對于一個(gè)1000X1000的矩陣來說,其時(shí)間復(fù)雜度為1〇6量級。
[0003] 傳統(tǒng)方案中只能夠通過軟件算法來實(shí)現(xiàn)矩陣轉(zhuǎn)置,由于軟件無法直接操控底層硬 件(尤其是存儲(chǔ)單元的地址),并且矩陣數(shù)據(jù)只能以固定順序存儲(chǔ)在內(nèi)存空間;因此,傳統(tǒng)的 軟件實(shí)現(xiàn)轉(zhuǎn)置算法時(shí)只能按以下步驟實(shí)現(xiàn):申請與原矩陣A[M][N]容量相同大小的一塊空 間B[N] [M];執(zhí)行兩層for循環(huán),依次將A矩陣中的所有元素復(fù)制到B矩陣的對應(yīng)位置上:
[0004] for( i = 0 ; i<M; i++)
[0005] for( j = 0; j<N; j++)
[0006] B[ j][i]=A[i][ j];
[0007] 即,軟件實(shí)現(xiàn)算法中,矩陣有多少元素,就要執(zhí)行多少次賦值操作,從而消耗大量 時(shí)間。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的目的是提供一種基于單端口SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法,極大的節(jié) 省了時(shí)間開銷。
[0009] 本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的:
[0010] -種基于單端口 SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法,包括:
[0011]基于單端口 SRAM來存儲(chǔ)矩陣數(shù)據(jù);
[0012] 當(dāng)開啟設(shè)置在單端口 SRAM前端的矩陣轉(zhuǎn)置開關(guān)后,所要訪問的目標(biāo)地址:第η行第 m列,通過矩陣轉(zhuǎn)置進(jìn)行行列地址交叉轉(zhuǎn)換為:第m行第η列;
[0013] 所述單端口 SRAM將轉(zhuǎn)換后的地址作為目標(biāo)地址,并輸出該地址中存放的數(shù)據(jù)。
[0014] 進(jìn)一步的,所述單端口SRAM中所存儲(chǔ)矩陣數(shù)據(jù)的煒度為N行第Μ列;M2 m,N2 η;
[0015] 所述單端口 SRAM的容量為2a+b;其中,a為滿足2a 2 Μ的最小正整數(shù);b為滿足2b 2 Ν的 最小正整數(shù)。
[0016] 由上述本發(fā)明提供的技術(shù)方案可以看出,通過直接對底層硬件進(jìn)行操作,當(dāng)需要 進(jìn)行矩陣轉(zhuǎn)置時(shí),直接對存儲(chǔ)矩陣的單端口 SRAM的地址進(jìn)行操作,將矩陣轉(zhuǎn)置的時(shí)間復(fù)雜 度直接降為〇,不需要耗費(fèi)任何時(shí)間即可實(shí)現(xiàn)矩陣的轉(zhuǎn)置,與傳統(tǒng)的軟件實(shí)現(xiàn)方式相比較, 能極大的節(jié)省時(shí)間開銷。
【附圖說明】
[0017] 為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要使用 的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本 領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他 附圖。
[0018] 圖1為本發(fā)明實(shí)施例提供的單端口 SRAM的存儲(chǔ)矩陣示意圖;
[0019] 圖2為本發(fā)明實(shí)施例提供的轉(zhuǎn)置之前的圖像示意圖;
[0020] 圖3為本發(fā)明實(shí)施例提供的轉(zhuǎn)置之后的圖像示意圖;
[0021] 圖4為本發(fā)明實(shí)施例提供的基于單端口 SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法的示意 圖。
【具體實(shí)施方式】
[0022] 下面結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整 地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒?發(fā)明的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施 例,都屬于本發(fā)明的保護(hù)范圍。
[0023] 本發(fā)明實(shí)施例提供一種基于單端口 SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法,其主要包 括:
[0024]基于單端口 SRAM來存儲(chǔ)矩陣數(shù)據(jù);
[0025] 當(dāng)開啟設(shè)置在單端口 SRAM前端的矩陣轉(zhuǎn)置開關(guān)后,所要訪問的目標(biāo)地址:第η行第 m列,通過矩陣轉(zhuǎn)置進(jìn)行行列地址交叉轉(zhuǎn)換為:第m行第η列;
[0026] 所述單端口 SRAM將轉(zhuǎn)換后的地址作為目標(biāo)地址,并輸出該地址中存放的數(shù)據(jù)。 [0027]如圖1所示,所述單端口SRAM中所存儲(chǔ)矩陣數(shù)據(jù)的煒度為N行第Μ列;M2 m,N2 η;
[0028] 所述單端口 SRAM的容量為2a+b;其中,a為滿足2a 2 Μ的最小正整數(shù);b為滿足2b 2 Ν的 最小正整數(shù);
[0029] 列地址通過sram的0~(a_l)位進(jìn)行尋址;
[0030] 行地址通過sram的a~(a+b-Ι)位進(jìn)行尋址;
[0031]本發(fā)明實(shí)施例中,當(dāng)開啟矩陣轉(zhuǎn)置開關(guān)后,其輸出相應(yīng)的使能信號,從而觸發(fā)相應(yīng) 的行列地址交叉轉(zhuǎn)換;當(dāng)不需要進(jìn)行矩陣轉(zhuǎn)置時(shí),關(guān)閉矩陣轉(zhuǎn)置開關(guān),即可訪問單端口SRAM 中的原始矩陣。
[0032] 本發(fā)明實(shí)施例的上述方案可以應(yīng)用與各種需要對存儲(chǔ)數(shù)據(jù)矩陣進(jìn)行轉(zhuǎn)置的場景。 示例性的,在視頻顯示中,有一部分的顯示區(qū)域的圖像如圖2所示,若用戶需要將其變?yōu)閳D3 所示圖像,即需要將圖2所示圖像的數(shù)據(jù)矩陣進(jìn)行轉(zhuǎn)置。按照傳統(tǒng)方法,需要將圖2所示圖像 的矩陣中的數(shù)據(jù)依次取出,并重新寫入新的位置;而用本發(fā)明所提供的方法,不需要耗費(fèi)取 出再重新寫入的時(shí)間,而是通過矩陣轉(zhuǎn)置直接在兩種圖像狀態(tài)之間轉(zhuǎn)換。
[0033] 此外,上述示例中只是為說明應(yīng)用場景而舉的一個(gè)例子,其將兩種圖像狀態(tài)進(jìn)行 轉(zhuǎn)換的原理與圖像處理軟件直接翻轉(zhuǎn)圖像并不相同;實(shí)際上在數(shù)學(xué)計(jì)算中,有很多地方需 要用到矩陣的轉(zhuǎn)置。為了便于理解,下面結(jié)合一具體示例做進(jìn)一步說明。
[0034]本示例中,應(yīng)用場景為FPGA或ASIC等專用集成電路,可直接對底層硬件進(jìn)行操作, 因此只需對存儲(chǔ)矩陣的單端口 SRAM的地址進(jìn)行操作即可。
[0035] 當(dāng)關(guān)閉矩陣轉(zhuǎn)置開關(guān)時(shí),將矩陣數(shù)據(jù)寫入單端口sram,比如向目標(biāo)地址:{addr[a+ b_l :a],addr[a-l :0]}寫入數(shù)據(jù)。
[0036] 如圖4所示,將矩陣轉(zhuǎn)置開關(guān)打開后,其輸出相應(yīng)的使能信號,從而觸發(fā)相應(yīng)的行 列地址交叉轉(zhuǎn)換;此時(shí),再次訪問目標(biāo)地址:{addr[a+b_l :a],addr[a_l :0]},將進(jìn)行行列地 址交叉轉(zhuǎn)換,地址變?yōu)椋簕addr[a_l :0],addr[a+b_l :a]},即實(shí)際讀取的數(shù)據(jù)為單端口 sram 中{addr[a_l :0],addr[a+b_l :a]}存放的數(shù)據(jù)。
[0037] 以3X3矩陣為例進(jìn)行說明,2維矩陣在計(jì)算機(jī)存儲(chǔ)器內(nèi)是按一維數(shù)組的形式排列 的:
[0039]該矩陣在存儲(chǔ)器中的存儲(chǔ)順序如下:
[0041]轉(zhuǎn)置后的矩陣為:
[0043]轉(zhuǎn)置矩陣在存儲(chǔ)器中的存儲(chǔ)順序如下:
[0045] 傳統(tǒng)方法中,為了計(jì)算轉(zhuǎn)置矩陣,需要一一變換矩陣中元素的存儲(chǔ)位置??梢钥?出,上述變換需要進(jìn)行約次操作(η為矩陣維度)。而采用本發(fā)明的方案可以顯著降低這 種操作成本。
[0046] 本發(fā)明實(shí)施例的上述方案中,通過直接對底層硬件進(jìn)行操作,當(dāng)需要進(jìn)行矩陣轉(zhuǎn) 置時(shí),直接對存儲(chǔ)矩陣的單端口 SRAM的地址進(jìn)行操作,將矩陣轉(zhuǎn)置的時(shí)間復(fù)雜度直接降為 〇,不需要耗費(fèi)任何時(shí)間即可實(shí)現(xiàn)矩陣的轉(zhuǎn)置,與傳統(tǒng)的軟件實(shí)現(xiàn)方式相比較,能極大的節(jié) 省時(shí)間開銷。
[0047]以上所述,僅為本發(fā)明較佳的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此, 任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),可輕易想到的變化或替換, 都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范 圍為準(zhǔn)。
【主權(quán)項(xiàng)】
1. 一種基于單端口 SRAM的零耗時(shí)矩陣轉(zhuǎn)置實(shí)現(xiàn)方法,其特征在于,包括: 基于單端口 SRAM來存儲(chǔ)矩陣數(shù)據(jù); 當(dāng)開啟設(shè)置在單端口 SRAM前端的矩陣轉(zhuǎn)置開關(guān)后,所要訪問的目標(biāo)地址:第η行第m列, 通過矩陣轉(zhuǎn)置進(jìn)行行列地址交叉轉(zhuǎn)換為:第m行第η列; 所述單端口 SRAM將轉(zhuǎn)換后的地址作為目標(biāo)地址,并輸出該地址中存放的數(shù)據(jù)。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述單端口 SRAM中所存儲(chǔ)矩陣數(shù)據(jù)的煒度 為N行第Μ列;M>m,N>n; 所述單端口 SRAM的容量為2a+b;其中,a為滿足2a 2 Μ的最小正整數(shù);b為滿足2b 2 N的最小 正整數(shù)。
【文檔編號】G06F9/345GK105867882SQ201610184959
【公開日】2016年8月17日
【申請日】2016年3月24日
【發(fā)明人】盧建良
【申請人】中國科學(xué)技術(shù)大學(xué)