AMD System Management Interface (AMD SMI) Go library for unified GPU and CPU management and monitoring
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Real-time monitoring of GPU utilization, clock frequencies, memory usage, and performance metrics through the Go interface.
Monitor GPU and memory utilization percentages.
func GO_gpu_dev_gpu_busy_percent_get(i int) C.uint32_t
func GO_gpu_dev_gpu_memory_busy_percent_get(i int) C.uint64_tParameters:
i: GPU device index (0-based)Returns:
0xFFFFFFFF or 0xFFFFFFFFFFFFFFFF on failureUsage Example:
// Monitor utilization for all GPUs
numGPUs := int(goamdsmi.GO_gpu_num_monitor_devices())
for i := 0; i < numGPUs; i++ {
gpuBusy := goamdsmi.GO_gpu_dev_gpu_busy_percent_get(i)
memBusy := goamdsmi.GO_gpu_dev_gpu_memory_busy_percent_get(i)
if gpuBusy != 0xFFFFFFFF && memBusy != 0xFFFFFFFFFFFFFFFF {
fmt.Printf("GPU %d: %d%% busy, Memory: %d%% busy\n", i, gpuBusy, memBusy)
}
}Get current system clock (SCLK) and memory clock (MCLK) frequencies.
func GO_gpu_dev_gpu_clk_freq_get_sclk(i int) C.uint64_t
func GO_gpu_dev_gpu_clk_freq_get_mclk(i int) C.uint64_tParameters:
i: GPU device index (0-based)Returns:
0xFFFFFFFFFFFFFFFF on failureUsage Example:
gpuIndex := 0
sclkFreq := goamdsmi.GO_gpu_dev_gpu_clk_freq_get_sclk(gpuIndex)
mclkFreq := goamdsmi.GO_gpu_dev_gpu_clk_freq_get_mclk(gpuIndex)
if sclkFreq != 0xFFFFFFFFFFFFFFFF {
fmt.Printf("GPU %d SCLK: %.0f MHz\n", gpuIndex, float64(sclkFreq)/1e6)
}
if mclkFreq != 0xFFFFFFFFFFFFFFFF {
fmt.Printf("GPU %d MCLK: %.0f MHz\n", gpuIndex, float64(mclkFreq)/1e6)
}Monitor GPU performance levels and overdrive settings.
func GO_gpu_dev_perf_level_get(i int) C.uint32_t
func GO_gpu_dev_overdrive_level_get(i int) C.uint32_t
func GO_gpu_dev_mem_overdrive_level_get(i int) C.uint32_tParameters:
i: GPU device index (0-based)Returns:
0xFFFFFFFF on failureUsage Example:
gpuIndex := 0
perfLevel := goamdsmi.GO_gpu_dev_perf_level_get(gpuIndex)
overdriveLevel := goamdsmi.GO_gpu_dev_overdrive_level_get(gpuIndex)
memOverdrive := goamdsmi.GO_gpu_dev_mem_overdrive_level_get(gpuIndex)
if perfLevel != 0xFFFFFFFF {
fmt.Printf("GPU %d Performance Level: %d\n", gpuIndex, perfLevel)
}
if overdriveLevel != 0xFFFFFFFF {
fmt.Printf("GPU %d Overdrive: %d%%\n", gpuIndex, overdriveLevel)
}
if memOverdrive != 0xFFFFFFFF {
fmt.Printf("GPU %d Memory Overdrive: %d%%\n", gpuIndex, memOverdrive)
}All Go functions return error values to indicate failure:
0xFFFFFFFF on failure0xFFFFFFFFFFFFFFFF on failureAlways check return values against these error constants before using the data.
Install with Tessl CLI
npx tessl i tessl/go-amdsmi