はじめに
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に入っている機能の違いについて、みてみました。