Parallelism#
關鍵術語
基礎設計時鐘是指幀擷取卡上所產生 FPGA 管線的時鐘,例如 312.5 MHz。它與相機的像素時鐘不同,也不是VisualApplets 編輯器內的時鐘。一個時鐘週期等於基礎設計時鐘的一個時鐘脈衝。每個時鐘週期內,可有一定數量的像素通過鏈路。該數量即為並行度。Parallelism 4 表示每個時鐘週期有四個像素。 較高的基礎設計時脈頻率或較高的並行度,會提高像素傳輸率,本主題中將此稱為頻寬。
Parallelism 以及頻寬#
Parallelism 是指每時鐘週期內,透過生成的 FPGA 管線中某個鏈路所傳輸的像素數。
Parallelism 會影響模組內的處理粒度。例如,該 LineBuffer 參數 XLength 這取決於並行處理的程度。
以下規則適用:
- 更高的並行度 → 更高的像素速率頻寬。
- 更高的並行度 → 更高的 FPGA 資源利用率。
位元寬度與核心大小並不包含在此像素速率數值之中。它們會增加每時脈週期的資料量,這對 DRAM 及資源配置至關重要。請參閱「核心操作」教學主題與「記憶體元件」教學主題。
設計指引
為節省 FPGA 資源,請將並行度控制在必要範圍內。
以像素速率表示的鏈路頻寬遵循以下公式:
頻寬 = 並行度 × 基本設計時脈
基本設計時鐘取決於您使用的幀擷取卡。若使用 Basler 幀擷取卡,請在「裝置資源」中查閱該數值。
關鍵術語
您可以透過「連結資訊」和「資料吞吐量」標誌,讓設計中的並行處理與資料吞吐量顯而易見。請使用工具列上的以下按鈕啟用這些標誌:

因此,您的設計中會顯示「連線資訊」和「吞吐量」標誌:

在本主題中,我們將展示所有啟用「連結資訊」與「吞吐量」標誌的設計截圖。
計算所需數量Parallelism#
要為設計進行尺寸規劃,首先需計算所需的像素速率,然後根據基本設計時鐘推算出所需的並行度。
計算區域掃描設計的Parallelism 值#
對於採用面掃描相機的設計,首先需計算以每秒像素為單位的頻寬:
頻寬 = (每行像素數) × (每幀行數) × 幀率
接著利用頻寬來計算所需的並行度:
所需並行度 = 頻寬 / 基本設計時脈
請選擇最小的支援並行度,且該數值必須至少等於計算出的需求值。若向下取整,將導致設計帶寬低於要求。例如,在 312.5 MHz 的基本設計時脈下,若需達到 6000 MP/s,則需 19.2 的並行度。Parallelism 19 僅能提供 5937.5 MP/s,這是不夠的。 請使用 20,或您平台所允許的下一更高數值。
區域掃描計算範例#
對於解析度為 2064 × 2064 像素、每秒 30 幀的攝影機,適用以下頻寬計算方式:
頻寬 ≈ 2064 × 2064 × 30 ≈ 127.9 MP/s
以 312.5 MHz 為基準設計時脈,據此計算出的並行度如下:
所需並行度 ≈ 127.9 / 312.5 ≈ 0.41 → 向上取整為 1

上方的螢幕截圖顯示了對應的VisualApplets 設計實作。在 相機介面 設為 4. 該數值並非來自頻寬計算的處理並行度。該 CxpCamera 操作員會根據由 ConnectionCount 模組參數(在此情況下, x1). 介面並行度與所需的處理並行度是兩個不同的數值。由於所需的處理並行度是 1, 鏈路並行度被降低至 1 在該的輸出鏈路上 LineBuffer 運算子。
在低幀率的情況下,並行度值為 1 就足夠了。在較高的幀率或解析度下,所需的並行度會增加。計算出該數值後,再將其向上捨入至下一個受支援的層級,例如: 2, 4,或 8. 若該平台需要一個 甚至 並行處理時,應先將數值向上取整,然後選取下一個較高且有效的偶數值。例如,若計算結果為 6.3, 使用 8,而不是 7.
計算線掃描設計的Parallelism 值#
對於採用線掃描相機的設計,首先需計算以像素每秒為單位的頻寬:
頻寬 = (每行像素數)× 行頻率
接著利用頻寬來計算所需的並行度:
所需並行度 = 頻寬 / 基本設計時脈
請根據您的平台規則及允許的並行處理值,將結果向上取整。
線掃描計算範例#
對於解析度為 16384 像素、行速為 120 kHz 的攝影機,其頻寬計算方式如下:
頻寬 ≈ 16384 × 120 kHz ≈ 1966.08 MP/s
以 312.5 MHz 為基準設計時脈,據此計算出的並行度如下:
所需並行度 ≈ 1966.08 / 312.5 ≈ 6.3 → 向上取整為 7
經計算後得出的結果是 6.3, 因此下一個整數是 7. 若該平台需要一個 甚至 並行性,請選擇下一個較高且有效的偶數值(8, 而非 7). 下方的螢幕截圖示範了並行處理的應用 7,當甚至不需要並行處理時,此方法依然有效。

上方的螢幕截圖顯示了對應的VisualApplets 設計實作。相機介面上的並行處理設定為 12. 此值會由 CxpCamera 根據 CXP 連線數的運算子(ConnectionCount 參數設定為 x2). 這種介面並行性,同樣與所需的處理並行性不同。該 SplitImage 此運算子執行一維至二維的轉換。該 LineBuffer 運算子隨後將鏈結並行度降低至 7 以符合計算出的處理需求。
在設計中變更Parallelism #
以下運算子可將設計的並行度調整至符合頻寬需求:
增加或減少Parallelism#
PARALLELdn— 會降低並行度。請參閱 PARALLELdn 請參閱《運算子參考手冊》。PARALLELup— 提高並行度。請參閱 PARALLELup 請參閱《運算子參考手冊》。- LineBuffer(僅限 imaFlex): 當
ParallelismConverter參數(屬於LineBuffer此運算子可在不使用其他平行化運算子的情況下,調整輸入與輸出之間的平行度。請參閱 LineBuffer (imaFlex) 請參閱《運算子參考手冊》。
分割、篩選與合併資料流#
SplitParallel— 將一個並行度較高的資料流拆分為多個並行度較低的資料流。範例:Parallelism8變成兩個具有並行性的資料流4每個。另請參閱 SplitParallel 請參閱《運算子參考手冊》。SelectFromParallel— 從並行資料流中選取個別元件,例如在每個時脈週期傳輸的多個資料字中選取其中一個。另請參閱 SelectFromParallel 請參閱《運算子參考手冊》。MergeParallel— 在分別處理後,再次合併並行資料流。另請參閱 MergeParallel 請參閱《運算子參考手冊》。
其他營運商#
CastParallel— 重新解讀鏈路上的位元。只要符合以下條件,Parallelism 和位元寬度便可能發生變化: 位寬 × 並行度 輸入與輸出時保持不變。例如:16 位元 × PAR 2 會變成 8 位元 × PAR 4。影像寬度會隨之改變。另請參閱 CastParallel 請參閱《運算子參考手冊》。ExpandToParallel— 接受並行度為 1 的輸入,並產生所需的輸出並行度。輸入值會複製到所有並行通道。另請參閱 ExpandToParallel 請參閱《運算子參考手冊》。
用例#
以下使用情境經常出現:
-
使用
PARALLELup為了提高並行度,將資料在並行分支中進行處理,並透過MergeParallel.
-
對於某些處理任務而言,僅選擇一個元件在數學上已足夠,不僅能提供所需的結果,還能減少資料量。使用
SelectFromParallel從並行處理中僅轉發一個通道4串流。

- 之後
FrameBufferRandomRead, 該串流以並行方式運行1例如,每像素 64 位元。為了讓後續處理能以更高的並行度運行,請將資料流重新詮釋為 8 位元 × 並行度8. 為此,請使用CastParallel運算子。

- 使用
ExpandToParallel以並行方式擴展控制值或像素流1關於並行處理4當同一數值必須在所有四個並行通道中皆可取得時,例如並行分支中的係數或遮罩。

Parallelism 限制條件#
影像的最大寬度(以像素為單位)必須能被平行度整除。
範例:
- 採用並行處理
4, 允許的圖片寬度包括 1024 和 2048。 - 採用並行處理
12, 圖像寬度為 16384 即為 不是 允許,因為 16384 除以 12 並非整數。
解決方法:
- 虛像元— 將影像擴寬(例如透過模擬連結屬性或運算子),直到影像寬度能被並行度值整除為止。
- 裁切— 將圖片裁切至有效的圖片寬度。
關鍵術語
所生成的 FPGA 硬體以每時鐘週期處理一個封包的方式處理像素。一條包含 16384 個像素的行無法精確地以 12 為並行度進行封裝,因為 16384 / 12 並非整數。因此,VisualApplets 要求設計中的影像寬度必須能被並行度整除。
Parallelism 搭配記憶體運算子#
FrameBufferRandomRead 僅允許 並行性 1,因為記憶體是依序存取的。若要在設計中採用更高的平行度,同時又不影響整體頻寬,請使用 CastKernel 運算子,或透過以下方式將當前像素的較高位元成分進行運算: CastParallel 運算子。
請參閱「使用核心」教學主題,了解如何操作的範例。
請參閱《運算子參考手冊》中的「FrameBufferRandomRead」,以及《運算子參考手冊》中的「FrameBufferRandomRead (imaFlex)」。
排除瓶頸問題#
當……時,通常會出現瓶頸 InsertLine 在《操作員參考手冊》中,或 InsertImage 在《操作員參考手冊》中並未與 PARALLELup. 若操作順序不當,吞吐量可能會下降。
使用插入運算子會增加輸送到處理管線中的資料量,從而提高整體頻寬。因此,在 InsertLine 或 InsertImage 運算子必須具備足夠高的性能,才能處理所產生的頻寬。
範例#

上圖中的範例顯示,該 InsertImage 該運算子有兩個輸入連結。每個輸入連結以 1250 MPixel/s 的頻寬,處理解析度為 5120 × 5120 像素的影像,並採用 4 級並行度。
如果在 InsertImage 運算單元,每個輸入的頻寬仍維持在 1250 MPixel/s。然而,由於有兩條輸入鏈路,該設計必須處理總計 2 × 1250 MPixel/s 的吞吐量。
為避免此頻寬瓶頸,請透過以下方式提高並行度: PARALLELup 在「」之前的運算子 InsertImage 如下所示的運算子:
