pub fn get_num_cpus() -> usize {
num_cpus::get()
}
static NUM_THREADS: std::sync::atomic::AtomicUsize = std::sync::atomic::AtomicUsize::new(0);
pub fn set_num_threads(num_threads: usize) {
NUM_THREADS.store(num_threads, std::sync::atomic::Ordering::Relaxed);
unsafe {
std::env::set_var("RAYON_NUM_THREADS", num_threads.to_string());
}
}
pub fn get_num_threads() -> usize {
let n = NUM_THREADS.load(std::sync::atomic::Ordering::Relaxed);
if n > 0 {
return n;
}
use std::str::FromStr;
match std::env::var("RAYON_NUM_THREADS").ok().and_then(|s| usize::from_str(&s).ok()) {
Some(x) if x > 0 => x,
Some(_) | None => num_cpus::get(),
}
}