Coelacanth's Dream

Nova Lake の GPU コアアーキテクチャは Xe3

インターネットの一部では Linux Kernel へのパッチを根拠に Intel の次世代プロセッサ Nova Lake に搭載される GPU を、Panther LakeWildcat Lake と同様の Xe3 ではなく、データセンター向け GPU に採用される予定の Xe3P だとしているが、実際には Xe3 だと思われる。

ここでの新しい根拠は intel/cm-compiler の変更内容となる。

Nova Lake のサポートを追加するパッチにおいても Nova Lake xe3-lpg とされ、その後に追加された Xe3P のサポートを追加するパッチにおいても Xe3P の新命令に Nova Lake はサポートしていないとされている。
Xe3P では XMX (Xe Matrix eXtensions) で実行される行列積和演算命令 DPAS (Dot Product and Accumulate Systolic) に FP8/FP4 やマイクロスケーリングフォーマット (MXFP4/MXFP8 等) 関連の命令が追加されている。

    --- a/clang/lib/Driver/ToolChains/Arch/GenXPlatforms.cpp
    +++ b/clang/lib/Driver/ToolChains/Arch/GenXPlatforms.cpp
    @@ -15,6 +15,7 @@ using clang::driver::tools::GenX::encodeGmdId;
     
     // clang-format off
     static const std::unordered_map<std::string, uint32_t> ReleaseId = {
    +  {"xe3-lpg", encodeGmdId(30, 5, 4)},
       {"xe2-lpg", encodeGmdId(20, 4, 4)},
       {"xe2-hpg", encodeGmdId(20, 2, 0)},
       {"xe-lpgplus", encodeGmdId(12, 74, 4)},
    @@ -30,6 +31,11 @@ static const std::unordered_map<std::string, uint32_t> ReleaseId = {
     };
     
     static const std::unordered_map<std::string, uint32_t> DeviceId = {
    +  {"nvl-u", encodeGmdId(30, 5, 4)},
    +  {"nvl-h", encodeGmdId(30, 5, 4)},
    +  {"nvl-s", encodeGmdId(30, 4, 4)},
    +  {"nvl-hx", encodeGmdId(30, 4, 4)},
    +  {"nvl-ul", encodeGmdId(30, 4, 4)},
    +  { encodeGmdId(35, 11, 0),
    +    { /*.HasFP64 =*/ true,
    +      /*.HasBFloat16 =*/ true,
    +      /*.HasSLMCasInt64 =*/ true,
    +      /*.HasBfn =*/ true,
    +      /*.HasDp4a =*/ true,
    +      /*.HasDpas =*/ true,
    +      /*.HasDpasw =*/ false,
    +      /*.HasDpasFp16 =*/ true,
    +      /*.HasDpasBf16 =*/ true,
    +      /*.HasDpasTf32 =*/ true,
    +      /*.HasSrndFp32ToFp16 =*/ true,
    +      /*.HasMoveBf8 =*/ true,
    +      /*.HasMoveHf8 =*/ true,
    +      /*.HasSrndFp16ToBf8 =*/ true,
    +      /*.HasDpasBf8 =*/ true,
    +      /*.HasDpasHf8 =*/ true,
    +      /*.HasDpasFp4 =*/ true,
    +      /*.HasBdpas =*/ true,
    +      /*.HasBF16Atomic =*/ true,
    +      /*.HasShuffleIndex4 =*/ true,
    +      /*.HasDownScale =*/ true,
    +      /*.HasLfsr =*/ true,
    +      /*.HasTanh =*/ true,
    +      /*.HasSigmoid =*/ true,
    +      /*.HasSrndBf16ToBf8 =*/ true,
    +      /*.HasSrndBf16ToHf8 =*/ true,
    +      /*.HasSrndFp16ToHf8 =*/ true,
    +      /*.GrfWidth =*/ 512,
    +      /*.SupportedGrfNums =*/ {32,64,96,128,160,192,256,512},
    +      /*.MaxSLMSize =*/ 384, }, },
       { encodeGmdId(30, 5, 4),
         { /*.HasFP64 =*/ true,
           /*.HasBFloat16 =*/ true,
    @@ -55,6 +103,19 @@ static const std::unordered_map<uint32_t, TargetProperties> TargetProps = {
           /*.HasMoveBf8 =*/ true,
           /*.HasMoveHf8 =*/ true,
           /*.HasSrndFp16ToBf8 =*/ true,
    +      /*.HasDpasBf8 =*/ false,
    +      /*.HasDpasHf8 =*/ false,
    +      /*.HasDpasFp4 =*/ false,
    +      /*.HasBdpas =*/ false,
    +      /*.HasBF16Atomic =*/ false,
    +      /*.HasShuffleIndex4 =*/ false,
    +      /*.HasDownScale =*/ false,
    +      /*.HasLfsr =*/ false,
    +      /*.HasTanh =*/ false,
    +      /*.HasSigmoid =*/ false,
    +      /*.HasSrndBf16ToBf8 =*/ false,
    +      /*.HasSrndBf16ToHf8 =*/ false,
    +      /*.HasSrndFp16ToHf8 =*/ false,
           /*.GrfWidth =*/ 512,
           /*.SupportedGrfNums =*/ {32,64,96,128,160,192,256},
           /*.MaxSLMSize =*/ 128, }, },

Nova Lake の GPU 部において Xe3、Panther Lake や Wildcat Lake よりも進んだ部分となるのはあくまでもディスプレイエンジン、メディアエンジンだと思われる。