CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/go-amdsmi

AMD System Management Interface (AMD SMI) Go library for unified GPU and CPU management and monitoring

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

gpu-performance.mddocs/

GPU Performance Monitoring

Real-time monitoring of GPU utilization, clock frequencies, memory usage, and performance metrics through the Go interface.

Capabilities

GPU Activity Monitoring

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_t

Parameters:

  • i: GPU device index (0-based)

Returns:

  • GPU busy percentage (0-100) for GPU utilization
  • Memory busy percentage (0-100) for memory controller utilization
  • Error value 0xFFFFFFFF or 0xFFFFFFFFFFFFFFFF on failure

Usage 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)
    }
}

Clock Frequency Monitoring

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_t

Parameters:

  • i: GPU device index (0-based)

Returns:

  • Clock frequency in Hz
  • Error value 0xFFFFFFFFFFFFFFFF on failure

Usage 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)
}

Performance Level Monitoring

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_t

Parameters:

  • i: GPU device index (0-based)

Returns:

  • Performance level or overdrive percentage
  • Error value 0xFFFFFFFF on failure

Usage 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)
}

Error Handling

All Go functions return error values to indicate failure:

  • uint32 functions: Return 0xFFFFFFFF on failure
  • uint64 functions: Return 0xFFFFFFFFFFFFFFFF on failure

Always check return values against these error constants before using the data.

Install with Tessl CLI

npx tessl i tessl/go-amdsmi

docs

cpu-management.md

device-info.md

events.md

gpu-performance.md

index.md

initialization.md

memory.md

performance-control.md

power-thermal.md

topology-ras.md

tile.json