アプリケーションノート: Shared Memory#
imaFlex および marathon フレームグラバーでの Shared Memory の使用#
Memoryを使用する各オペレーターは、フレームグラバー上の1つの物理 Memoryのみに割り当てられます。imaFlex および microEnable 5 marathon フレームグラバーでは、コンセプトが異なります。これらのフレームグラバーでは、はるかに高速なDDR4(imaFlexの場合)またはDDR3(marathonの場合)Memoryを使用できます。ただし、これは単一の物理 Memoryであるため、Memoryを使用するすべての VisualApplets オペレーターで帯域幅が共有されます。
フレームグラバーのメモリ設定を確認するには、VisualApplets Device Resources Documentationを参照するのが最適です。このドキュメントには、VisualApplets デザイン内で DRAM エレメントを使用する際に関連する情報(RAM サイズ、RAM データ幅、RAM ごとの帯域幅(marathon シリーズを除くすべてのプラットフォーム)、および marathon シリーズの合計(共有)RAM 帯域幅)が記載されています。
情報
VisualApplets Device Resources Documentationに記載されている帯域幅の値は理論上の最大値です。実際の使用では、効率が低下する場合があります。
このドキュメントでは、RAMサイズとRAMデータ幅の情報を利用して、特定のプラットフォームで Memoryを効率的に使用する方法について説明します。また、marathonシリーズのRAMあたりの結果の帯域幅を計算するのにも役立ちます。
DRAM の効率的な使用#
VisualApplets Device Resources Documentationには、特定のプラットフォームの 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
これらの値は、合計RAMサイズ(例: marathonシリーズの場合: 4 x 512 MiB = 2 GiB (2^31 バイト))および1つの VisualApplets オペレーターが最大で使用できるパーティションについての情報を示しています(marathonシリーズの場合: 512 MiB)。
RAM のフルデータ幅に関する情報を活用する場合にのみ、オペレーターごとにこの最大 RAM サイズを効率的に使用できます(VisualApplets Device Resources Documentationも参照してください)。
- imaFlex CXP-12 Quadの場合、RAMデータ幅は384ビットです
- imaFlex CXP-12 Pentaの場合、RAMデータ幅は640ビットです
- marathon VCX-QPおよびVF2の場合、RAMデータ幅は512 bitです。
- marathon VCL、VCLx、およびLightbridgeの場合、RAMデータ幅は256 bitです。
RAMデータ幅は、VisualAppletsのデザイン内でDRAMオペレーターに接続されているリンクのParallelism、カーネル要素、およびBit Widthを掛け合わせたものです。
DRAM の使用例#
この例では、次の図に示すように、marathon VCLプラットフォーム用のシンプルなVisualAppletsのデザインを使用しています。
この例では、Parallelismを4、Bit Widthを8 bitに設定しています。したがって、この例で使用するRAMデータ幅は4 × 8 = 32 bitのみです。ただし、完全に効率的な動作を実現するには、帯域幅を256 bitにする必要があります。そのため、次の図に示すように、Parallelismを32に増やす必要があります。
これで、このデザインによりDRAMを効率的に使用できるようになります。一般的に、利用可能なRAM data widthをフル活用するのが常に最善です。ただし、より多くのリソースが必要になる場合、データ形式が256で割り切れない場合、またはオペレーターのパラメーターでフルレンジを指定できなくなる場合があるため、これが常に可能とは限りません。そのため、より低いParallelismを使用できるかどうかを知る必要があります。これを行うには、次のセクションで説明するメモリ帯域幅を理解する必要があります。
Memory Bandwidth#
1 つの DRAM エレメントの最大メモリ帯域幅に関するプラットフォーム固有の情報は、VisualApplets Device Resources Documentationに記載されています。RAM からの読み取りと書き込みを考慮する必要があるため、結果の帯域幅を計算する際には最大帯域幅が 2 で割られます。

結果の帯域幅のこの値は、RAM のフルデータ幅を使用した場合にのみ達成されます(セクションDRAM の効率的な使用を参照)。したがって、結果の帯域幅を計算するには、比率 使用する RAM データ幅 / RAM のフルデータ幅を考慮する必要があります。

この式に基づいて、必要なRAMデータ幅を計算できます。
bit width * parallelism * kernel elements of a link connected to a RAM element 特定の結果の帯域幅を達成するためにデザインで使用されます。つまり、Bit Widthとカーネル要素が定義されている場合、RAM要素に接続されたリンクの最低限必要なParallelismを計算することもできます。
メモリ帯域幅計算の例#
セクションMemory Bandwidthのデザイン例の結果の帯域幅を計算できます。RAM データ幅が 32 bit の図 1 に示すデザイン例の場合、結果の帯域幅は次のようになります。

RAMデータ幅が256 bitである図2に示されたデザイン例の場合、結果の帯域幅は次のようになります。

Shared Memory#
セクションMemory Bandwidthの帯域幅計算式は、単一の DRAM オペレーターのみが存在する場合、すべてのフレームグラバー プラットフォームに適用されます。また、marathon シリーズを除くすべてのプラットフォームで、アプレット内の各 DRAM エレメントの帯域幅計算にも適用されます。複数のオペレーターを使用する場合、marathon シリーズでは合計メモリ帯域幅が共有されます。その場合、1 つの DRAM エレメントの結果の帯域幅は次のように計算されます。

Shared Memory の例#
marathon VCLプラットフォームに関する次の例は、下の画像に示すように、2台のカメラ、2つのDRAM要素(RAMデータ幅は32 bit)、および2つのDMAを示しています。
結果の帯域幅は次のようになります。

RAM データ幅が 32 bit でデザイン内の DRAM オペレーターが 1 つだけの場合についてセクションMemory Bandwidthで計算された結果の帯域幅と比較すると、2 つの DRAM エレメントがある場合の結果の帯域幅は以前の値の半分になります。1 つの DRAM エレメントと同じ帯域幅を 2 つの DRAM エレメントで実現するには、RAM データ幅を 2 倍(= 64 bit)にする必要があります。
オペレーターの設定#
オペレーターの設定は、指定されたフレームグラバー ハードウェアの利用可能な RAM データ幅に自動的に適応します。したがって、ほとんどのオペレーターでは、VisualApplets Device Resources Documentationに示されている RAM データ幅が許可されます。一部のオペレーターでは、Parallelism が 1 のみに制限されています。64 bit というリンクの bit width の制限を克服するために、これらのオペレーターの一部では、セクションDRAM の効率的な使用およびMemory Bandwidthで説明されているように、効率的な RAM データ幅を使用するカーネルを受け入れます。効率的な使用のために特別な設定が必要な DRAM オペレーターの例外があります。オペレーターの最適な設定に関する詳細は、operator CoefficientBuffer documentationに記載されています。