use crate::error::Result;
use rayon::prelude::*;
pub struct HardwareMaster;
impl HardwareMaster {
pub fn logical_cpus() -> usize {
num_cpus::get()
}
pub fn physical_cpus() -> usize {
num_cpus::get_physical()
}
pub fn init_global_pool(threads: Option<usize>) -> Result<()> {
let t = threads.unwrap_or_else(Self::logical_cpus);
rayon::ThreadPoolBuilder::new()
.num_threads(t)
.build_global()?;
Ok(())
}
pub fn parallel_process<T, R, F>(items: Vec<T>, f: F) -> Vec<R>
where
T: Send,
R: Send,
F: Fn(T) -> R + Sync + Send,
{
items.into_par_iter().map(f).collect()
}
}
#[cfg(feature = "gpu")]
pub mod gpu {
use wgpu;
pub async fn check_gpu_status() {
let instance = wgpu::Instance::default();
let adapters = instance.enumerate_adapters(wgpu::Backends::all());
for adapter in adapters {
println!("检测到 GPU: {:?}", adapter.get_info().name);
}
}
}