use std::{fmt, ops::Deref};
use nvml_wrapper::{enum_wrappers::device::TemperatureSensor, Device};
#[derive(Debug)]
pub struct GpuInfo<'d> {
pub inner: &'d Device<'d>,
}
impl<'d> Deref for GpuInfo<'d> {
type Target = &'d Device<'d>;
fn deref(&self) -> &Self::Target {
&self.inner
}
}
impl<'d> fmt::Display for GpuInfo<'d> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let meminfo = self.inner.memory_info().unwrap();
let utilisation = self.inner.utilization_rates().unwrap();
writeln!(f, "Brand: {:?}", self.inner.brand())?;
writeln!(f, "core: {:?}%", utilisation.gpu)?;
writeln!(f, "mem_used: {:?}", meminfo.used as f64 / 1_073_741_824.0)?;
writeln!(f, "mem {:?}%", (meminfo.total / meminfo.used))?;
writeln!(
f,
"mem_total: {:?}",
meminfo.total as f64 / 1_073_741_824.0
)?;
writeln!(
f,
"Temp: {:?}C",
self.inner.temperature(TemperatureSensor::Gpu)
)?;
Ok(())
}
}