以下の内容はhttps://vengineer.hatenablog.com/entry/2025/02/03/081428より取得しました。


NVIDIA DIGITS GB10のGPUは、サーバー用のな?

はじめに

NVIDIA RTX 5090/5080の販売が始まったことにより、

も更新されています。

今回追加されたものは、

  • RTX 5090
  • RTX 5090 D
  • RTX 5080
  • B200

  • GB202/GB203/GB205/GB206/GB207

そして、

  • GB10B

え、GB10Bって、何?

ということで、GB10Bについて、妄想してみました。

それでは、

Let's 妄想

GB10B

GB10B から DIGITS GB10 の SoC と妄想。

GB10Bは、ここによると、こんな感じ

const CLASSDESCRIPTOR *
gpuGetClassDescriptorList_GB10B(POBJGPU pGpu, NvU32 *pNumClassDescriptors)
{
    static const CLASSDESCRIPTOR halGB10BClassDescriptorList[] = {
        { ACCESS_COUNTER_NOTIFY_BUFFER, ENG_GR(0) },
        { AMPERE_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { AMPERE_USERMODE_A, ENG_GPU },
        { BLACKWELL_A, ENG_GR(0) },
        { BLACKWELL_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { BLACKWELL_COMPUTE_A, ENG_GR(0) },
        { BLACKWELL_COMPUTE_A, ENG_GR(1) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(0) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(1) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(2) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(3) },
        { BLACKWELL_INLINE_TO_MEMORY_A, ENG_GR(0) },
        { FERMI_CONTEXT_SHARE_A, ENG_KERNEL_FIFO },
        { FERMI_TWOD_A, ENG_GR(0) },
        { FERMI_VASPACE_A, ENG_DMA },
        { G84_PERFBUFFER, ENG_BUS },
        { GF100_DISP_SW, ENG_SW },
        { GF100_HDACODEC, ENG_HDACODEC },
        { GF100_SUBDEVICE_INFOROM, ENG_GPU },
        { GF100_SUBDEVICE_MASTER, ENG_GPU },
        { GF100_TIMED_SEMAPHORE_SW, ENG_SW },
        { GF100_ZBC_CLEAR, ENG_KERNEL_MEMORY_SYSTEM },
        { GP100_UVM_SW, ENG_SW },
        { HOPPER_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { HOPPER_SEC2_WORK_LAUNCH_A, ENG_SEC2 },
        { HOPPER_USERMODE_A, ENG_GPU },
        { KEPLER_CHANNEL_GROUP_A, ENG_KERNEL_FIFO },
        { KEPLER_DEVICE_VGPU, ENG_GPU },
        { MMU_FAULT_BUFFER, ENG_GR(0) },
        { NV0060_SYNC_GPU_BOOST, ENG_GPU },
        { NV01_MEMORY_SYNCPOINT, ENG_KERNEL_DISPLAY },
        { NV01_MEMORY_VIRTUAL, ENG_DMA },
        { NV04_DISPLAY_COMMON, ENG_KERNEL_DISPLAY },
        { NV04_SOFTWARE_TEST, ENG_SW },
        { NV50_DEFERRED_API_CLASS, ENG_SW },
        { NV50_MEMORY_VIRTUAL, ENG_DMA },
        { NV50_P2P, ENG_BUS },
        { NV50_THIRD_PARTY_P2P, ENG_BUS },
        { NVA081_VGPU_CONFIG, ENG_GPU },
        { NVA084_KERNEL_HOST_VGPU_DEVICE, ENG_GPU },
        { NVC372_DISPLAY_SW, ENG_KERNEL_DISPLAY },
        { NVC77F_ANY_CHANNEL_DMA, ENG_KERNEL_DISPLAY },
        { NVC970_DISPLAY, ENG_KERNEL_DISPLAY },
        { NVC971_DISP_SF_USER, ENG_KERNEL_DISPLAY },
        { NVC973_DISP_CAPABILITIES, ENG_KERNEL_DISPLAY },
        { NVC97A_CURSOR_IMM_CHANNEL_PIO, ENG_KERNEL_DISPLAY },
        { NVC97B_WINDOW_IMM_CHANNEL_DMA, ENG_KERNEL_DISPLAY },
        { NVC97D_CORE_CHANNEL_DMA, ENG_KERNEL_DISPLAY },
        { NVC97E_WINDOW_CHANNEL_DMA, ENG_KERNEL_DISPLAY },
        { NV_CONFIDENTIAL_COMPUTE, ENG_CONF_COMPUTE },
        { RM_USER_SHARED_DATA, ENG_GPU },
        { TURING_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { TURING_USERMODE_A, ENG_GPU },
        { VOLTA_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { VOLTA_USERMODE_A, ENG_GPU },
    };

    #define HALGB10B_NUM_CLASS_DESCS (sizeof(halGB10BClassDescriptorList) / sizeof(CLASSDESCRIPTOR))

    #define HALGB10B_NUM_CLASSES 64

    ct_assert(NV0080_CTRL_GPU_CLASSLIST_MAX_SIZE >= HALGB10B_NUM_CLASSES);

    *pNumClassDescriptors = HALGB10B_NUM_CLASS_DESCS;
    return halGB10BClassDescriptorList;
}

キーとなる部分は、

        { BLACKWELL_A, ENG_GR(0) },
        { BLACKWELL_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { BLACKWELL_COMPUTE_A, ENG_GR(0) },
        { BLACKWELL_COMPUTE_A, ENG_GR(1) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(0) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(1) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(2) },
        { BLACKWELL_DMA_COPY_A, ENG_CE(3) },

NVIDIAの計算器は、XXX_COMPUTE_Y になります。XXXが BLACKWELL なので、BLACKWELLシリーズです。_Yが _A なので、GB100やGB102と同じです。つまり、サーバー用と同じ計算器ということ。

ちなみに、GB202/203/205/206/207 では、ここによると、

        { BLACKWELL_B, ENG_GR(0) },
        { BLACKWELL_B, ENG_GR(1) },
        { BLACKWELL_B, ENG_GR(2) },
        { BLACKWELL_B, ENG_GR(3) },
        { BLACKWELL_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO },
        { BLACKWELL_CHANNEL_GPFIFO_B, ENG_KERNEL_FIFO },
        { BLACKWELL_COMPUTE_B, ENG_GR(0) },
        { BLACKWELL_COMPUTE_B, ENG_GR(1) },
        { BLACKWELL_COMPUTE_B, ENG_GR(2) },
        { BLACKWELL_COMPUTE_B, ENG_GR(3) },
        { BLACKWELL_COMPUTE_B, ENG_GR(4) },
        { BLACKWELL_COMPUTE_B, ENG_GR(5) },
        { BLACKWELL_COMPUTE_B, ENG_GR(6) },
        { BLACKWELL_COMPUTE_B, ENG_GR(7) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(0) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(1) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(2) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(3) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(4) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(5) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(6) },
        { BLACKWELL_DMA_COPY_B, ENG_CE(7) },

BLACKWELL_COMPUTE_B です。

また、BLACKWELL_COMPUTE_A が2つあります。これって、GB10Bが MIG に対応していることを示します。

GB10BのMIG関連のコードは、ここにありました。

下記のようなコメントがありました。

 * @brief This function is introduced because GB10B has uneven Static GPCs for
 * HALF partitions(1 GPC(MIG 1):2 GPC(MIG 2)). With the current logic of the function
 * kmigmgrGetComputeProfileFromGpcCount_IMPL, a request for GPC count 2 will return a
 * FULL compute profile based on maxGPC calculation(3/2 == 1). For GB10B, If GPC count
 * is 3  a FULL profile is returned, for a GPC count of 2, HALF profile is returned and
 * for GPC count 1, a MINI_HALF profile is returned.

MIG 1 と MIG 2 とあります。BLACK_COMPUTE_A が2つなので、MIGが2ということになっています。

おわりに

NVIDIA DIGITS GB10 の GPU は、

  • Blackwell RTX系列ではなく、サーバー用のBlackwell (GB100/GB102)の系列なので、計算器の部分は、B200と同じでFP64サポートしてるんじゃん!
  • おまけに、MIG対応になっている。2つに分割できるっぽいけど、どういう用途に使うん。

ということが分かりました。

ソースコード解析は、本当に色々なことが学べます。。。

それでは、ここまでで、

次回も、Let's 妄想




以上の内容はhttps://vengineer.hatenablog.com/entry/2025/02/03/081428より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14