Skip to content
Snippets Groups Projects
Commit 16bdbabd authored by Russel Arbore's avatar Russel Arbore
Browse files

bruh

parent fd863925
No related branches found
No related tags found
1 merge request!190Set up cava benchmark
Pipeline #201770 passed
#![feature(once_cell_try, pointer_is_aligned_to)] #![feature(once_cell_try)]
use std::alloc::{alloc, dealloc, GlobalAlloc, Layout, System}; use std::alloc::{alloc, dealloc, GlobalAlloc, Layout, System};
use std::marker::PhantomData; use std::marker::PhantomData;
...@@ -189,7 +189,6 @@ pub struct CUDABox { ...@@ -189,7 +189,6 @@ pub struct CUDABox {
impl<'a> HerculesCPURef<'a> { impl<'a> HerculesCPURef<'a> {
pub fn from_slice<T>(slice: &'a [T]) -> Self { pub fn from_slice<T>(slice: &'a [T]) -> Self {
assert!(slice.as_ptr().is_aligned_to(LARGEST_ALIGNMENT));
let ptr = unsafe { NonNull::new_unchecked(slice.as_ptr() as *mut u8) }; let ptr = unsafe { NonNull::new_unchecked(slice.as_ptr() as *mut u8) };
let size = slice.len() * size_of::<T>(); let size = slice.len() * size_of::<T>();
Self { Self {
...@@ -202,6 +201,7 @@ impl<'a> HerculesCPURef<'a> { ...@@ -202,6 +201,7 @@ impl<'a> HerculesCPURef<'a> {
pub fn as_slice<T>(self) -> &'a [T] { pub fn as_slice<T>(self) -> &'a [T] {
let ptr = self.ptr.as_ptr() as *const T; let ptr = self.ptr.as_ptr() as *const T;
assert_eq!(self.size % size_of::<T>(), 0); assert_eq!(self.size % size_of::<T>(), 0);
assert!(ptr.is_aligned());
unsafe { from_raw_parts(ptr, self.size / size_of::<T>()) } unsafe { from_raw_parts(ptr, self.size / size_of::<T>()) }
} }
...@@ -214,7 +214,6 @@ impl<'a> HerculesCPURef<'a> { ...@@ -214,7 +214,6 @@ impl<'a> HerculesCPURef<'a> {
} }
pub unsafe fn __from_parts(ptr: *mut u8, size: usize) -> Self { pub unsafe fn __from_parts(ptr: *mut u8, size: usize) -> Self {
assert!(ptr.is_aligned_to(LARGEST_ALIGNMENT));
Self { Self {
ptr: NonNull::new(ptr).unwrap(), ptr: NonNull::new(ptr).unwrap(),
size, size,
...@@ -225,7 +224,6 @@ impl<'a> HerculesCPURef<'a> { ...@@ -225,7 +224,6 @@ impl<'a> HerculesCPURef<'a> {
impl<'a> HerculesCPURefMut<'a> { impl<'a> HerculesCPURefMut<'a> {
pub fn from_slice<T>(slice: &'a mut [T]) -> Self { pub fn from_slice<T>(slice: &'a mut [T]) -> Self {
assert!(slice.as_ptr().is_aligned_to(LARGEST_ALIGNMENT));
let ptr = unsafe { NonNull::new_unchecked(slice.as_ptr() as *mut u8) }; let ptr = unsafe { NonNull::new_unchecked(slice.as_ptr() as *mut u8) };
let size = slice.len() * size_of::<T>(); let size = slice.len() * size_of::<T>();
Self { Self {
...@@ -259,7 +257,6 @@ impl<'a> HerculesCPURefMut<'a> { ...@@ -259,7 +257,6 @@ impl<'a> HerculesCPURefMut<'a> {
} }
pub unsafe fn __from_parts(ptr: *mut u8, size: usize) -> Self { pub unsafe fn __from_parts(ptr: *mut u8, size: usize) -> Self {
assert!(ptr.is_aligned_to(LARGEST_ALIGNMENT));
Self { Self {
ptr: NonNull::new(ptr).unwrap(), ptr: NonNull::new(ptr).unwrap(),
size, size,
...@@ -271,7 +268,6 @@ impl<'a> HerculesCPURefMut<'a> { ...@@ -271,7 +268,6 @@ impl<'a> HerculesCPURefMut<'a> {
#[cfg(feature = "cuda")] #[cfg(feature = "cuda")]
impl<'a> HerculesCUDARef<'a> { impl<'a> HerculesCUDARef<'a> {
pub fn to_cpu_ref<'b, T>(self, dst: &'b mut [T]) -> HerculesCPURefMut<'b> { pub fn to_cpu_ref<'b, T>(self, dst: &'b mut [T]) -> HerculesCPURefMut<'b> {
assert!(dst.as_ptr().is_aligned_to(LARGEST_ALIGNMENT));
unsafe { unsafe {
let size = self.size; let size = self.size;
assert_eq!(size, dst.len() * size_of::<T>()); assert_eq!(size, dst.len() * size_of::<T>());
...@@ -313,7 +309,6 @@ impl<'a> HerculesCUDARefMut<'a> { ...@@ -313,7 +309,6 @@ impl<'a> HerculesCUDARefMut<'a> {
} }
pub fn to_cpu_ref<'b, T>(self, dst: &mut [T]) -> HerculesCPURefMut<'b> { pub fn to_cpu_ref<'b, T>(self, dst: &mut [T]) -> HerculesCPURefMut<'b> {
assert!(dst.as_ptr().is_aligned_to(LARGEST_ALIGNMENT));
unsafe { unsafe {
let size = self.size; let size = self.size;
let ptr = NonNull::new(dst.as_ptr() as *mut u8).unwrap(); let ptr = NonNull::new(dst.as_ptr() as *mut u8).unwrap();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment