28 #include "utils/Utils.h"
33 using namespace utils;
35 class NESGEMMExample :
public Example
38 bool do_setup(
int argc,
char **argv)
override
49 stream.open(argv[1], std::fstream::in);
52 if (argc < 3 || (argc < 4 && stream.bad()))
55 std::cout <<
"Usage: 1) ./build/neon_sgemm input_matrix_1.npy input_matrix_2.npy [input_matrix_3.npy] "
56 "[alpha = 1] [beta = 0]\n";
57 std::cout <<
" 2) ./build/neon_sgemm M N K [alpha = 1.0f] [beta = 0.0f]\n\n";
58 std::cout <<
"Too few or no input_matrices provided. Using M=7, N=3, K=5, alpha=1.0f and beta=0.0f\n\n";
77 stream.open(argv[3], std::fstream::in);
86 alpha = strtof(argv[4],
nullptr);
91 beta = strtof(argv[5],
nullptr);
97 alpha = strtof(argv[3],
nullptr);
101 beta = strtof(argv[4],
nullptr);
108 size_t M = strtol(argv[1],
nullptr, 10);
109 size_t N = strtol(argv[2],
nullptr, 10);
110 size_t K = strtol(argv[3],
nullptr, 10);
118 alpha = strtof(argv[4],
nullptr);
122 beta = strtof(argv[5],
nullptr);
131 sgemm.configure(&src0, &src1,
nullptr, &
dst, alpha, beta);
134 src0.allocator()->allocate();
135 src1.allocator()->allocate();
136 dst.allocator()->allocate();
141 npy0.fill_tensor(src0);
142 npy1.fill_tensor(src1);
144 output_filename =
"sgemm_out.npy";
145 is_fortran = npy0.is_fortran();
149 src2.allocator()->allocate();
150 npy2.fill_tensor(src2);
155 src2.allocator()->allocate();
167 void do_run()
override
172 void do_teardown()
override
174 if (!output_filename.empty())
183 float alpha{}, beta{};
185 std::string output_filename{};
193 int main(
int argc,
char **argv)
195 return utils::run_example<NESGEMMExample>(argc, argv);