JAJAA95 November   2025 AM62A7 , AM67A , TDA4AL-Q1 , TDA4VE-Q1 , TDA4VEN-Q1 , TDA4VH-Q1 , TDA4VM , TDA4VP-Q1

 

  1.   1
  2.   概要
  3.   商標
  4. 1はじめに
  5. 2C7xMMA DDR 使用状況の分析と最適化
  6. 3J722S と MobileNet に基づくテスト
    1. 3.1 ファームウェアのコンパイルと環境設定
    2. 3.2 モデルのエクスポートとオンボード推論
    3. 3.3 メモリ統計
    4. 3.4 メモリマップの変更
    5. 3.5 SDK の再コンパイルとボードへの更新
    6. 3.6 オンボードテスト
  7. 4まとめ
  8. 5参考資料

C7xMMA DDR 使用状況の分析と最適化

ボード上でモデルを実行する際にデバッグレベルを設定すると、モデルの実行中にメモリ要件を出力できます。/opt/tidl_test/TI_DEVICE_armv8_test_dl_algo_host_rt.out を使用して debugTraceLevel を 2 に設定するか、edgeai-tidl -tools を使用して debug_level を 2 に設定する、または TIOVX アプリケーションを使用する際に TIDL_CreateParams で traceLogLevel を 2 に設定します。モデルを推測する前に、/opt/vision_apps/vision_apps_init.sh を実行して C7xMMA ロギングを有効にします。この時点で、モデルを推測すると、下図のようなログが生成されます。これらのログは、TIDL の各部分に割り当てられるストレージ容量を示しています。

コンピュータ AI によって生成されたコンテンツのスクリーンショットが正しくない可能性があります。図 2-1 モデル実行時におけるメモリ空間の割り当て

この表は、メモリ割り当てレコード、つまり memRec 情報の印刷を示しています。MemRec には 16 個のメモリレコードがあり、モデル操作中にさまざまなプロセスが占有する記憶領域を記録します。以下では、各説明の目的について簡単に説明します。

記録 説明 キャッシュ可否 属性
0 TIDL インスタンス なし 永続
1 TIDL_CreateParams により占有されている空間 あり 永続
2 L1D SRAM - スクラッチ
3 L2 SRAM - スクラッチ
4 L3 SRAM - スクラッチ
5 重みなど、各レイヤの固定入力を格納 あり 永続
6 中間層の出力結果 (モデル変換用) なし スクラッチ
7 中間層の出力結果 (モデル推論) なし 永続
8 各レイヤに一時的に使用される領域で、出力値を蓄積し、最大値を取得するために使用。 なし スクラッチ
9 統計情報と一部の記録情報を保存 なし スクラッチ
10 各レイヤの sTIDL_AlgLayer_t の合計で、各レイヤの基本情報を記録 あり 永続
11 各レイヤのアルゴリズム処理で使用される領域 あり スクラッチ
12 プリエンプションを処理する際にコンテキストを格納 なし 永続
13 ネットワーク構造 あり 永続
14 マルチコアモードでのマルチコア同期に使用 なし 永続
15 畳み込みパラメータなどの定数を格納 あり 永続

CPU の動作効率を向上させるためには、DDR を可能な限りキャッシュ可能に設定する必要があります。他のコアからアクセスする必要があるメモリについては、マルチコアシステムでキャッシュコヒーレンシの問題を回避するために、キャッシュ不可で設定する必要があります。永続は、メモリブロック内のデータが長期間変更されないことを示し、スクラッチはデータが頻繁に変化することを示します。

マニュアルを参照してメモリマップを構成する場合、C7 ヒープを使用するごとに次の 4 つのサイズを設定する必要があることに注意してください。

  • c7x_x_ddr_local_heap_size は、キャッシュ可能の永続メモリブロックに対応します
  • c7x_x_ddr_scratch_size は、キャッシュ可能のスクラッチメモリブロックに対応します
  • c7x_x_ddr_local_heap_non_cacheable_size は、キャッシュ不可の永続メモリブロックに対応します
  • c7x_x_ddr_scratch_non_cacheable_size は、キャッシュ不可のスクラッチメモリブロックに対応します

図 1 のメモリブロックを、キャッシュ可能で永続的かスクラッチかどうかに応じて分類して合計するだけで、上記の 4 つのブロックに対して設定する必要があるそれぞれのサイズを取得できます。複数の C7xMMA を搭載したチップでは、各 C7x はこの方法に従って独自の 4 つのメモリブロックを設定する必要があります。

また、gen_linker_mem_map.py 内に C7x ヒープに加えて、c7x_x_x_ddr_size という名前のメモリブロックがいくつか存在することに気付くかもしれません。これらのメモリブロックは、IPC 通信、MCU 起動用ファームウェア、基本的なランタイムが必要なスタックなどを保存します。実際の使用方法に基づいて、必要に応じて数を減らすことができます。

メモリマップを設定する場合は、ドキュメントhttps://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j722s/11_01_00_04/exports/docs/psdk_rtos/docs/user_guide/developer_notes_memory_map.htmlに記載されているメモリのアライメントと最小メモリの要件に厳密に従ってください。