use aocl_utils_sys as sys;
pub type ThreadHandle = sys::pthread_t;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PinStrategy {
Core,
Logical,
Spread,
}
pub unsafe fn pin_threads(strategy: PinStrategy, threads: &mut [ThreadHandle]) {
let n = threads.len();
let p = threads.as_mut_ptr();
match strategy {
PinStrategy::Core => unsafe { sys::au_pin_threads_core(p, n) },
PinStrategy::Logical => unsafe { sys::au_pin_threads_logical(p, n) },
PinStrategy::Spread => unsafe { sys::au_pin_threads_spread(p, n) },
}
}
pub unsafe fn pin_threads_custom(threads: &mut [ThreadHandle], affinity_vector: &[i32]) {
let n = threads.len();
if n == 0 || affinity_vector.is_empty() {
return;
}
unsafe {
sys::au_pin_threads_custom(
threads.as_mut_ptr(),
n,
affinity_vector.as_ptr() as *mut std::os::raw::c_int,
affinity_vector.len(),
);
}
}