From b46db91e13edbe2541fc64335aacba09ebdfeab7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9D=B4=EC=83=81=EA=B7=9C/On-Device=20Lab=28SR=29/Princip?= =?utf8?q?al=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Mon, 26 Aug 2019 05:55:03 -0400 Subject: [PATCH] [nnpkg_run] implement dump (in h5 format) (#6669) It dumps outputs in h5 format. Signed-off-by: Sanggyu Lee --- tests/tools/nnpackage_run/src/nnpackage_run.cc | 34 +++++++++++++++++++------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/tests/tools/nnpackage_run/src/nnpackage_run.cc b/tests/tools/nnpackage_run/src/nnpackage_run.cc index eee0361..dce5dbd 100644 --- a/tests/tools/nnpackage_run/src/nnpackage_run.cc +++ b/tests/tools/nnpackage_run/src/nnpackage_run.cc @@ -61,14 +61,6 @@ std::vector randomData(RandomGenerator &randgen, uint64_t size) static const char *h5_value_grpname = "value"; -int dump(const std::string filename) -{ - hid_t file_id; - herr_t status; - file_id = H5Fcreate(filename.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - return H5Fclose(file_id); -} - int main(const int argc, char **argv) { NNPackageRun::Args args(argc, argv); @@ -229,8 +221,32 @@ int main(const int argc, char **argv) // dump output tensors + auto dumpOutputs = [session, num_outputs, &outputs](std::string filename) { + hid_t file_id = H5Fcreate(filename.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + for (uint32_t i = 0; i < num_outputs; i++) + { + nnfw_tensorinfo ti; + NNPR_ENSURE_STATUS(nnfw_output_tensorinfo(session, i, &ti)); + std::vector dims; + dims.resize(ti.rank); + for (uint32_t j = 0; j < ti.rank; ++j) + { + assert(ti.dims[j] >= 0); + dims[j] = ti.dims[j]; + } + hid_t valgrp_id = H5Gcreate(file_id, h5_value_grpname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + hid_t dsp_id = H5Screate_simple(ti.rank, dims.data(), NULL); + hid_t dset_id = H5Dcreate2(valgrp_id, std::to_string(i).c_str(), H5T_IEEE_F32BE, dsp_id, + H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + H5Dwrite(dset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, outputs[i].data()); + H5Dclose(dset_id); + H5Sclose(dsp_id); + } + H5Fclose(file_id); + }; + if (!args.getDumpFilename().empty()) - dump(args.getDumpFilename()); + dumpOutputs(args.getDumpFilename()); std::cout << "nnfw_prepare takes " << prepare_ms / 1e3 << " sec" << std::endl; std::cout << "nnfw_run takes " << run_ms / 1e3 << " sec" << std::endl; -- 2.7.4