メインコンテンツまでスキップ

プロセッサのバックエンド

Modalix SoCには複数のプロセッサがあり、それぞれが推論パイプラインの異なる部分に適しています。Neatフレームワークのプランナーは、各ステージで実行される処理に基づいて、1つ(または一連の)プロセッサを選択します。このページでは、各バックエンドとその典型的なパイプラインにおける役割について説明します。

A65 — アプリケーションコア

Linuxを実行する標準のARM A65コア。フレームワークのメインプロセス、すべてのアプリケーションコード、およびほとんどの非加速GStreamer要素がここで実行されます。

使用用途:

  • Graph / Run イベントループ。
  • ファイル/RTSP/ネットワークI/O。
  • 診断用タップとプル側のアプリケーションコード。
  • 加速されたステージ間の軽量な連携。

EV74 / CVU — ビジョン計算ユニット

ベクトル演算に最適化されたDSPスタイルのプロセッサ。フレームワークでは、場所によってEV74またはCVU(Compute Vision Unit)と呼びます。SIMD形式でありながら、MLAで処理するほど大きくないカーネルに使用されます。具体的には、前処理(リサイズ、カラー変換、正規化)、テッセレーション/非テッセレーション/量子化/逆量子化の境界カーネル、統合された前処理(Generic Preproc)、およびBoxDecode後処理などです。

EV74の処理は、ステージごとのCVU送信スレッドによって実行されます。カーネルバイナリは、モデルアーカイブ(lib/)の一部です。

MLA — 機械学習アクセラレータ

Modalix MLA。モデルのコンパイルされた重みとグラフがここに格納されます。MLA送信スレッドによって処理が実行され、EV74(または量子化ステージ)からテッセレーションされた入力を受け取り、非テッセレーションされた出力を下流に送信します。

MLAの処理には、次の2つの種類があります。

  • MLA推論 — メインのモデルグラフ。
  • MLA事前処理/統合演算 — 契約で許可されている場合、MLAにコンパイルされる事前/事後処理カーネル(データ型コントラクトの「MLA tess」列)。

MLASHM — MLA共有メモリ

MLAが最低遅延で読み取ることができる、特殊なメモリ領域。可能な限り、MLAへの入力として使用されるバッファは、MLASHMセグメントから割り当てられます。プランナーは、EV74側の前処理がMLASHMに直接書き込むようにすることで、MLAが転送なしでデータを消費できるようにします。

APU — オーディオ処理ユニット

オーディオパスおよび、スカラー演算でSIMD演算の恩恵を受ける一部の前処理ステージで使用されます。フレームワークのオーディオノード(リサンプリング、コーデック)は、APUをターゲットとします。

TVM — TVMコンパイルによるフォールバック

MLAのコンパイラが生成できない演算の場合、フレームワークはTVMコンパイルされたCPUカーネルにフォールバックできます。ルートプランでは、TVMターゲットステージとして表示されます。MLAの実行よりも遅いですが、MLAバックエンドがサポートしていない演算をMPK契約で記述している場合に、確実に処理を実行できます。

M4 — コーディネーターコア

低レベルの調整(A65とアクセラレータ間のRPMsg、ウォッチドッグ、ハードウェアシーケンス)に使用される小型のCortex-M4。アプリケーションコードはM4で直接実行されることはありません。フレームワークは、OSレイヤーを通じてM4と通信します。

プランナーがどのように選択するか

グラフが構築されると、ルートプランナーは各ステージをたどり、次のように問い合わせます。

  1. このカーネルを実行できるプロセッサはどれですか? — MLA推論はMLAに、前処理はEV74に、I/OはA65に割り当てられます。
  2. 最もコスト効率の良い方法は? — データ転送を最小限に抑えます(プランナーは、どうしても必要な場合にのみConversionKind::Transferを挿入します)。
  3. 隣接するステージでセグメントを共有できますか?メモリモデルによって、可能な範囲が決定されます。プランナーはこれを使用します。

出力は、各ステージがターゲットプロセッサとセグメントポリシーを持つRouteGraphです。これはGraph::describe()を使用して確認できます。

詳細

  • 「プロセッサバックエンド」— デザインの詳細解説の第21節と第22節を参照。
  • 「CVUカーネルとグラフカタログ」— CVUカーネルを参照。
  • 「メモリモデル」— メモリモデルを参照。
  • Graph::describe() — ルートプランをダンプします。