We will use the below function to implement the matrix multiplication logic in the AI Engine: For more information on MMUL API, please refer to the UG1079
Function Code:
const int32* __restrict pA=(int32*) in1->ptr;
const int32* __restrict pB=(int32*) in2->ptr;
int32* __restrict pC =(int32*) out_put->ptr;
aie::vector<int32,MMUL::size_A> A0 = aie::load_v<MMUL::size_A>(pA);
aie::vector<int32,MMUL::size_B> B0 = aie::load_v<MMUL::size_B>(pB);
MMUL C00;
C00.mul(A0,B0);
aie::store_v(pC, C00.template to_vector<int32>())
Graph Code:
Simple_Graph()
{
in0 = adf::input_plio::create("DataIn1", adf::plio_32_bits, "../data_srcs/MatrixA.txt");
in1 = adf::input_plio::create("DataIn2", adf::plio_32_bits, "../data_srcs/MatrixB.txt");
out_put = adf::output_plio::create("DataOut1", adf::plio_32_bits, "../data_srcs/output.txt");
k1 = kernel::create(MatMul);
source(k1) = "../design_srcs/MatMul.cpp";
runtime<ratio>(k1) = 0.9;
connect(in1.out[0],k1.in[0]);
connect(in2.out[0],k1.in[1]);
connect(k1.out[0],out_put.in[0]);
dimensions(k1.in[0])={16};
dimensions(k1.in[1])={4};
dimensions(k1.out[0])={4};
}