はじめに
NVIDIAがGPUのKernel Modulesを公開したので、ソースコード解析をしてみる、(その6)
今回は、各GPUがどのような機能を持っているかということを調べました。
ENG_XXX
Engine というものが下記のところにリストアップされています。
例えば、
- ENG_SEC2 : Security 2
- ENG_NVJPG : JPEG Decoder
- ENG_NVENC : Video Encoder
- ENG_NVDEC : VIdeo Decoder
- ENG_GSP : GSP (GPU System Processor)
などです。
- ENG_CE(n) : Copy Engine
下記のファイルでは、
- TU102
- TU104
- TU106
- TU116
TU117
GA100
- GA102
- GA103
- GA104
- GA106
- GA107
にどんな機能が入っているを設定しています。
GA100
static const CLASSDESCRIPTOR halGA100ClassDescriptorList[] = { { ACCESS_COUNTER_NOTIFY_BUFFER, ENG_GR(0) }, { AMPERE_A, ENG_GR(0) }, { AMPERE_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO }, { AMPERE_COMPUTE_A, ENG_GR(0) }, { AMPERE_COMPUTE_A, ENG_GR(1) }, { AMPERE_COMPUTE_A, ENG_GR(2) }, { AMPERE_COMPUTE_A, ENG_GR(3) }, { AMPERE_COMPUTE_A, ENG_GR(4) }, { AMPERE_COMPUTE_A, ENG_GR(5) }, { AMPERE_COMPUTE_A, ENG_GR(6) }, { AMPERE_COMPUTE_A, ENG_GR(7) }, { AMPERE_DMA_COPY_A, ENG_CE(0) }, { AMPERE_DMA_COPY_A, ENG_CE(1) }, { AMPERE_DMA_COPY_A, ENG_CE(2) }, { AMPERE_DMA_COPY_A, ENG_CE(3) }, { AMPERE_DMA_COPY_A, ENG_CE(4) }, { AMPERE_DMA_COPY_A, ENG_CE(5) }, { AMPERE_DMA_COPY_A, ENG_CE(6) }, { AMPERE_DMA_COPY_A, ENG_CE(7) }, { AMPERE_DMA_COPY_A, ENG_CE(8) }, { AMPERE_DMA_COPY_A, ENG_CE(9) }, { AMPERE_USERMODE_A, ENG_GPU }, { FERMI_CONTEXT_SHARE_A, ENG_KERNEL_FIFO }, { FERMI_TWOD_A, ENG_GR(0) }, { FERMI_VASPACE_A, ENG_DMA }, { G84_PERFBUFFER, ENG_BUS }, { GF100_SUBDEVICE_MASTER, ENG_GPU }, { GF100_TIMED_SEMAPHORE_SW, ENG_SW }, { GF100_ZBC_CLEAR, ENG_KERNEL_MEMORY_SYSTEM }, { GP100_UVM_SW, ENG_SW }, { KEPLER_CHANNEL_GROUP_A, ENG_KERNEL_FIFO }, { KEPLER_INLINE_TO_MEMORY_B, ENG_GR(0) }, { MMU_FAULT_BUFFER, ENG_GR(0) }, { NV0060_SYNC_GPU_BOOST, ENG_GPU }, { NV01_MEMORY_VIRTUAL, ENG_DMA }, { 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 }, { NVC4D1_VIDEO_NVJPG, ENG_NVJPG }, { NVC6B0_VIDEO_DECODER, ENG_NVDEC(0) }, { NVC6B0_VIDEO_DECODER, ENG_NVDEC(1) }, { NVC6B0_VIDEO_DECODER, ENG_NVDEC(2) }, { NVC6B0_VIDEO_DECODER, ENG_NVDEC(3) }, { NVC6B0_VIDEO_DECODER, ENG_NVDEC(4) }, { NVC6FA_VIDEO_OFA, ENG_OFA }, { TURING_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO }, { TURING_USERMODE_A, ENG_GPU }, { VOLTA_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO }, { VOLTA_USERMODE_A, ENG_GPU }, };
GA102
static const CLASSDESCRIPTOR halGA102ClassDescriptorList[] = { { ACCESS_COUNTER_NOTIFY_BUFFER, ENG_GR(0) }, { AMPERE_B, ENG_GR(0) }, { AMPERE_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO }, { AMPERE_COMPUTE_B, ENG_GR(0) }, { AMPERE_DMA_COPY_B, ENG_CE(0) }, { AMPERE_DMA_COPY_B, ENG_CE(1) }, { AMPERE_DMA_COPY_B, ENG_CE(2) }, { AMPERE_DMA_COPY_B, ENG_CE(3) }, { AMPERE_DMA_COPY_B, ENG_CE(4) }, { AMPERE_USERMODE_A, ENG_GPU }, { 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_MASTER, ENG_GPU }, { GF100_TIMED_SEMAPHORE_SW, ENG_SW }, { GF100_ZBC_CLEAR, ENG_KERNEL_MEMORY_SYSTEM }, { GP100_UVM_SW, ENG_SW }, { KEPLER_CHANNEL_GROUP_A, ENG_KERNEL_FIFO }, { KEPLER_INLINE_TO_MEMORY_B, ENG_GR(0) }, { MMU_FAULT_BUFFER, ENG_GR(0) }, { NV0060_SYNC_GPU_BOOST, ENG_GPU }, { 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 }, { NVC372_DISPLAY_SW, ENG_KERNEL_DISPLAY }, { NVC670_DISPLAY, ENG_KERNEL_DISPLAY }, { NVC671_DISP_SF_USER, ENG_KERNEL_DISPLAY }, { NVC673_DISP_CAPABILITIES, ENG_KERNEL_DISPLAY }, { NVC67A_CURSOR_IMM_CHANNEL_PIO, ENG_KERNEL_DISPLAY }, { NVC67B_WINDOW_IMM_CHANNEL_DMA, ENG_KERNEL_DISPLAY }, { NVC67D_CORE_CHANNEL_DMA, ENG_KERNEL_DISPLAY }, { NVC67E_WINDOW_CHANNEL_DMA, ENG_KERNEL_DISPLAY }, { NVC7B0_VIDEO_DECODER, ENG_NVDEC(0) }, { NVC7B0_VIDEO_DECODER, ENG_NVDEC(1) }, { NVC7B7_VIDEO_ENCODER, ENG_MSENC(0) }, { NVC7FA_VIDEO_OFA, ENG_OFA }, { TURING_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO }, { TURING_USERMODE_A, ENG_GPU }, { VOLTA_CHANNEL_GPFIFO_A, ENG_KERNEL_FIFO }, { VOLTA_USERMODE_A, ENG_GPU }, };
GA100 と GA102 の比較
GA100 にあって、GA102 にないもの
- ENG_GR が 8個に対して、1個
- ENG_CE が 10個に対して、5個
- ENG_NV が 5個に対して、2個
ENG_NVJPEG が 1個に対して、0個
ENG_KERNEL_DISPLAY が 0個に対して、いろいろ
- ENG_HDACODEC が 0個に対して、1個
GA102 はデスクトップ用ですが、GA100 はそうでない。なので、ディスプレイ関連は無いですね。
GA102, GA103、GA104, , GA106, GA107 は、同じ構成ですね。
GA102 と TU102 だと、
- ENG_NVDEC
- ENG_MSENC
- ENG_KERNEL_DISPLAY
関連が違うようです。
おわりに
今回は、GPUに入っている機能の違いについて、みてみました。