ARRAY_PARTITION是將數組按照指定要求分割成多個小的數組,形成多個小的存儲空間。這帶來的最直接的好處是增加了數據讀/寫端口的個數,也就提高了數據吞吐率,但同時也會消耗更多的RAM資源或者寄存器。
先看看ARRAY_PARTITION的基本語法,如下圖所示。這種方法是直接在代碼中用#pragma的方式描述,當然也可以直接在VitisHLS中采用圖形界面方式描述,如下圖所示。
在這里有兩個個重要的參數type和factor,其中type有三個可選值,分別為block、cyclic和complete。我們看看三者到底有什么區別。為便于說明,這里我們以一個數組長度為12的一維數組A[12]為例。如果type為block,factor為4,意味著將A[12]分割為4個小的數組,這樣每個數組的長度為12/4=3,同時每個數組中的元素是按順序依次從原始數組中獲取。如果type為cyclic,factor為4,這仍是將數組分割為4個長度為3的小數組,每個數組中的元素是交織地從原始數組中獲取。如果type是complete,此時參數factor不起作用,可理解為將數組全部打散,可同時獲取到12個元素,從而以寄存器方式實現。三者的區別如下圖所示。
上述三種形式以#pragma的形式描述如下圖所示。
block、cyclic和complete在下面這種描述方式下,最終的結果是一致的。
這里有一個問題,如果factor不能被數組長度整除時會是怎樣的結果呢?假定上述案例中factor為5,最終將是5個數組,其中前4個數組長度為2,最后一個數組長度為4。
ARRAY_PARTITION還允許對不同維度進行分割,以二維數組A[6][4]為例,dim的含義如下圖所示。
一旦指定了dim,就可以對指定dim進行分割,這里以A[6][4]為例,分割情形如下圖所示。
此外,在使用#pragma方式描述時,可以通過宏macro給參數賦值,如下圖所示方式。
那么到底什么時候用block,什么時候用cyclic呢?本質上與數據流密切相關,在下一篇文章中我們給出一個具體案例幫助大家理解。
責任編輯:lq
-
寄存器
+關注
關注
31文章
5424瀏覽量
123504 -
數組
+關注
關注
1文章
419瀏覽量
26393 -
圖形界面
+關注
關注
0文章
38瀏覽量
7532
原文標題:圖解ARRAY_PARTITION
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
國星光電InfoComm 2025亮點搶先看
為什么無法使用“numpy.array”函數加載圖像文件?
Lua語法基礎教程(下篇)

Lua語法基礎教程(中篇)

評論