e35a761ed4eee529f116ebff6941cba6c1088518
[platform/core/ml/nnfw.git] / tests / tools / onert_run / src / args.h
1 /*
2  * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __ONERT_RUN_ARGS_H__
18 #define __ONERT_RUN_ARGS_H__
19
20 #include <string>
21 #include <unordered_map>
22 #include <vector>
23 #include <boost/program_options.hpp>
24
25 #include "types.h"
26
27 namespace po = boost::program_options;
28
29 namespace onert_run
30 {
31
32 using TensorShapeMap = std::unordered_map<uint32_t, TensorShape>;
33
34 #if defined(ONERT_HAVE_HDF5) && ONERT_HAVE_HDF5 == 1
35 enum class WhenToUseH5Shape
36 {
37   NOT_PROVIDED, // Param not provided
38   PREPARE, // read shapes in h5 file and set them as inputs' shape before calling nnfw_prepare()
39   RUN,     // read shapes in h5 file and set them as inputs' shape before calling nnfw_run()
40 };
41 #endif
42
43 class Args
44 {
45 public:
46   Args(const int argc, char **argv);
47   void print(void);
48
49   const std::string &getPackageFilename(void) const { return _package_filename; }
50   const std::string &getModelFilename(void) const { return _model_filename; }
51   const bool useSingleModel(void) const { return _use_single_model; }
52 #if defined(ONERT_HAVE_HDF5) && ONERT_HAVE_HDF5 == 1
53   const std::string &getDumpFilename(void) const { return _dump_filename; }
54   const std::string &getLoadFilename(void) const { return _load_filename; }
55   WhenToUseH5Shape getWhenToUseH5Shape(void) const { return _when_to_use_h5_shape; }
56 #endif
57   const std::string &getDumpRawFilename(void) const { return _dump_raw_filename; }
58   const std::string &getLoadRawFilename(void) const { return _load_raw_filename; }
59   const int getNumRuns(void) const { return _num_runs; }
60   const int getWarmupRuns(void) const { return _warmup_runs; }
61   const int getRunDelay(void) const { return _run_delay; }
62   std::unordered_map<uint32_t, uint32_t> getOutputSizes(void) const { return _output_sizes; }
63   const bool getGpuMemoryPoll(void) const { return _gpumem_poll; }
64   const bool getMemoryPoll(void) const { return _mem_poll; }
65   const bool getWriteReport(void) const { return _write_report; }
66   const bool printVersion(void) const { return _print_version; }
67   TensorShapeMap &getShapeMapForPrepare() { return _shape_prepare; }
68   TensorShapeMap &getShapeMapForRun() { return _shape_run; }
69   /// @brief Return true if "--shape_run" or "--shape_prepare" is provided
70   bool shapeParamProvided();
71   const int getVerboseLevel(void) const { return _verbose_level; }
72
73 private:
74   void Initialize();
75   void Parse(const int argc, char **argv);
76
77 private:
78   po::positional_options_description _positional;
79   po::options_description _options;
80
81   std::string _package_filename;
82   std::string _model_filename;
83 #if defined(ONERT_HAVE_HDF5) && ONERT_HAVE_HDF5 == 1
84   std::string _dump_filename;
85   std::string _load_filename;
86   WhenToUseH5Shape _when_to_use_h5_shape = WhenToUseH5Shape::NOT_PROVIDED;
87 #endif
88   std::string _dump_raw_filename;
89   std::string _load_raw_filename;
90   TensorShapeMap _shape_prepare;
91   TensorShapeMap _shape_run;
92   int _num_runs;
93   int _warmup_runs;
94   int _run_delay;
95   std::unordered_map<uint32_t, uint32_t> _output_sizes;
96   bool _gpumem_poll;
97   bool _mem_poll;
98   bool _write_report;
99   bool _print_version = false;
100   int _verbose_level;
101   bool _use_single_model = false;
102 };
103
104 } // end of namespace onert_run
105
106 #endif // __ONERT_RUN_ARGS_H__