質問: SpresenseとArduinoの開発環境で、nncで学習したファイルを`dnnrt.forward()`をする時の 「nnbのファイルサイズの大きさ」についていくつか質問があります。 1. 大きさは実行させるコア(メインなのか、サブなのか)に依存しますか? 使えるメモリサイズ(タイル?)に依存しそうな気がしています。 2. そのときの目安のようなものがありましたら教えてください。 プログラムはとっても単純で、スタックやヒープなどはほとんど使わないものと仮定して頂いて結構です。 3. ファイルが推論可能かどうか、事前にプログラム等でチェックする方法はないでしょうか? どうぞよろしくお願いいたします。
回答: 追加で調査しました。 結局、Cameraなどを利用してしまうと、Heapがほとんどなく、結局NNCのnnbファイルを置くエリアが数十バイトになってしまい、思うようなネットワークのAIが組めません。 ですが、Spresenseの1.5MBのメモリのWorker部分には、まだ、空きがあることが多いようです。 そこで、そのエリアからメモリをとってみました。 を見てもわかりにくいのですが、exampleを参考に、Shared RAMを取得します。 ``` mpshm_t shm; int ret = mpshm_init(&shm, 0, 1024*512); int8_t* buf = mpshm_attach(&shm, 0); ``` このような感じで、512kBの仮想空間のエリアの取得をmalloc代わりに行うと、 ``` size = nnbfile.size(); ``` のサイズが、512kBより小さければ、 ``` _network = buf; ``` とすれば、512kBのnnbファイルを置くことができるようです。 これで、かなり大きなネットワークのAIが組めますね。