diff --git a/Cargo.lock b/Cargo.lock index 799f3a3..cc1b7e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,16 +13,14 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.4" +version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ "bitflags", "cexpr", "clang-sys", "itertools", - "lazy_static", - "lazycell", "log", "prettyplease", "proc-macro2", @@ -31,7 +29,6 @@ dependencies = [ "rustc-hash", "shlex", "syn", - "which", ] [[package]] @@ -90,16 +87,6 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys", -] - [[package]] name = "glob" version = "0.3.1" @@ -116,15 +103,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys", -] - [[package]] name = "itertools" version = "0.12.1" @@ -134,18 +112,6 @@ dependencies = [ "either", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.155" @@ -162,12 +128,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "log" version = "0.4.22" @@ -208,12 +168,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - [[package]] name = "prettyplease" version = "0.2.20" @@ -277,19 +231,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - [[package]] name = "search-musa-tools" version = "0.1.0" @@ -317,27 +258,6 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-targets" version = "0.52.6" diff --git a/Cargo.toml b/Cargo.toml index 953b520..41226de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,6 @@ members = ["mudrv", "search-musa-tools"] resolver = "2" [workspace.dependencies] -bindgen = "0.69" +bindgen = "0.70" build-script-cfg = "0.0" half = "2.4" \ No newline at end of file diff --git a/mudrv/src/device.rs b/mudrv/src/device.rs index fbb97ba..658d1a0 100644 --- a/mudrv/src/device.rs +++ b/mudrv/src/device.rs @@ -132,6 +132,13 @@ impl Device { } } +pub fn mem_get_info() -> (usize, usize) { + let mut free = 0; + let mut total = 0; + muruntime!(musaMemGetInfo(&mut free, &mut total)); + (free, total) +} + pub struct InfoFmt<'a>(&'a Device); impl fmt::Display for InfoFmt<'_> { diff --git a/mudrv/src/lib.rs b/mudrv/src/lib.rs index 96bd0e3..abeddaf 100644 --- a/mudrv/src/lib.rs +++ b/mudrv/src/lib.rs @@ -49,7 +49,7 @@ pub fn init() -> Result<(), NoDevice> { pub use context::{Context, CurrentCtx}; pub use context_spore::{impl_spore, AsRaw, ContextResource, ContextSpore, RawContainer}; -pub use device::{BlockLimit, Device, SMLimit}; +pub use device::{mem_get_info, BlockLimit, Device, SMLimit}; pub use event::{Event, EventSpore}; pub use memory::{ memcpy_d2d, memcpy_d2h, memcpy_h2d, DevByte, DevMem, DevMemSpore, HostMem, HostMemSpore, diff --git a/mudrv/src/memory.rs b/mudrv/src/memory.rs index 734594a..455ed58 100644 --- a/mudrv/src/memory.rs +++ b/mudrv/src/memory.rs @@ -3,7 +3,7 @@ use context_spore::{impl_spore, AsRaw}; use std::{ alloc::Layout, marker::PhantomData, - mem::{forget, size_of_val}, + mem::size_of_val, ops::{Deref, DerefMut}, os::raw::c_void, ptr::null_mut, @@ -66,14 +66,14 @@ impl Stream<'_> { impl_spore!(DevMem and DevMemSpore by (CurrentCtx, Blob)); impl CurrentCtx { - pub fn malloc(&self, len: usize) -> DevMem<'_> { + pub fn malloc<'ctx, T: Copy>(&self, len: usize) -> DevMem<'ctx> { let len = Layout::array::(len).unwrap().size(); let mut ptr = 0; mudrv!(muMemAlloc_v2(&mut ptr, len)); DevMem(unsafe { self.wrap_raw(Blob { ptr, len }) }, PhantomData) } - pub fn from_host(&self, slice: &[T]) -> DevMem<'_> { + pub fn from_host<'ctx, T: Copy>(&self, slice: &[T]) -> DevMem<'ctx> { let len = size_of_val(slice); let src = slice.as_ptr().cast(); let mut ptr = 0; @@ -85,34 +85,11 @@ impl CurrentCtx { impl<'ctx> Stream<'ctx> { pub fn malloc(&self, len: usize) -> DevMem<'ctx> { - let len = Layout::array::(len).unwrap().size(); - let mut ptr = 0; - mudrv!(muMemAlloc_v2(&mut ptr, len)); - DevMem( - unsafe { self.ctx().wrap_raw(Blob { ptr, len }) }, - PhantomData, - ) + self.ctx().malloc::(len) } pub fn from_host(&self, slice: &[T]) -> DevMem<'ctx> { - let stream = unsafe { self.as_raw() }; - let len = size_of_val(slice); - let src = slice.as_ptr().cast(); - let mut ptr = 0; - mudrv!(muMemAlloc_v2(&mut ptr, len)); - mudrv!(muMemcpyHtoDAsync_v2(ptr, src, len, stream)); - DevMem( - unsafe { self.ctx().wrap_raw(Blob { ptr, len }) }, - PhantomData, - ) - } -} - -impl DevMem<'_> { - #[inline] - pub fn drop_on(self) { - mudrv!(muMemFree_v2(self.0.rss.ptr)); - forget(self); + self.ctx().from_host(slice) } }