Intel の Jacek Lawrynowicz 氏により、Intel クライアント向け第14世代プロセッサ Meteor Lake に搭載される Versatile Processing Unit (VPU) の DRM (Direct Rendering Manager) ドライバーを Linux Kernel に追加するパッチが dri-dev メーリングリストに投稿されている。
Jacek Lawrynowicz 氏は VPU の動作は内蔵 GPU に近いとしており、ドライバーを gpu/drm
サブシステムの一部としている。DRMドライバーの初期化処理、IOCTL ハンドリング、メモリ管理機能を再利用することで、Linux Kernel 内のコードの重複を抑えることができる。
User Mode Driver (UMD) は Level Zero API ドライバーと OpenVINOプラグインで構成される予定であり、両方とも 2022Q3 の終わりまでにはオープンソース化されるとしている。
VPU のファームウェアはクローズドソースなバイナリブロブとして配布される。
VPU
Versatile Processing Unit (VPU) は CPU/SoC に内蔵された、Computer Vision やディープラーニングアプリケーション向けの AI推論処理アクセラレータとなる。
VPU の名は、Myriad X や Keem Bay、Thunder Bay にも使われているが、それらにおける VPU は Vision Processing Unit の略とされている。
しかしパッチから Meteor Lake に搭載される VPU も、実行エンジンは SHAVE (Streaming Hybrid Architecture Vector Engine) と思われ、意味合いとしては従来の VPU からそれほど変わらないように思う。
Meteor Lake VPU の IPバージョンは v2.7 とされ、今回のパッチは VPU IP v2.7 をサポート対象としている。
+#define PCI_VENDOR_ID_INTEL 0x8086 +#define PCI_DEVICE_ID_MTL 0x7d1d + +#define VPU_GLOBAL_CONTEXT_MMU_SSID 0 +#define VPU_CONTEXT_LIMIT 64 +#define VPU_NUM_ENGINES 2
また、Meteor Lake VPU の DeviceID 0x7D1D
は openvinotoolkit/vpux-plugin だと VPUX37XX (VPU3720)
として管理されている。
openvinotoolkit/vpux-plugin では、VPU を VPUNN::VPUDevice::*, InferenceEngine::VPUXConfigParams::VPUXPlatform::*, VPU::ArchKind::*
でそれぞれ管理しており、Keem Bay は VPUXPlatform::{VPU3400, VPU3700}
と ArchKind::VPUX30XX
、Thunder Bay は VPUXPlatform::{VPU3800, VPU3900}
と ArchKind::VPUX311X
され、IPバージョンに相当する VPUDevice
は両者 VPU_2_0
とされている。1 2
Meteor Lake VPU は Keem Bay と Thunder Bay から世代が進んだアーキテクチャとなる。
// KMD is setting usDeviceID from VpuFamilyID.h #define IVPU_MYRIADX_DEVICE_ID 0x6200 // MyriadX device #define IVPU_KEEMBAY_DEVICE_ID 0x6240 // KeemBay device #define IVPU_VPUX37XX_DEVICE_ID 0x7D1D // VPUX37XX device #define IVPU_VPUX4000_DEVICE_ID 0x643E // VPUX4000 device std::string name; switch (properties.deviceId) { case IVPU_MYRIADX_DEVICE_ID: name = "2700"; break; case IVPU_KEEMBAY_DEVICE_ID: name = "3700"; break; case IVPU_VPUX37XX_DEVICE_ID: name = "3720"; break;
Meteor Lake VPU では Myriad X と同様にマイクロコントローラに RISC系 CPU を採用している。Myriad X では LEON4 SPARC V8 2-Core を採用しており、それらが RTOS のスケジューリングやパイプライン管理、センサー操作を担当していた。
Memory Management Unit (MMU) は Arm MMU-600 ベースとしている。
Neural Compute Subsystem (NCS) には実際の処理を行うコンピュートエンジン、コピーエンジンが位置する。
Keem Bay では DPU (Data Processing Unit) を最大 20基搭載しており、Meteor Lake VPU でも引き続き搭載するものと思われる。DPU について詳細は公開されていないが、Keem Bay 採用製品の情報からニューラルネットワークのスパースや圧縮処理を担当している。
openvinotoolkit/vpux-plugin によれば、Meteor Lake VPU では新たに BF16フォーマットや混合精度をサポートしている。
Keem Bay からではあるが、画像認識以外に推論処理も主なターゲットとなり、Meteor Lake VPU では推論処理に向けた機能が追加されている。そのため Vison Processing Unit から Versatile Processing Unit (Versatile, 多才な、多用途) へと名前を変えたのかもしれない。3 4
参考リンク
-
vpux-plugin/dpu_tiler.cpp at 411d6bb1e1ff6daa146954b75b149fdc7c1bdcd7 · openvinotoolkit/vpux-plugin ↩︎
-
vpux-plugin/compiler.cpp at 411d6bb1e1ff6daa146954b75b149fdc7c1bdcd7 · openvinotoolkit/vpux-plugin ↩︎
-
vpux-plugin/nce_invariant.cpp at 411d6bb1e1ff6daa146954b75b149fdc7c1bdcd7 · openvinotoolkit/vpux-plugin ↩︎
-
vpux-plugin/nce_sparsity.cpp at 411d6bb1e1ff6daa146954b75b149fdc7c1bdcd7 · openvinotoolkit/vpux-plugin ↩︎