Map PIM region to uncacheable region

This commit is contained in:
2024-01-04 19:44:16 +01:00
parent 34c8ab84fb
commit 92499fe95b
9 changed files with 78 additions and 85 deletions

View File

@@ -17,12 +17,11 @@ use embedded_alloc::Heap;
use half::f16;
use nalgebra::Matrix;
use pim::{
array::{DummyArray, PimMatrixArena, PimRegion, PimStorage, NUMBER_OF_BANKS},
kernel::{execute_matrix_add, execute_matrix_multiply, MATRIX_ADD, MATRIX_MUL},
array::{DummyArray, PimMatrixArena, PimStorage, NUMBER_OF_BANKS},
kernel::{execute_matrix_multiply, MATRIX_MUL},
state::PimState,
vector::{F16x1, F16x16},
};
use pim_isa::BankMode;
use uart::Uart0;
mod boot;
@@ -49,13 +48,13 @@ pub extern "C" fn entry() -> ! {
let mut pim_state = PimState::new(&MATRIX_MUL);
pim_state.set_kernel();
let mut pim_matrix_arena0 = Rc::new(RefCell::new(PimMatrixArena(
let pim_matrix_arena0 = Rc::new(RefCell::new(PimMatrixArena(
[[[F16x16::default(); NUMBER_OF_BANKS]; 3]; 3],
)));
let mut pim_matrix_arena1 = Rc::new(RefCell::new(PimMatrixArena(
let pim_matrix_arena1 = Rc::new(RefCell::new(PimMatrixArena(
[[[F16x16::default(); NUMBER_OF_BANKS]; 3]; 3],
)));
let mut pim_matrix_arena2 = Rc::new(RefCell::new(PimMatrixArena(
let pim_matrix_arena2 = Rc::new(RefCell::new(PimMatrixArena(
[[[F16x16::default(); NUMBER_OF_BANKS]; 3]; 3],
)));
let pim_storage0 = PimStorage {
@@ -71,6 +70,15 @@ pub extern "C" fn entry() -> ! {
index: 0,
};
writeln!(
&mut uart,
"arena0: {:?}\narena1: {:?}\narena2: {:?}",
core::ptr::addr_of!(*pim_matrix_arena0.borrow()),
core::ptr::addr_of!(*pim_matrix_arena1.borrow()),
core::ptr::addr_of!(*pim_matrix_arena2.borrow()),
)
.unwrap();
let mut matrix0 = Matrix::from_data(pim_storage0);
matrix0.fill_lower_triangle(F16x1(f16::ONE), 0);
@@ -81,14 +89,9 @@ pub extern "C" fn entry() -> ! {
writeln!(&mut uart, "{matrix0} * {matrix1}\n=").unwrap();
// Invalidate and flush array just in case
pim_matrix_arena0.borrow_mut().invalidate_flush();
pim_matrix_arena1.borrow_mut().invalidate_flush();
pim_matrix_arena2.borrow_mut().invalidate_flush();
let mut dummy_array = Box::new(DummyArray([F16x16::default(); NUMBER_OF_BANKS]));
barrier::dsb(barrier::SY);
// execute_matrix_add(&pim_matrix_arena0, &pim_matrix_arena1, &dummy_array);
execute_matrix_multiply(
&mut pim_state,
&mut pim_matrix_arena0.borrow_mut(),
@@ -97,9 +100,6 @@ pub extern "C" fn entry() -> ! {
dummy_array.as_mut(),
);
pim_matrix_arena2.borrow().invalidate();
barrier::dsb(barrier::SY);
writeln!(&mut uart, "{matrix2}").unwrap();
m5ops::exit();