Map PIM region to uncacheable region
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user