Intel dGPU 単体の市場への投入が近付くにつれ、Intel GPUドライバーでは x86(-64) 以外の CPU を採用するプラットフォームへの対応が進められている。
dGPU 単体としてはすでに Intel DG1 /Iris Xe MAX /SG1 (Xe-LP) がいるが、それらはほとんどが限定したプラットフォームでのリリースであり、また専用の UEFI/BIOS をインストールしたシステム (CPU+M/B) を必要としていた。1
そのため当時は、x86(-64) 以外の対応は優先事項ではなかったと思われる。
また専用の UEFI/BIOS を必要することについて、DG1 の PCI OpROM と VBIOS のイメージレイアウト、Intel の Subrata Banik 氏より Coreboot に投稿された、dGPUカード内部に埋め込まれた PCI OpROM への対応が関係しているのではないかと考えているが、公式にはっきりと説明されている訳ではなく、確証はない。2
Index
+/** + * + DASH+G OPROM IMAGE LAYOUT + + * +--------+-------+---------------------------+ + * | Offset | Value | ROM Header Fields +-----> Image 1 (CSS) + * +--------------------------------------------+ + * | 0h | 55h | ROM Signature Byte1 | + * | 1h | AAh | ROM Signature Byte2 | + * | 2h | xx | Reserved | + * | 18+19h| xx | Ptr to PCI DataStructure | + * +----------------+---------------------------+ + * | PCI Data Structure | + * +--------------------------------------------+ + * | . . . | + * | . . . | + * | 10 + xx + Image Length | + * | 14 + xx + Code Type | + * | 15 + xx + Last Image Indicator | + * | . . . | + * +--------------------------------------------+ + * | MEU BLOB | + * +--------------------------------------------+ + * | CPD Header | + * | CPD Entry | + * | Reserved | + * | SignedDataPart1 | + * | PublicKey | + * | RSA Signature | + * | SignedDataPart2 | + * | IFWI Metadata | + * +--------+-------+---------------------------+ + * | . | . | . | + * | . | . | . | + * +--------------------------------------------+ + * | Offset | Value | ROM Header Fields +-----> Image 2 (Config Data) (Offset: 0x800) + * +--------------------------------------------+ + * | 0h | 55h | ROM Signature Byte1 | + * | 1h | AAh | ROM Signature Byte2 | + * | 2h | xx | Reserved | + * | 18+19h| xx | Ptr to PCI DataStructure | + * +----------------+---------------------------+ + * | PCI Data Structure | + * +--------------------------------------------+ + * | . . . | + * | . . . | + * | 10 + xx + Image Length | + * | 14 + xx + Code Type | + * | 15 + xx + Last Image Indicator | + * | . . . | + * | 1A + 3C + Ptr to Opregion Signature | + * | . . . | + * | . . . | + * | 83Ch + IntelGraphicsMem | <---+ Opregion Signature + * +--------+-----------------------------------+ + * + * intel_oprom_verify_signature() verify OPROM signature. + * @opreg: pointer to opregion buffer output. + * @opreg_size: pointer to opregion size output. + * @dev_priv: i915 device. + */
対応における課題
現時点で、x86(-64) 以外のプラットフォームへのサポートを進める Intel GPUドライバーと関連ライブラリには、Mesa3D、IGC (Intel Graphics Compiler)、gmmlib (Graphics Memory Management Library)、Compute Runtime が確認できる。
サポートに追加される対象は主に ARM64 (aarch64) となっている。
- intel: Support compiling on non-x86 (!15309) · Merge requests · Mesa / mesa · GitLab
- Introduce ARM64 Support for the Library (#91) · intel/gmmlib@32f4cfc
- Enable ARM build · intel/intel-graphics-compiler@eda4042
- Add neon intrinsics for aarch64 · intel/compute-runtime@cf90603
まだ正式に対応してないため作業途中 (WIP) と思われるが、内容としては主に x86(-64) 固有の命令を直接使っている部分を、複数のアーキテクチャに対応したライブラリに置き換えるか、マクロで制御しコードを分ける、といった対応を取っている。
対応が必要な命令として挙げられているものには、主に SSE/2/3/4.1/4.2
,CLFLUSH
, CPUID
がある。
SSE
は SIMD命令として CPU側の計算や変換処理、CLFLUSH
はキャッシュラインをメモリにフラッシュし、同期を取るため、CPUID
は CPU の拡張命令、機能の対応フラグの取得に使われている。
gmmlib では sse2neon を導入することで SSE系命令を Arm NEON 命令に置き換えている。
Mesa3D では、一度最低限の対応を行うマージリクエストが開設されたが、将来的に non x86(-64) + Intel dGPU というプラットフォームが出てくる可能性は非常に高いとしつつも、まだ Intel dGPU、Intel Arc Aシリーズはリリースされていないため、今は閉じられている。
また、私見ではあるが、PCIeスロットが実装された non x86(-64) プラットフォームには Ampere eMAG (ARM64/aarch64)3 や Raptor Talos II (POWER9) 4 存在するが、一般的に普及しているものではない。
また、Intel Arc Aシリーズのリリース後もしばらくはそちらの対応にリソースを割きたいという考えもドライバー開発者にはあるのではないかと思われる。
参考リンク
-
Intel Iris Xe Discrete Card Will Only Work With Select CPUs and Motherboards - Legit Reviews ↩︎
-
device: Add new Kconfig VGA_ROM_RUN_DEFAULT for mainboard user (Iecb2fcdb) · Gerrit Code Review ↩︎
-
Conclusion - All Eyes on an Altra System - Avantek’s Arm Workstation: Ampere eMAG 8180 32-core Arm64 Review ↩︎