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);
// 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<hsize_t> 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;