use jetpwmon::PowerMonitor;
use std::thread;
use std::time::Duration;
fn cpu_intensive_task() {
println!("开始执行CPU密集型任务...");
let size = 2000;
let mut matrix1 = vec![0.0; size * size];
let mut matrix2 = vec![0.0; size * size];
let mut result = vec![0.0; size * size];
for i in 0..size * size {
matrix1[i] = rand::random();
matrix2[i] = rand::random();
}
for i in 0..size {
for j in 0..size {
result[i * size + j] = 0.0;
for k in 0..size {
result[i * size + j] += matrix1[i * size + k] * matrix2[k * size + j];
}
}
}
println!("CPU密集型任务完成");
}
fn monitor_power_consumption<F>(task_func: F) -> Result<(), jetpwmon::Error>
where
F: FnOnce(),
{
let monitor = PowerMonitor::new()?;
monitor.set_sampling_frequency(1000)?;
monitor.reset_statistics()?;
println!("开始功耗采样...");
monitor.start_sampling()?;
task_func();
thread::sleep(Duration::from_micros(500000));
monitor.stop_sampling()?;
let stats = monitor.get_statistics()?;
println!("\n功耗统计信息:");
println!("总功耗:");
println!(" 最小值: {:.2} W", stats.total.power.min);
println!(" 最大值: {:.2} W", stats.total.power.max);
println!(" 平均值: {:.2} W", stats.total.power.avg);
println!(" 总能耗: {:.2} J", stats.total.power.total);
println!(" 采样次数: {}", stats.total.power.count);
println!("\n各传感器功耗信息:");
let sensor_count = monitor.get_sensor_count()?;
for i in 0..sensor_count {
let sensor = unsafe { &*stats.sensors.add(i as usize) };
let name = String::from_utf8_lossy(&sensor.name).trim_matches('\0').to_string();
println!("\n传感器: {}", name);
println!(" 最小值: {:.2} W", sensor.power.min);
println!(" 最大值: {:.2} W", sensor.power.max);
println!(" 平均值: {:.2} W", sensor.power.avg);
println!(" 总能耗: {:.2} J", sensor.power.total);
println!(" 采样次数: {}", sensor.power.count);
}
Ok(())
}
fn main() {
println!("Jetson Power Monitor Rust 示例程序");
println!("=================================");
if let Err(e) = monitor_power_consumption(cpu_intensive_task) {
eprintln!("错误: {:?}", e);
}
}