llama_cpp_bindings/
llama_backend_numa_strategy.rs1#[derive(Debug, Eq, PartialEq, Copy, Clone)]
3pub enum NumaStrategy {
4 Disabled,
6 Distribute,
8 Isolate,
10 Numactl,
12 Mirror,
14}
15
16#[derive(Debug, Eq, PartialEq, Copy, Clone)]
18pub struct InvalidNumaStrategy(
19 pub llama_cpp_bindings_sys::ggml_numa_strategy,
21);
22
23impl TryFrom<llama_cpp_bindings_sys::ggml_numa_strategy> for NumaStrategy {
24 type Error = InvalidNumaStrategy;
25
26 fn try_from(value: llama_cpp_bindings_sys::ggml_numa_strategy) -> Result<Self, Self::Error> {
27 match value {
28 llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_DISABLED => Ok(Self::Disabled),
29 llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_DISTRIBUTE => Ok(Self::Distribute),
30 llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_ISOLATE => Ok(Self::Isolate),
31 llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_NUMACTL => Ok(Self::Numactl),
32 llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_MIRROR => Ok(Self::Mirror),
33 value => Err(InvalidNumaStrategy(value)),
34 }
35 }
36}
37
38impl From<NumaStrategy> for llama_cpp_bindings_sys::ggml_numa_strategy {
39 fn from(value: NumaStrategy) -> Self {
40 match value {
41 NumaStrategy::Disabled => llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_DISABLED,
42 NumaStrategy::Distribute => llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_DISTRIBUTE,
43 NumaStrategy::Isolate => llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_ISOLATE,
44 NumaStrategy::Numactl => llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_NUMACTL,
45 NumaStrategy::Mirror => llama_cpp_bindings_sys::GGML_NUMA_STRATEGY_MIRROR,
46 }
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use super::{InvalidNumaStrategy, NumaStrategy};
53
54 #[test]
55 fn numa_from_and_to() {
56 let numas = [
57 NumaStrategy::Disabled,
58 NumaStrategy::Distribute,
59 NumaStrategy::Isolate,
60 NumaStrategy::Numactl,
61 NumaStrategy::Mirror,
62 ];
63
64 for numa in &numas {
65 let raw = llama_cpp_bindings_sys::ggml_numa_strategy::from(*numa);
66 let roundtripped =
67 NumaStrategy::try_from(raw).expect("Failed to roundtrip NumaStrategy");
68
69 assert_eq!(*numa, roundtripped);
70 }
71 }
72
73 #[test]
74 fn invalid_numa_strategy_returns_error() {
75 let invalid_value = 800;
76 let result = NumaStrategy::try_from(invalid_value);
77
78 assert_eq!(result, Err(InvalidNumaStrategy(invalid_value)));
79 }
80}