diff --git a/src/common/main.cpp b/src/common/main.cpp index 2561966..f7c2506 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -8,7 +8,7 @@ #include "../cuda/cuda.hpp" #include "../cuda/uarch.hpp" -static const char* VERSION = "0.24"; +static const char* VERSION = "0.25"; void print_help(char *argv[]) { const char **t = args_str; diff --git a/src/cuda/chips.hpp b/src/cuda/chips.hpp index 1716d46..fddd62c 100644 --- a/src/cuda/chips.hpp +++ b/src/cuda/chips.hpp @@ -5,6 +5,10 @@ typedef uint32_t GPUCHIP; enum { CHIP_UNKNOWN_CUDA, + CHIP_AD102, + CHIP_AD102GL, + CHIP_AD104, + CHIP_AD104GL, CHIP_G80, CHIP_G80GL, CHIP_G84, @@ -37,6 +41,9 @@ enum { CHIP_GA100GL, CHIP_GA102, CHIP_GA102GL, + CHIP_GA103, + CHIP_GA103GLM, + CHIP_GA103M, CHIP_GA104, CHIP_GA104GL, CHIP_GA104GLM, @@ -72,6 +79,7 @@ enum { CHIP_GF117M, CHIP_GF119, CHIP_GF119M, + CHIP_GH100, CHIP_GK104, CHIP_GK104GL, CHIP_GK104GLM, @@ -167,7 +175,7 @@ enum { CHIP_TU117BM, CHIP_TU117GL, CHIP_TU117GLM, - CHIP_TU117M, + CHIP_TU117M }; #endif diff --git a/src/cuda/pci.cpp b/src/cuda/pci.cpp index a17747b..fff2b8b 100644 --- a/src/cuda/pci.cpp +++ b/src/cuda/pci.cpp @@ -21,6 +21,12 @@ GPUCHIP get_chip_from_pci_cuda(struct pci* pci) { CHECK_PCI_START + CHECK_PCI(pci, 0x27b8, CHIP_AD104GL) + CHECK_PCI(pci, 0x2785, CHIP_AD104) + CHECK_PCI(pci, 0x26b8, CHIP_AD102GL) + CHECK_PCI(pci, 0x26b5, CHIP_AD102GL) + CHECK_PCI(pci, 0x26b1, CHIP_AD102GL) + CHECK_PCI(pci, 0x2684, CHIP_AD102) CHECK_PCI(pci, 0x25fa, CHIP_GA107) CHECK_PCI(pci, 0x25f9, CHIP_GA107) CHECK_PCI(pci, 0x25e5, CHIP_GA107BM) @@ -89,6 +95,14 @@ GPUCHIP get_chip_from_pci_cuda(struct pci* pci) { CHECK_PCI(pci, 0x2484, CHIP_GA104) CHECK_PCI(pci, 0x2483, CHIP_GA104) CHECK_PCI(pci, 0x2482, CHIP_GA104) + CHECK_PCI(pci, 0x2460, CHIP_GA103M) + CHECK_PCI(pci, 0x2438, CHIP_GA103GLM) + CHECK_PCI(pci, 0x2420, CHIP_GA103M) + CHECK_PCI(pci, 0x2414, CHIP_GA103) + CHECK_PCI(pci, 0x2336, CHIP_GH100) + CHECK_PCI(pci, 0x2331, CHIP_GH100) + CHECK_PCI(pci, 0x2321, CHIP_GH100) + CHECK_PCI(pci, 0x2302, CHIP_GH100) CHECK_PCI(pci, 0x228e, CHIP_GA106) CHECK_PCI(pci, 0x228b, CHIP_GA104) CHECK_PCI(pci, 0x223f, CHIP_GA102GL) diff --git a/src/cuda/uarch.cpp b/src/cuda/uarch.cpp index 8f652e1..425f74b 100644 --- a/src/cuda/uarch.cpp +++ b/src/cuda/uarch.cpp @@ -24,6 +24,8 @@ enum { UARCH_VOLTA, UARCH_TURING, UARCH_AMPERE, + UARCH_ADA, + UARCH_HOPPER }; static const char *uarch_str[] = { @@ -36,6 +38,8 @@ static const char *uarch_str[] = { /*[ARCH_VOLTA] = */ "Volta", /*[ARCH_TURING] = */ "Turing", /*[ARCH_AMPERE] = */ "Ampere", + /*[ARCH_ADA] = */ "Ada Lovelace", + /*[ARCH_HOPPER] = */ "Hopper" }; #define CHECK_UARCH_START if (false) {} @@ -218,6 +222,9 @@ void map_chip_to_uarch_cuda(struct uarch* arch) { CHECK_UARCH(arch, CHIP_GA100GL, "GA100", UARCH_AMPERE, 7) CHECK_UARCH(arch, CHIP_GA102, "GA102", UARCH_AMPERE, 8) CHECK_UARCH(arch, CHIP_GA102GL, "GA102", UARCH_AMPERE, 8) + CHECK_UARCH(arch, CHIP_GA103, "GA103", UARCH_AMPERE, 8) + CHECK_UARCH(arch, CHIP_GA103GLM, "GA103", UARCH_AMPERE, 8) + CHECK_UARCH(arch, CHIP_GA103M, "GA103", UARCH_AMPERE, 8) CHECK_UARCH(arch, CHIP_GA104, "GA104", UARCH_AMPERE, 8) CHECK_UARCH(arch, CHIP_GA104GL, "GA104", UARCH_AMPERE, 8) CHECK_UARCH(arch, CHIP_GA104GLM, "GA104", UARCH_AMPERE, 8) @@ -228,6 +235,13 @@ void map_chip_to_uarch_cuda(struct uarch* arch) { CHECK_UARCH(arch, CHIP_GA107BM, "GA107", UARCH_AMPERE, 8) CHECK_UARCH(arch, CHIP_GA107GLM, "GA107", UARCH_AMPERE, 8) CHECK_UARCH(arch, CHIP_GA107M, "GA107", UARCH_AMPERE, 8) + // ADA LOVELACE (8.9) + CHECK_UARCH(arch, CHIP_AD102, "AD102", UARCH_ADA, 4) + CHECK_UARCH(arch, CHIP_AD102GL, "AD102", UARCH_ADA, 4) + CHECK_UARCH(arch, CHIP_AD104, "AD104", UARCH_ADA, 4) + CHECK_UARCH(arch, CHIP_AD104GL, "AD104", UARCH_ADA, 4) + // HOPPER (9.0) + CHECK_UARCH(arch, CHIP_GH100, "GH100", UARCH_HOPPER, 4) CHECK_UARCH_END } @@ -266,6 +280,8 @@ bool clkm_possible_for_uarch(int clkm, struct uarch* arch) { case UARCH_VOLTA: return clkm == 1; case UARCH_TURING: return clkm == 2 || clkm == 4; case UARCH_AMPERE: return clkm == 1 || clkm == 4 || clkm == 8; + case UARCH_ADA: return clkm == 8; + case UARCH_HOPPER: return clkm == 1; } return false; } @@ -317,6 +333,10 @@ MEMTYPE guess_memtype_from_cmul_and_uarch(int clkm, struct uarch* arch) { CHECK_MEMTYPE(arch, clkm, UARCH_AMPERE, 1, MEMTYPE_HBM2) CHECK_MEMTYPE(arch, clkm, UARCH_AMPERE, 4, MEMTYPE_GDDR6) CHECK_MEMTYPE(arch, clkm, UARCH_AMPERE, 8, MEMTYPE_GDDR6X) + // ADA + CHECK_MEMTYPE(arch, clkm, UARCH_ADA, 8, MEMTYPE_GDDR6X) + // HOPPER + CHECK_MEMTYPE(arch, clkm, UARCH_HOPPER, 1, MEMTYPE_HBM2) CHECK_MEMTYPE_END }