跳至內容

應用說明:共享記憶體#

在 imaFlex 和marathon 影像擷取卡上使用共用記憶體#

imaFlex 和 microEnable 5marathon 影像擷取卡具有共用 DRAM 記憶體。

每個使用記憶體的操作元,在幀擷取卡上僅會被分配至單一實體記憶體。在 imaFlex 及 microEnable 5marathon 幀擷取卡上,其運作原理則有所不同。在這些幀擷取卡上,您可以使用速度更快的 DDR4(imaFlex)或 DDR3(marathon )記憶體。然而,這僅是一組單一實體記憶體,因此所有使用該記憶體的VisualApplets 操作元都必須共享其頻寬。

要確定幀擷取卡的記憶體配置,最佳方式是參閱《VisualApplets 裝置資源文件》。在該文件中,您可以找到與在VisualApplets 設計中使用 DRAM 元件相關的資訊:RAM 容量、RAM 資料位寬及每組 RAM 的頻寬(適用於所有平台,marathon 系列除外),以及marathon 系列的總 RAM 頻寬(共用)。

資訊

《VisualApplets 裝置資源文件》中列出的頻寬數值僅為理論上的最大值。實際使用時,效能可能會有所降低。

本文件將引導您透過 RAM 容量與 RAM 資料位寬等資訊,針對特定平台有效率地運用記憶體。此外,本文件亦可協助您計算marathon 系列各 RAM 所對應的頻寬。

DRAM 的高效運用#

在《VisualApplets 裝置資源文件》中,您可以查閱有關特定平台 RAM 容量資訊:

  • 針對 imaFlex CXP-12 Quad:3 x 512 MiB DDR4
  • 針對imaFlex CXP-12 Penta :5 x 512 MiB DDR4
  • 適用於marathon 系列及 Lightbridge:4 x 512 MiB DDR3

這些數值提供了關於總記憶體容量的資訊(例如,marathon 系列:4 × 512 MiB = 2 GiB(2^31 位元組)),以及單一「VisualApplets 」操作員最多可使用的分割區大小(marathon 系列:512 MiB)。

唯有善用完整 RAM 資料寬度的相關資訊(請參閱VisualApplets 裝置資源文件),才能針對每個運算子有效利用此最大 RAM 容量:

  • 對於 imaFlex CXP-12 Quad 而言,RAM 的資料位寬為 384 位元
  • 對於imaFlex CXP-12 Penta ,RAM 的資料位寬為 640 位元
  • 對於marathon 、VCX-QP 及VF2,RAM的資料位寬為512位元
  • 對於marathon 的VCL、VCLx及Lightbridge,RAM資料寬度為256位元

在VisualApplets 設計中,RAM資料寬度等於位元寬度乘以並行度,再乘以與DRAM運算子相連的連結之核心元素數。

DRAM 的使用範例#

此範例採用了適用於marathon VCL 平台的簡易「VisualApplets 」設計,如下圖所示。

圖 1:Parallelism 4 的 RAM 使用狀況

此範例採用 4 級並行度與 8 位元的位元寬度。因此,此範例僅使用 4 × 8 = 32 位元的 RAM 資料寬度。然而,為了達到最高效率,頻寬必須為 256 位元。因此,您必須將並行度增加至 32,如下一圖所示。

圖 2:Parallelism 32 的 RAM 使用情況

現在,此設計可確保您能有效率地使用 DRAM。一般來說,充分利用可用的 RAM 資料寬度總是最佳做法。然而,有時這並不可行,因為您可能需要更多資源、您的資料格式無法被 256 整除,或是運算子的參數已無法支援完整的範圍。 因此,您需要了解是否也能採用較低的並行度。為此,您必須理解記憶體頻寬,相關內容將於下一節中說明。

記憶體頻寬#

您可以在《VisualApplets 裝置資源文件》中查閱有關單一 DRAM 元件最大記憶體頻寬的特定平台資訊。由於需將 RAM 的讀取與寫入操作一併考量,因此在計算最終頻寬時,需將最大頻寬除以 2:

公式 所得頻寬 最大值

只有當您使用完整的 RAM 資料寬度時,才能達到此帶寬數值(請參閱「DRAM 的有效使用」一節)。因此,在計算最終帶寬時,您需要將「已使用的 RAM 資料寬度」與「完整的 RAM 資料寬度」之間的比率納入考量:

公式 所得頻寬 最大值

根據此公式,您可以計算出所需的 RAM 資料位寬:

bit width * parallelism * kernel elements of a link connected to a RAM element 用於設計中以實現特定的最終頻寬。這意味著,若已定義位元寬度與核心元件,您亦可據此計算出連接至 RAM 元件之鏈路的最低所需並行度。

記憶體頻寬計算範例#

您可以針對「記憶體頻寬」一節中的設計範例,計算其最終頻寬。以圖 1 所示、RAM 資料寬度為 32 位的設計範例為例,其最終頻寬為:

公式 所得頻寬 最大值

以圖 2 所示的設計範例為例,其 RAM 資料寬度為 256 位元,所得的頻寬為:

公式 所得頻寬 最大值

Shared Memory#

「記憶體頻寬」章節中的頻寬計算公式,在僅存在單一 DRAM 運算器時,適用於所有幀擷取卡平台。此外,該公式亦適用於所有平台(marathon 系列除外)中,小程式內各 DRAM 元件的頻寬計算。若您使用多於一個運算器,marathon 系列的總記憶體頻寬將被共享。此時,單一 DRAM 元件的頻寬將根據以下公式計算:

公式 所得頻寬 最大值

共享記憶體範例#

以下是針對marathon VCL平台的範例,其中包含兩台攝影機、兩個DRAM元件(RAM資料寬度為32位元)以及兩個DMA,如下圖所示:

圖 3:兩台相機在Parallelism 4 上使用 RAM

所得的頻寬為:

公式 所得頻寬 最大值

相較於在「記憶體頻寬」一節中,針對 32 位元 RAM 資料寬度但設計中僅含一個 DRAM 元件所計算出的頻寬,當使用兩個 DRAM 元件時,所得頻寬僅為先前數值的一半。若要讓兩個 DRAM 元件達到與單一 DRAM 元件相同的頻寬,則需將 RAM 資料寬度加倍(即 64 位元)。

操作員設定#

運算子設定會自動適應特定幀擷取卡硬體所支援的 RAM 資料位寬。因此,大多數運算子皆支援《VisualApplets 裝置資源文件》中所述的 RAM 資料位寬。 部分運算子僅允許並行度為一。為克服 64 位元的鏈路位元寬度限制,其中部分運算子可接受核心程式,以採用如「DRAM 的高效利用」及「記憶體頻寬」章節所述的高效RAM 資料寬度。部分 DRAM 運算子則屬例外,需進行特殊設定方能高效利用。有關運算子最佳設定的詳細資訊,請參閱運算子 CoefficientBuffer 的文件。