1 /* Copyright 2016 The TensorFlow Authors All Rights Reserved. 2 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 7 http://www.apache.org/licenses/LICENSE-2.0 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 ==============================================================================*/ 15 16 #ifndef TENSORFLOW_CORE_PROFILER_TFPROF_OPTIONS_H_ 17 #define TENSORFLOW_CORE_PROFILER_TFPROF_OPTIONS_H_ 18 19 #include <set> 20 #include <string> 21 #include <utility> 22 #include <vector> 23 24 #include "tensorflow/core/framework/types.h" 25 #include "tensorflow/core/lib/core/status.h" 26 27 namespace tensorflow { 28 namespace tfprof { 29 static const char* const kOptions[] = { 30 "-max_depth", 31 "-min_bytes", 32 "-min_peak_bytes", 33 "-min_residual_bytes", 34 "-min_output_bytes", 35 "-min_micros", 36 "-min_accelerator_micros", 37 "-min_cpu_micros", 38 "-min_params", 39 "-min_float_ops", 40 "-min_occurrence", 41 "-step", 42 "-order_by", 43 "-account_type_regexes", 44 "-start_name_regexes", 45 "-trim_name_regexes", 46 "-show_name_regexes", 47 "-hide_name_regexes", 48 "-account_displayed_op_only", 49 "-select", 50 "-output", 51 }; 52 53 static const char* const kOrderBy[] = { 54 "name", "bytes", "peak_bytes", "residual_bytes", 55 "output_bytes", "micros", "accelerator_micros", "cpu_micros", 56 "params", "float_ops", "occurrence", 57 }; 58 59 // Append Only. 60 // TODO(xpan): As we are adding more fields to be selected, we 61 // need to have a way to tell users what fields are available in which view. 62 static const char* const kShown[] = {"bytes", "micros", 63 "params", "float_ops", 64 "tensor_value", "device", 65 "op_types", "occurrence", 66 "input_shapes", "accelerator_micros", 67 "cpu_micros", "peak_bytes", 68 "residual_bytes", "output_bytes"}; 69 70 static const char* const kCmds[] = { 71 "scope", "graph", "code", "op", "advise", "set", "help", 72 }; 73 74 static const char* const kOutput[] = {"timeline", "stdout", "file", "pprof", 75 "none"}; 76 77 static const char* const kTimelineOpts[] = { 78 "outfile", 79 }; 80 81 static const char* const kTimelineRequiredOpts[] = {"outfile"}; 82 83 static const char* const kFileOpts[] = { 84 "outfile", 85 }; 86 87 static const char* const kFileRequiredOpts[] = { 88 "outfile", 89 }; 90 91 static const char* const kPprofOpts[] = { 92 "outfile", 93 }; 94 95 static const char* const kPprofRequiredOpts[] = { 96 "outfile", 97 }; 98 99 struct Options { 100 public: 101 static tensorflow::Status FromProtoStr(const string& opts_proto_str, 102 Options* opts); 103 ~OptionsOptions104 virtual ~Options() {} OptionsOptions105 Options() 106 : Options(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", {}, {}, {}, {}, {}, 107 false, {}, "", {}) {} 108 OptionsOptions109 Options(int max_depth, int64_t min_bytes, int64_t min_peak_bytes, 110 int64_t min_residual_bytes, int64_t min_output_bytes, 111 int64_t min_micros, int64_t min_accelerator_micros, 112 int64_t min_cpu_micros, int64_t min_params, int64_t min_float_ops, 113 int64_t min_occurrence, int64_t step, const string& order_by, 114 const std::vector<string>& account_type_regexes, 115 const std::vector<string>& start_name_regexes, 116 const std::vector<string>& trim_name_regexes, 117 const std::vector<string>& show_name_regexes, 118 const std::vector<string>& hide_name_regexes, 119 bool account_displayed_op_only, const std::vector<string>& select, 120 const string& output_type, 121 const std::map<string, string>& output_options) 122 : max_depth(max_depth), 123 min_bytes(min_bytes), 124 min_peak_bytes(min_peak_bytes), 125 min_residual_bytes(min_residual_bytes), 126 min_output_bytes(min_output_bytes), 127 min_micros(min_micros), 128 min_accelerator_micros(min_accelerator_micros), 129 min_cpu_micros(min_cpu_micros), 130 min_params(min_params), 131 min_float_ops(min_float_ops), 132 min_occurrence(min_occurrence), 133 step(step), 134 order_by(order_by), 135 account_type_regexes(account_type_regexes), 136 start_name_regexes(start_name_regexes), 137 trim_name_regexes(trim_name_regexes), 138 show_name_regexes(show_name_regexes), 139 hide_name_regexes(hide_name_regexes), 140 account_displayed_op_only(account_displayed_op_only), 141 select(select.begin(), select.end()), 142 output_type(output_type), 143 output_options(output_options) {} 144 145 string ToString() const; 146 147 int max_depth; 148 int64_t min_bytes; 149 int64_t min_peak_bytes; 150 int64_t min_residual_bytes; 151 int64_t min_output_bytes; 152 int64_t min_micros; 153 int64_t min_accelerator_micros; 154 int64_t min_cpu_micros; 155 int64_t min_params; 156 int64_t min_float_ops; 157 int64_t min_occurrence; 158 int64_t step; 159 string order_by; 160 161 std::vector<string> account_type_regexes; 162 std::vector<string> start_name_regexes; 163 std::vector<string> trim_name_regexes; 164 std::vector<string> show_name_regexes; 165 std::vector<string> hide_name_regexes; 166 bool account_displayed_op_only; 167 168 std::set<string> select; 169 170 string output_type; 171 std::map<string, string> output_options; 172 }; 173 174 // Parse the -output option. 175 // 'output_opt': User input string with format: output_type:key=value,key=value. 176 // 'output_type' and 'output_options' are extracted from 'output_opt'. 177 tensorflow::Status ParseOutput(const string& output_opt, string* output_type, 178 std::map<string, string>* output_options); 179 180 } // namespace tfprof 181 } // namespace tensorflow 182 183 #endif // TENSORFLOW_CORE_PROFILER_TFPROF_OPTIONS_H_ 184