From f2d464fed45c587604a64c82579d613e53ee7460 Mon Sep 17 00:00:00 2001 From: Aaron Councilman <aaronjc4@illinois.edu> Date: Mon, 17 Feb 2025 19:50:06 -0600 Subject: [PATCH] Format hercules_rt --- hercules_rt/src/lib.rs | 167 ++++++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 77 deletions(-) diff --git a/hercules_rt/src/lib.rs b/hercules_rt/src/lib.rs index 3b20dd09..970afe63 100644 --- a/hercules_rt/src/lib.rs +++ b/hercules_rt/src/lib.rs @@ -397,7 +397,7 @@ unsafe impl Sync for __RawPtrSendSync {} * * The data held at all of its non-None allocations and references is maintained so that it is the * same, and so methods will attempt to use the reference or allocation that is most convenient. - * + * * HerculesImmBox hold references to immutable memory only. All operations on these is through * immutable references, though internally it uses OnceLocks to protect its resources since the Box * may be used in multiple parallel threads if it is used in parallel Hercules code invocation. @@ -502,9 +502,9 @@ impl<'a, T> From<HerculesCUDARefMut<'a>> for HerculesImmBox<'a, T> { } } -impl<'a, T> HerculesImmBox<'a, T> -where - T: Default + Clone +impl<'a, T> HerculesImmBox<'a, T> +where + T: Default + Clone, { pub fn as_slice(&'a self) -> &'a [T] { self.as_cpu_ref().as_slice() @@ -520,18 +520,23 @@ where } else { #[cfg(feature = "cuda")] if let Some(cuda_ref) = self.cuda_ref.get() { - return - self.cpu_ref.get_or_init(|| { + return self + .cpu_ref + .get_or_init(|| { let elements = unsafe { cuda_ref.__size() / size_of::<T>() }; let mut alloc = Vec::new(); alloc.resize_with(elements, Default::default); let _ = cuda_ref.clone().to_cpu_ref(&mut alloc); - self.cpu_alloc.set(alloc).map_err(|_| ()).expect("HerculesImmBox cpu_alloc was set unexpectedly"); + self.cpu_alloc + .set(alloc) + .map_err(|_| ()) + .expect("HerculesImmBox cpu_alloc was set unexpectedly"); let alloc = self.cpu_alloc.get().unwrap(); HerculesCPURef::from_slice(alloc) - }).clone(); + }) + .clone(); } panic!("HerculesImmBox has no reference to data") @@ -544,13 +549,19 @@ where cuda_ref.clone() } else { if let Some(cpu_ref) = self.cpu_ref.get() { - return self.cuda_ref.get_or_init(|| { - // Copy data to CUDA device - let alloc = CUDABox::from_cpu_ref(cpu_ref.clone()); - self.cuda_alloc.set(alloc).map_err(|_| ()).expect("HerculesImmBox cuda_alloc was set unexpectedly"); - - self.cuda_alloc.get().unwrap().get_ref() - }).clone(); + return self + .cuda_ref + .get_or_init(|| { + // Copy data to CUDA device + let alloc = CUDABox::from_cpu_ref(cpu_ref.clone()); + self.cuda_alloc + .set(alloc) + .map_err(|_| ()) + .expect("HerculesImmBox cuda_alloc was set unexpectedly"); + + self.cuda_alloc.get().unwrap().get_ref() + }) + .clone(); } panic!("HerculesImmBox has no reference to data") @@ -654,7 +665,7 @@ impl<'a, T> From<HerculesCUDARefMut<'a>> for HerculesMutBox<'a, T> { impl<'a, 'b: 'a, T> HerculesMutBox<'b, T> where - T: Default + Clone + T: Default + Clone, { pub fn as_slice(&'a mut self) -> &'a mut [T] { self.as_cpu_ref().as_slice() @@ -662,42 +673,41 @@ where pub fn as_cpu_ref(&'a mut self) -> HerculesCPURefMut<'a> { match self.loc { - HerculesMutBoxLocation::CPU => { - match self.cpu_alloc { - Allocation::None => panic!("No CPU reference"), - Allocation::Reference(ref mut val) => HerculesCPURefMut::from_slice(*val), - Allocation::Allocation(ref mut val) => HerculesCPURefMut::from_slice::<T>(val), - } - } + HerculesMutBoxLocation::CPU => match self.cpu_alloc { + Allocation::None => panic!("No CPU reference"), + Allocation::Reference(ref mut val) => HerculesCPURefMut::from_slice(*val), + Allocation::Allocation(ref mut val) => HerculesCPURefMut::from_slice::<T>(val), + }, #[cfg(feature = "cuda")] HerculesMutBoxLocation::CUDA => { - let cuda_ref : HerculesCUDARef<'a> = - match self.cuda_alloc { - Allocation::None => panic!("No GPU reference"), - Allocation::Reference(ref mut val) => val.dup().as_ref(), - Allocation::Allocation(ref val) => val.get_ref(), - }; + let cuda_ref: HerculesCUDARef<'a> = match self.cuda_alloc { + Allocation::None => panic!("No GPU reference"), + Allocation::Reference(ref mut val) => val.dup().as_ref(), + Allocation::Allocation(ref val) => val.get_ref(), + }; let elements = unsafe { cuda_ref.__size() / size_of::<T>() }; // Allocate host memory (if needed) - let cpu_alloc : Allocation<&'b mut [T], Vec<T>> = - match self.cpu_alloc.take() { - Allocation::Reference(val) if val.len() == elements => Allocation::Reference(val), - Allocation::Allocation(val) if val.len() == elements => Allocation::Allocation(val), - _ => { - let mut alloc = Vec::new(); - alloc.resize_with(elements, Default::default); - Allocation::Allocation(alloc) - } - }; + let cpu_alloc: Allocation<&'b mut [T], Vec<T>> = match self.cpu_alloc.take() { + Allocation::Reference(val) if val.len() == elements => { + Allocation::Reference(val) + } + Allocation::Allocation(val) if val.len() == elements => { + Allocation::Allocation(val) + } + _ => { + let mut alloc = Vec::new(); + alloc.resize_with(elements, Default::default); + Allocation::Allocation(alloc) + } + }; self.cpu_alloc = cpu_alloc; - let cpu_ref : &'a mut [T] = - match &mut self.cpu_alloc { - Allocation::None => panic!(), - Allocation::Reference(val) => val, - Allocation::Allocation(val) => val, - }; + let cpu_ref: &'a mut [T] = match &mut self.cpu_alloc { + Allocation::None => panic!(), + Allocation::Reference(val) => val, + Allocation::Allocation(val) => val, + }; // Transfer data from CUDA device let cpu_ref = cuda_ref.to_cpu_ref(cpu_ref); @@ -712,31 +722,32 @@ where pub fn as_cuda_ref(&'a mut self) -> HerculesCUDARefMut<'a> { match self.loc { HerculesMutBoxLocation::CPU => { - let cpu_ref : &'a [T] = - match self.cpu_alloc { - Allocation::None => panic!("No CPU reference"), - Allocation::Reference(ref val) => val, - Allocation::Allocation(ref val) => val, - }; + let cpu_ref: &'a [T] = match self.cpu_alloc { + Allocation::None => panic!("No CPU reference"), + Allocation::Reference(ref val) => val, + Allocation::Allocation(ref val) => val, + }; let size = cpu_ref.len() * size_of::<T>(); - let (cuda_alloc, copied) = - match self.cuda_alloc.take() { - Allocation::Reference(val) if unsafe { val.__size() == size } => (Allocation::Reference(val), false), - Allocation::Allocation(val) if val.get_bytes() == size => (Allocation::Allocation(val), false), - _ => { - let alloc = CUDABox::from_cpu_ref(HerculesCPURef::from_slice(cpu_ref)); - (Allocation::Allocation(alloc), true) - } - }; + let (cuda_alloc, copied) = match self.cuda_alloc.take() { + Allocation::Reference(val) if unsafe { val.__size() == size } => { + (Allocation::Reference(val), false) + } + Allocation::Allocation(val) if val.get_bytes() == size => { + (Allocation::Allocation(val), false) + } + _ => { + let alloc = CUDABox::from_cpu_ref(HerculesCPURef::from_slice(cpu_ref)); + (Allocation::Allocation(alloc), true) + } + }; self.cuda_alloc = cuda_alloc; - let cuda_ref = - match self.cuda_alloc { - Allocation::None => panic!(), - Allocation::Reference(ref mut val) => val.dup(), - Allocation::Allocation(ref mut val) => val.get_ref_mut(), - }; + let cuda_ref = match self.cuda_alloc { + Allocation::None => panic!(), + Allocation::Reference(ref mut val) => val.dup(), + Allocation::Allocation(ref mut val) => val.get_ref_mut(), + }; if !copied { unsafe { @@ -747,13 +758,11 @@ where self.loc = HerculesMutBoxLocation::CUDA; cuda_ref } - HerculesMutBoxLocation::CUDA => { - match self.cuda_alloc { - Allocation::None => panic!("No GPU reference"), - Allocation::Reference(ref mut val) => val.dup(), - Allocation::Allocation(ref mut val) => val.get_ref_mut(), - } - } + HerculesMutBoxLocation::CUDA => match self.cuda_alloc { + Allocation::None => panic!("No GPU reference"), + Allocation::Reference(ref mut val) => val.dup(), + Allocation::Allocation(ref mut val) => val.get_ref_mut(), + }, } } } @@ -763,7 +772,8 @@ pub trait HerculesImmBoxTo<'a, T> { } impl<'a, T> HerculesImmBoxTo<'a, HerculesCPURef<'a>> for HerculesImmBox<'a, T> -where T: Default + Clone +where + T: Default + Clone, { fn to(&'a self) -> HerculesCPURef<'a> { self.as_cpu_ref() @@ -772,7 +782,8 @@ where T: Default + Clone #[cfg(feature = "cuda")] impl<'a, T> HerculesImmBoxTo<'a, HerculesCUDARef<'a>> for HerculesImmBox<'a, T> -where T: Default + Clone +where + T: Default + Clone, { fn to(&'a self) -> HerculesCUDARef<'a> { self.as_cuda_ref() @@ -784,7 +795,8 @@ pub trait HerculesMutBoxTo<'a, T> { } impl<'a, 'b: 'a, T> HerculesMutBoxTo<'a, HerculesCPURefMut<'a>> for HerculesMutBox<'b, T> -where T: Default + Clone +where + T: Default + Clone, { fn to(&'a mut self) -> HerculesCPURefMut<'a> { self.as_cpu_ref() @@ -793,7 +805,8 @@ where T: Default + Clone #[cfg(feature = "cuda")] impl<'a, 'b: 'a, T> HerculesMutBoxTo<'a, HerculesCUDARefMut<'a>> for HerculesMutBox<'b, T> -where T: Default + Clone +where + T: Default + Clone, { fn to(&'a mut self) -> HerculesCUDARefMut<'a> { self.as_cuda_ref() -- GitLab