spresenseで推論可能なSony NNC のサイズについて


SpresenseとArduinoの開発環境で、nncで学習したファイルを`dnnrt.forward()`をする時の  
「nnbのファイルサイズの大きさ」についていくつか質問があります。

  1. 大きさは実行させるコア（メインなのか、サブなのか）に依存しますか？  
使えるメモリサイズ（タイル？）に依存しそうな気がしています。

  2. そのときの目安のようなものがありましたら教えてください。  
プログラムはとっても単純で、スタックやヒープなどはほとんど使わないものと仮定して頂いて結構です。

  3. ファイルが推論可能かどうか、事前にプログラム等でチェックする方法はないでしょうか？

どうぞよろしくお願いいたします。




追加で調査しました。

結局、Cameraなどを利用してしまうと、Heapがほとんどなく、結局NNCのnnbファイルを置くエリアが数十バイトになってしまい、思うようなネットワークのAIが組めません。

ですが、Spresenseの1.5MBのメモリのWorker部分には、まだ、空きがあることが多いようです。  
そこで、そのエリアからメモリをとってみました。

<https://developer.sony.com/develop/spresense/docs/sdk_developer_guide_ja.html#_asmp_framework>  
を見てもわかりにくいのですが、exampleを参考に、Shared RAMを取得します。

[code]

      mpshm_t shm;
      int ret = mpshm_init(&shm, 0, 1024*512);
      int8_t* buf = mpshm_attach(&shm, 0);
    
[/code]

このような感じで、512kBの仮想空間のエリアの取得をmalloc代わりに行うと、

[code]

    size = nnbfile.size();
    
[/code]

のサイズが、512kBより小さければ、

[code]

    _network = buf;
    
[/code]

とすれば、512kBのnnbファイルを置くことができるようです。

これで、かなり大きなネットワークのAIが組めますね。

