Intel GPU のメディア関連機能 (動画エンコード/デコード、ポストプロセッシング) をサポートする VA-API (Video Acceleration API) 向けドライバー、Intel(R) Media Driver で Alchemist/DG2 、Ponte Vecchio 、Xe-HP SDV のサポートが進められている。
そして masterブランチに取り込まれた変更の中に、Alchemist/DG2 では AV1コーデックの HWエンコードに対応していることを示唆するものがあった。
以下が該当部となるが、エンコード機能に関する部分は条件付きコンパイル (#ifdef IGFX_DG2_ENABLE_NON_UPSTREAM
) で制御されており、記述はあるが追加されていないファイルもあり、まだ media-driver に完全なサポートは追加されていないものと思われる。
VAStatus MediaLibvaCapsDG2::LoadAv1EncProfileEntrypoints() { VAStatus status = VA_STATUS_SUCCESS; #ifdef IGFX_DG2_ENABLE_NON_UPSTREAM #ifdef _AV1_ENCODE_VDENC_SUPPORTED AttribMap *attributeList = nullptr; if (MEDIA_IS_SKU(&(m_mediaCtx->SkuTable), FtrEncodeAV1Vdenc)|| MEDIA_IS_SKU(&(m_mediaCtx->SkuTable), FtrEncodeAV1Vdenc10bit420)) { status = CreateEncAttributes(VAProfileAV1Profile0, VAEntrypointEncSliceLP, &attributeList); DDI_CHK_RET(status, "Failed to initialize Caps!");
@@ VAStatus MediaLibvaCapsDG2::CheckEncodeResolution( case VAProfileAV1Profile0: case VAProfileAV1Profile1: if ((width > CODEC_8K_MAX_PIC_WIDTH) || (width < m_encMinWidth) || (height > CODEC_8K_MAX_PIC_HEIGHT) || (height < m_encMinHeight)) { return VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED; } break;
あくまでも現時点での情報となるが、Alchemist/DG2 は 8192x8192 までの AV1エンコードに対応しているように読み取れる。
また、Ponte Vecchio 、Xe-HP SDV 向けにも同様のファイルが追加されているが、AV1エンコードに関する記述は無い。この世代では Alchemist/DG2 のみのサポートとなるのだろうか?
Alchemist/DG2・PVC L3Cache
L3キャッシュに関する記述も追加されている。
Alchemist/DG2 ではバンクあたり 512KB、Wayあたり 4KB、セクションあたり 2-Way の構成を採る。Ponte Vecchio (PVC) も同様の構成とされている。1
#define DG2_L3_CONFIG_COUNT 6 // 4KB per Way for DG2, two Way per section static const L3ConfigRegisterValues DG2_L3_PLANES[DG2_L3_CONFIG_COUNT] = { // Rest R/W RO UTC CB Sum (in KB) {0x00000200, 0, 0, 0}, // 512 0 0 0 0 512 {0xC0000000, 0x40000000, 0, 0}, // 384 0 0 128 0 512 {0xF0000000, 0x00000080, 0, 0}, // 480 0 0 0 32 512 {0x80000000, 0x80000000, 0, 0}, // 256 0 0 256 0 512 {0x40000000, 0x00000080, 0, 0}, // 0 128 352 0 32 512 {0x80000000, 0x70000080, 0, 0}, // 256 0 0 224 32 512 };
Tiger Lake 等 Xe-LP ではバンクあたり 480KB、Way あたり 4KB、セクションあたり 2-Way、
DG1 ではバンクあたり 2048KB (2MB)、Way あたり 16KB、セクションあたり 2-Way と構成。
DGPU としての比較では、Alchemist/DG2, Ponte Vecchio の L3キャッシュは DG1 より、バンクあたりの規模で小さいと言えるが、L3キャッシュ帯域ではバンク数が多い方が有利と考えられる。
ローカルメモリを持つ dGPU になったことで、Xe-LP からメモリバス幅が増えたことも関係するだろう。
Intel GPU では L3キャッシュバンク内部を、データキャッシュやリードオンリーキャッシュ、Unified Tile Cache (UTC)、Command Buffer (CB) といった用途ごとに分けて割り当てる方式を採っている。
DG1 では L3キャッシュバンクの割り当て設定は 3パターンだったが、Alchemist/DG2, PVC では 6パターンであるため、より用途に合わせた割り当てが可能となっている。
それと、DG1 は内蔵 GPU を想定した Xe-LP から構成をほとんど変えずに L3キャッシュを増やした結果、バンクあたり 2048KB、全体では 16MB というサイズになったと考えられる。
// 16KB per Way for DG1, two Way per section static const L3ConfigRegisterValues DG1_L3_PLANES[DG1_L3_CONFIG_COUNT] = { // Rest DC RO Z Color UTC CB Sum (in KB) {0x00000200, 0, 0, 0}, // 2048 0 0 0 0 0 0 2048 {0x80000000, 0x7C000020, 0, 0}, // 1024 0 0 0 0 992 32 2048 {0x0101F000, 0x00000020, 0, 0}, // 0 1024 992 0 0 0 32 2048 };
L3$ | Xe-LP (TGL/RKL/ADL) |
DG1 | Xe-HPG/HPC (Alchemist/DG2, PVC) |
---|---|---|---|
Up to L3$ size | 3840KB | 16384KB (16MB) | ? |
L3$ size per bank | 480KB | 2048KB | 512KB |
size per way | 4KB | 16KB | 4KB |
way count per section | 2-Way | 2-Way | 2-Way |