Example: add two matrices
This commit is contained in:
@@ -14,8 +14,8 @@ use nalgebra::Matrix;
|
||||
use pim::{
|
||||
array::{PimMatrixArena, PimRegion, PimStorage},
|
||||
kernel::TEST_KERNEL,
|
||||
matrix::{F16x1, F16x16},
|
||||
state::PimState,
|
||||
vector::{F16x1, F16x16},
|
||||
};
|
||||
use pim_isa::BankMode;
|
||||
use uart::Uart0;
|
||||
@@ -30,21 +30,18 @@ pub extern "C" fn entry() -> ! {
|
||||
let mut uart = Uart0;
|
||||
let mut pim_state = PimState::new(&TEST_KERNEL);
|
||||
|
||||
let pim_matrix_arena = RefCell::new(PimMatrixArena([[F16x16::default(); 8]; 8]));
|
||||
let pim_matrix_arena0 = RefCell::new(PimMatrixArena([[F16x16::default(); 8]; 8]));
|
||||
let pim_matrix_arena1 = RefCell::new(PimMatrixArena([[F16x16::default(); 8]; 8]));
|
||||
let pim_storage0 = PimStorage {
|
||||
arena: &pim_matrix_arena,
|
||||
arena: &pim_matrix_arena0,
|
||||
index: 0,
|
||||
};
|
||||
let pim_storage1 = PimStorage {
|
||||
arena: &pim_matrix_arena,
|
||||
index: 1,
|
||||
};
|
||||
let pim_storage2 = PimStorage {
|
||||
arena: &pim_matrix_arena,
|
||||
index: 2,
|
||||
arena: &pim_matrix_arena1,
|
||||
index: 0,
|
||||
};
|
||||
|
||||
let mut matrix0 = Matrix::from_data(pim_storage0);
|
||||
let matrix1 = Matrix::from_data(pim_storage1);
|
||||
matrix0.fill_column(0, F16x1(f16::ZERO));
|
||||
matrix0.fill_column(1, F16x1(f16::ONE));
|
||||
matrix0.fill_column(2, F16x1(f16::PI));
|
||||
@@ -54,36 +51,31 @@ pub extern "C" fn entry() -> ! {
|
||||
matrix0.fill_column(6, F16x1(f16::LN_2));
|
||||
matrix0.fill_column(7, F16x1(f16::LN_10));
|
||||
|
||||
writeln!(
|
||||
&mut uart,
|
||||
"Cache Lines: {}\nRows: {}",
|
||||
PimMatrixArena::<8, 8>::OCCUPIED_CACHE_LINES,
|
||||
PimMatrixArena::<8, 8>::OCCUPIED_ROWS
|
||||
)
|
||||
.unwrap();
|
||||
writeln!(&mut uart, "{matrix0} * 2\n=").unwrap();
|
||||
let mut matrix1 = Matrix::from_data(pim_storage1);
|
||||
matrix1.fill_lower_triangle(F16x1(f16::ONE), 0);
|
||||
|
||||
writeln!(&mut uart, "{matrix0} + {matrix1}\n=").unwrap();
|
||||
|
||||
// Invalidate and flush array just in case
|
||||
pim_matrix_arena.borrow_mut().invalidate_flush();
|
||||
// dummy_array.invalidate_flush();
|
||||
pim_matrix_arena0.borrow_mut().invalidate_flush();
|
||||
pim_matrix_arena1.borrow_mut().invalidate_flush();
|
||||
barrier::dsb(barrier::SY);
|
||||
|
||||
pim_state.set_bank_mode(BankMode::PimAllBank);
|
||||
pim_matrix_arena
|
||||
.borrow_mut()
|
||||
pim_matrix_arena0
|
||||
.borrow()
|
||||
.execute_instruction_read_dual_bank();
|
||||
pim_matrix_arena
|
||||
.borrow_mut()
|
||||
pim_matrix_arena1
|
||||
.borrow()
|
||||
.execute_instruction_read_dual_bank();
|
||||
pim_matrix_arena
|
||||
pim_matrix_arena0
|
||||
.borrow_mut()
|
||||
.execute_instruction_write_dual_bank();
|
||||
pim_state.set_bank_mode(BankMode::SingleBank);
|
||||
|
||||
pim_matrix_arena.borrow_mut().invalidate();
|
||||
pim_matrix_arena0.borrow_mut().invalidate();
|
||||
barrier::dsb(barrier::SY);
|
||||
|
||||
// writeln!(&mut uart, "{matrix0}+{matrix1}").unwrap();
|
||||
writeln!(&mut uart, "{matrix0}").unwrap();
|
||||
|
||||
m5ops::exit();
|
||||
|
||||
Reference in New Issue
Block a user