はじめに
NVIDIAがGPUのKernel Modulesを公開したので、ソースコード解析をしてみる、(その5)
今回は、NVLink
NVLINK の Version
このファイルによると、NVLink の version
#define NVLINK_DEVICE_VERSION_10 0x00000001 #define NVLINK_DEVICE_VERSION_20 0x00000002 #define NVLINK_DEVICE_VERSION_22 0x00000004 #define NVLINK_DEVICE_VERSION_30 0x00000005 #define NVLINK_DEVICE_VERSION_31 0x00000006 #define NVLINK_DEVICE_VERSION_40 0x00000007
- Pascal : 1.0
- Volta : 2.0
- Ampere : 3.0
Hopper : 4.0
2.2 と 3.1 は、何に実装されているんでしょうかね。
NVLink対応デバイス
- EBRIDGE
- IBMNPU
- GPU
- NVSWITCH
- TEGRASHIM
EBRIDGE って、こういうものですかね。
NVLinkのスピード
NVLinkのスピード は、16G、19.2G、20G、21G、22G、23G、24G、25G、25.78125G、32G、40G、50Gのようにたくさんありますね。
#define NV_REG_STR_RM_NVLINK_SPEED_CONTROL "RMNvLinkSpeedControl" #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED 4:0 #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_DEFAULT (0x00000000) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_16G (0x00000001) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_19_2G (0x00000002) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_20G (0x00000003) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_21G (0x00000004) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_22G (0x00000005) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_23G (0x00000006) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_24G (0x00000007) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_25G (0x00000008) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_25_78125G (0x00000008) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_25_00000G (0x00000009) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_16_14583G (0x0000000A) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_26_56250G (0x0000000B) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_27_34375G (0x0000000C) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_28_12500G (0x0000000D) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_32G (0x0000000E) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_40G (0x0000000F) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_50_00000G (0x00000010) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_53_12500G (0x00000011) ================================================================= 追記)、2023.08.02 #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_100_00000G (0x00000012) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_106_25000G (0x00000013) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED_FAULT (0x00000014) #define NV_REG_STR_RM_NVLINK_SPEED_CONTROL_SPEED__LAST (0x00000015) =================================================================
NVLinkの状態
#define NVLINK_SUBLINK_STATE_RX_HS 0x0 // RX High Speed #define NVLINK_SUBLINK_STATE_RX_SINGLE_LANE 0x4 // RX Single Lane (1/8th or 1/4th) Mode (Deprecated) #define NVLINK_SUBLINK_STATE_RX_TRAIN 0x5 // RX training #define NVLINK_SUBLINK_STATE_RX_SAFE 0x6 // RX Safe Mode #define NVLINK_SUBLINK_STATE_RX_OFF 0x7 // RX OFF #define NVLINK_SUBLINK_STATE_RX_RXCAL 0x8 // RX in calibration #define NVLINK_SUBLINK_STATE_RX_INIT_TERM 0x9 // Enable RX termination
NVSWITCH ?
ここに、NVSWITCHの Device ID があった。
const static NvU32 nvswitch_lr10_device_ids[] = { 0x1AE8, 0x1AF0, 0x1AF1, 0x1AF2, 0x1AF3, 0x1AF4, 0x1AF5, 0x1AF6, 0x1AF7, 0x1AF8, 0x1AF9, 0x1AFA, 0x1AFB, 0x1AFC, 0x1AFD, 0x1AFE, 0x1AFF };
nvswitch_init <= nvlink_drivers_init <= nv_module_init <= nvidia_init_module
おわりに
今回は、NVLinkについて、調べました。