ひでみのアイデア帳

くだらないことなんだけど、忘れないために・・・

【SDSoC】pragma実験(メモリ編)・その1

とりあえず、SDSoCのpragmaを整理していこう。

pragmaめんどくせぇ〜。

まずは、性能に重要なメモリ周辺から整理してみる。

Cソースでメモリというと、大分類で変数と配列に別れる。

ここでは構造体やmallocは配列の一部とする。

変数はスカラーで要素が1つかないメモリ領域である。

SDSoCではPLにある変数はAXI_LITEでアクセスする。

配列AXI_DMA_SG、AXI_DMA_SIMLE、AXI_DMA_2D、AXI_FIFO、AXI_M、AXI_LITEのいずれかでPLとデータのアクセスをする。

大きく分ければ、DMAかDMAではないかの2つ。

これを表にしてみよう。

たぶん、こうだろう。

アクセス方法 DMA or noDMA 特徴
AXI_DMA_SG DMA スキャッターギャザーDMAを使用した転送。mallocに対応する。
AXI_DMA_SIMLE DMA 連続した領域でのDMA。CMA領域を使用したDMAになる。sds_mallocに対応する。
AXI_DMA_2D DMA
AXI_FIFO DMA
AXI_M noDMA もしかして、DMAじゃない?
AXI_LITE noDMA AXI_GPを使用したアクセス

SDSoCには次の仕様がある。

  • mallocの場合、通常はAXI_DMA_SGを使用する
  • 300Byte未満はAXI_FIFOを使用する
  • AXI_FIFOの方がAXI_DMA_SGよりデータ転送時間が短く、PLの専有リソースも少ない。
  • 構造体、クラスはフラット化する

なんで300Byte未満?

変数はAXI_LITEから変えられないので、たくさんの変数を設定する場合は配列や構造体にしてDMAにするのが良さげかな?

と、いうことで実験開始!

実験内容

SDSoCのpragmaでメモリに関するものは次のものである。

これを1つずつ試してみようではないか!

結果は次から・・・