or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cpu-management.mddevice-info.mdevents.mdgpu-performance.mdindex.mdinitialization.mdmemory.mdperformance-control.mdpower-thermal.mdtopology-ras.md
tile.json

tessl/go-amdsmi

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

Workspace
tessl
Visibility
Public
Created
Last updated
Describes

pkg:github/radeonopencompute/amdsmi@6.4.x

To install, run

npx @tessl/cli install tessl/go-amdsmi@6.4.0

index.mddocs/

AMD System Management Interface (AMD SMI) - Go Package

The AMD System Management Interface (AMD SMI) Go package provides Go bindings for AMD GPU and CPU monitoring and management in high-performance computing environments. This package offers unified access to GPU performance metrics, power monitoring, thermal sensors, and CPU management through a native Go interface.

Package Information

  • Package Name: goamdsmi
  • Package Type: Go library
  • Language: Go
  • Installation: Build with CGO linking to AMD SMI C library
  • Go Version Required: 1.20 or greater
  • Documentation: https://rocm.docs.amd.com/projects/amdsmi/en/latest/
  • Repository: https://github.com/RadeonOpenCompute/amdsmi

Core Imports

Go Package Import

import "path/to/goamdsmi"

Note: This is a CGO package that requires the AMD SMI C library to be installed and accessible during compilation.

Basic Usage

Go Interface

package main

import (
    "fmt"
    "log"
)

func main() {
    // Initialize GPU monitoring
    if !goamdsmi.GO_gpu_init() {
        log.Fatal("Failed to initialize AMD SMI for GPU")
    }
    defer func() {
        if !goamdsmi.GO_gpu_shutdown() {
            log.Println("Warning: Failed to shutdown GPU monitoring")
        }
    }()

    // Get number of monitor devices
    numGPUs := goamdsmi.GO_gpu_num_monitor_devices()
    fmt.Printf("Found %d GPU(s)\n", numGPUs)

    if numGPUs > 0 {
        // Get device information for first GPU
        deviceName := goamdsmi.GO_gpu_dev_name_get(0)
        fmt.Printf("Device 0: %s\n", C.GoString(deviceName))
        
        // Get power consumption
        power := goamdsmi.GO_gpu_dev_power_get(0)
        fmt.Printf("Power: %d mW\n", power)
        
        // Get GPU utilization
        utilization := goamdsmi.GO_gpu_dev_gpu_busy_percent_get(0)
        fmt.Printf("GPU utilization: %d%%\n", utilization)
    }

    // Initialize CPU monitoring if needed
    if goamdsmi.GO_cpu_init() {
        defer func() {
            // CPU shutdown function may not be explicitly available
        }()
        
        numSockets := goamdsmi.GO_cpu_number_of_sockets_get()
        fmt.Printf("Found %d CPU socket(s)\n", numSockets)
    }
}

Architecture

The Go AMD SMI package follows a CGO-based architecture:

  • CGO Interface: Direct binding to AMD SMI C library using CGO
  • GPU Functions: Functions prefixed with GO_gpu_ for GPU monitoring and control
  • CPU Functions: Functions prefixed with GO_cpu_ for CPU monitoring (ESMI)
  • C Type Integration: Returns C types (C.uint64_t, C.uint32_t, etc.) for direct hardware values
  • Driver Integration: Communicates with amdgpu and HSMP drivers through C library
  • Simple Error Handling: Boolean return values for init/shutdown, error values for data functions

The package provides a direct Go interface to AMD hardware without complex abstractions, optimized for performance monitoring applications.

Capabilities

Device Initialization and Discovery

Core system initialization and device enumeration for AMD GPUs and CPUs.

func GO_gpu_init() bool
func GO_gpu_shutdown() bool
func GO_gpu_num_monitor_devices() uint
func GO_cpu_init() bool
func GO_cpu_number_of_sockets_get() uint
func GO_cpu_number_of_threads_get() uint
func GO_cpu_threads_per_core_get() uint

Initialization and Discovery

GPU Performance Monitoring

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

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
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
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

GPU Performance Monitoring

Power and Thermal Management

Power consumption monitoring and thermal sensors for GPU devices.

func GO_gpu_dev_power_get(i int) C.uint64_t
func GO_gpu_dev_power_cap_get(i int) C.uint64_t
func GO_gpu_dev_temp_metric_get(i int, sensor int, metric int) C.uint64_t

Power and Thermal Management

Device Information and Properties

Hardware identification and device properties for GPU devices.

func GO_gpu_dev_name_get(i int) *C.char
func GO_gpu_dev_id_get(i int) C.uint16_t
func GO_gpu_dev_pci_id_get(i int) C.uint64_t
func GO_gpu_dev_vbios_version_get(i int) *C.char
func GO_gpu_dev_vendor_name_get(i int) *C.char

Device Information

Memory Management

GPU memory usage monitoring and memory statistics.

func GO_gpu_dev_gpu_memory_usage_get(i int) C.uint64_t
func GO_gpu_dev_gpu_memory_total_get(i int) C.uint64_t

Memory Management

Performance Control

GPU frequency ranges and performance level monitoring.

func GO_gpu_od_volt_freq_range_min_get_sclk(i int) C.uint64_t
func GO_gpu_od_volt_freq_range_min_get_mclk(i int) C.uint64_t
func GO_gpu_od_volt_freq_range_max_get_sclk(i int) C.uint64_t
func GO_gpu_od_volt_freq_range_max_get_mclk(i int) C.uint64_t

Performance Control

System Topology and RAS

Note: Advanced topology and RAS features are not exposed in the Go interface. This capability is primarily available through the C++ API.

System Topology and RAS

Events and Notifications

Note: Event and notification features are not exposed in the Go interface. This capability is primarily available through the C++ API.

Events and Notifications

CPU Management (ESMI)

CPU socket and core monitoring for energy, power, and frequency limits.

func GO_cpu_core_energy_get(i int) C.uint64_t
func GO_cpu_core_boostlimit_get(i int) C.uint32_t
func GO_cpu_socket_energy_get(i int) C.uint64_t
func GO_cpu_socket_power_get(i int) C.uint32_t
func GO_cpu_socket_power_cap_get(i int) C.uint32_t
func GO_cpu_prochot_status_get(i int) C.uint32_t

CPU Management

Error Handling

The Go interface uses simple error handling patterns:

  • Initialization functions: Return bool (true for success, false for failure)
  • Data functions: Return error values for failed operations:
    • 0xFFFF for uint16 functions on failure
    • 0xFFFFFFFF for uint32 functions on failure
    • 0xFFFFFFFFFFFFFFFF for uint64 functions on failure
    • "NA" string for char* functions on failure

Platform Support

  • Linux: Bare metal and virtual machine guest support
  • GPU Support: AMD GPUs with amdgpu driver
  • CPU Support: AMD processors with HSMP support
  • CGO Requirements: Requires AMD SMI C library and proper CGO compilation flags