Coelacanth's Dream

Versatile Processing Unit を搭載する Intel Meteor Lake

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 XKeem BayThunder Bay にも使われているが、それらにおける VPUVision 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 0x7D1Dopenvinotoolkit/vpux-plugin だと VPUX37XX (VPU3720) として管理されている。

openvinotoolkit/vpux-plugin では、VPUVPUNN::VPUDevice::*, InferenceEngine::VPUXConfigParams::VPUXPlatform::*, VPU::ArchKind::* でそれぞれ管理しており、Keem BayVPUXPlatform::{VPU3400, VPU3700}ArchKind::VPUX30XXThunder BayVPUXPlatform::{VPU3800, VPU3900}ArchKind::VPUX311X され、IPバージョンに相当する VPUDevice は両者 VPU_2_0 とされている。1 2
Meteor Lake VPUKeem BayThunder 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

参考リンク