Linux & Edge AI

概要

AXCL は、AXERA チッププラットフォーム上でディープニューラルネットワーク推論、トランスコードなどのアプリケーションを開発するための C 言語 / Python API ライブラリで、実行リソース管理、メモリ管理、モデルの読み込みと実行、メディアデータ処理などの API を提供します。以下はその論理アーキテクチャ図です。

概念

AXCL ランタイムライブラリには Device、Context、Stream、Task などの基本概念があり、その関係は以下の図の通りです。

  • Device:計算およびメディア処理を提供するハードウェアデバイスで、PCIe インターフェースを介してホストと接続します。
    • Device のライフサイクルは初回の axclrtSetDevice 呼び出しで開始します。
    • Device は参照カウントでライフサイクルを管理し、axclrtSetDevice で + 1、axclrtResetDevice で - 1 されます。
    • 参照カウントがゼロになると、当該プロセス内で Device 資源は使用不可になります。
    • 複数の Device が存在する場合、各 Device 間でメモリは共有できません
  • Context:実行コンテキストコンテナで、Stream やメモリなどのライフサイクルを管理し、アプリケーションスレッドにバインドされます。1 つの Context は必ず 1 つの Device に所属します。Context には暗黙と明示の 2 種類があります:
    • 暗黙的 Context(デフォルト Context):
      • axclrtSetDevice でデバイスを指定すると、暗黙的 Context が作成され、axclrtResetDevice の参照カウントがゼロになると自動的に破棄されます。
      • 1 つの Device に暗黙的 Context は 1 つだけで、axclrtDestroyContext で破棄できません。
    • 明示的 Context:
      • axclrtCreateContext で作成し、axclrtDestroyContext で破棄します。
      • プロセス内では Context を共有でき、axclrtSetCurrentContext で切り替え可能。各スレッドで明示的 Context を作成・破棄することを推奨
  • Stream:実行タスクフローで、Context に所属し、同一 Stream 内のタスクは順序通りに実行されます。Stream も暗黙と明示の 2 種類があります:
    • 暗黙的 Stream(デフォルト Stream):
      • 各 Context に 1 つの暗黙的 Stream が作成され、ライフサイクルは Context に従属します。
      • ネイティブ sdk モジュール(例:AXCL_VDEC_XXXAXCL_SYS_XXXなど)は暗黙的 Stream を使用します。
    • 明示的 Stream:
      • axclrtCreateStream で作成し、axclrtDestroyStream で破棄します。
      • 所属先 Context が破棄された場合、その Stream は未破棄でも使用不可になります。
  • Task:Device のタスク実行実体であり、アプリケーションからは見えません。

アプリケーションスレッドと Context

  • アプリケーションスレッドは必ず 1 つの Context にバインドされ、全ての Device タスクは Context を基盤として実行されます。
  • 1 スレッド内には常に 1 つの Context が存在し、その Context は当該スレッドでタスクを実行する Device にバインドされています。
  • 1 スレッド内で axclrCreateContext により複数の Context を作成可能ですが、同時使用できるのは 1 つのみです。複数作成すると、最後に作成された Context がバインドされます。
  • プロセス内では axclrtSetCurrentContext により現在のスレッドに Context をバインドできます。複数回連続で呼び出すと、最後の Context がバインドされます。
  • マルチスレッド環境では、各スレッドで明示的に Context を作成することを推奨します。
  • デバイス切り替えは axclrtSetCurrentContext を推奨します。
ヒント
SDK の axcl/sample/runtime に、スレッド内での Context 作成と破棄方法のサンプルコードがあります。
Page Tools
PDF
On This Page