とりあえず、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には次の仕様がある。
なんで300Byte未満?
変数はAXI_LITEから変えられないので、たくさんの変数を設定する場合は配列や構造体にしてDMAにするのが良さげかな?
と、いうことで実験開始!
SDSoCのpragmaでメモリに関するものは次のものである。
これを1つずつ試してみようではないか!
結果は次から・・・