diff --git a/aicirt/Cargo.toml b/aicirt/Cargo.toml index eed61c8..c44befc 100644 --- a/aicirt/Cargo.toml +++ b/aicirt/Cargo.toml @@ -27,9 +27,12 @@ fxhash = "0.2.1" bincode = "1.3.3" uuid = "1.6.1" + [target.'cfg(target_os = "linux")'.dependencies] linux-futex = "0.2.0" [target.'cfg(target_os = "macos")'.dependencies] ulock-sys = "0.1.0" +[target.'cfg(target_os = "windows")'.dependencies] +win-sys = "0.3.1" diff --git a/aicirt/src/shm.rs b/aicirt/src/shm.rs index a8fe33f..4c87e7d 100644 --- a/aicirt/src/shm.rs +++ b/aicirt/src/shm.rs @@ -4,6 +4,10 @@ use std::{ffi::CString, io, ptr}; pub struct Shm { addr: *mut u8, pub size: usize, + #[cfg(target_os = "windows")] + mapping: win_sys::FileMapping, + #[cfg(target_os = "windows")] + view: win_sys::ViewOfFile, } unsafe impl Send for Shm {} @@ -23,6 +27,7 @@ impl Shm { Self::from_fd(-1, size) } + #[cfg(not(target_os = "windows"))] fn from_fd(fd: i32, size: usize) -> Result { let mut flag = libc::MAP_SHARED; if fd == -1 { @@ -51,6 +56,41 @@ impl Shm { }) } + #[cfg(target_os = "windows")] + pub fn new(name: &str, size: usize, unlink: Unlink) -> Result { + use anyhow::Ok; + + assert!(name.starts_with("/")); + let name = format!("Global\\{}", name[1..].to_string()); + + ensure!(size > 1024); + log::trace!("shm_open: {} size={}k", name, size / 1024); + + let mapping = win_sys::CreateFileMapping( + win_sys::INVALID_HANDLE_VALUE, + None, + win_sys::PAGE_READWRITE, + 0, + size as u32, + name, + )?; + let view = win_sys::MapViewOfFile( + mapping.as_handle(), + win_sys::FILE_MAP_ALL_ACCESS, + 0, + 0, + size, + )?; + + Ok(Self { + addr: view.as_mut_ptr() as *mut u8, + size, + mapping, + view, + }) + } + + #[cfg(not(target_os = "windows"))] pub fn new(name: &str, size: usize, unlink: Unlink) -> Result { ensure!(size > 1024); @@ -140,6 +180,7 @@ impl Shm { } } +#[cfg(not(target_os = "windows"))] impl Drop for Shm { fn drop(&mut self) { unsafe { diff --git a/llama-cpp-low/src/lib.rs b/llama-cpp-low/src/lib.rs index 140dcee..fcc1f00 100644 --- a/llama-cpp-low/src/lib.rs +++ b/llama-cpp-low/src/lib.rs @@ -92,7 +92,7 @@ pub enum SplitMode { impl ModelParams { pub fn set_split_mode(&mut self, mode: SplitMode) { - self.split_mode = mode as u32; + self.split_mode = mode as _; } }