2 // Copyright (c) 2016 Intel Corporation
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
8 // http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include "kernel_selector_common.h"
20 namespace kernel_selector
22 std::string GetStringEnv(const char* varName)
28 errno_t err = _dupenv_s(&env, &len, varName);
33 str = std::string(env);
38 const char *env = getenv(varName);
41 str = std::string(env);
48 std::string toString(ActivationFunction activation)
50 std::string method("LINEAR");
53 case ActivationFunction::LOGISTIC: method = "LOGISTIC"; break;
54 case ActivationFunction::HYPERBOLIC_TAN: method = "HYPERBOLIC_TAN"; break;
55 case ActivationFunction::RELU: method = "RELU"; break;
56 case ActivationFunction::RELU_NEGATIVE_SLOPE: method = "RELU_NEGATIVE_SLOPE"; break;
57 case ActivationFunction::CLAMP: method = "CLAMP"; break;
58 case ActivationFunction::SOFTRELU: method = "SOFTRELU"; break;
59 case ActivationFunction::ABS: method = "ABS"; break;
60 case ActivationFunction::SQUARE: method = "SQUARE"; break;
61 case ActivationFunction::SQRT: method = "SQRT"; break;
62 case ActivationFunction::LINEAR: method = "LINEAR"; break;
63 case ActivationFunction::ELU: method = "ELU"; break;
64 case ActivationFunction::RELU_GRAD: method = "RELU_GRAD"; break;
65 case ActivationFunction::RELU_NEGATIVE_SLOPE_GRAD: method = "RELU_NEGATIVE_SLOPE_GRAD"; break;
66 case ActivationFunction::SIN: method = "SIN"; break;
67 case ActivationFunction::ASIN: method = "ASIN"; break;
68 case ActivationFunction::SINH: method = "SINH"; break;
69 case ActivationFunction::COS: method = "COS"; break;
70 case ActivationFunction::ACOS: method = "ACOS"; break;
71 case ActivationFunction::COSH: method = "COSH"; break;
72 case ActivationFunction::LOG: method = "LOG"; break;
73 case ActivationFunction::LOG2: method = "LOG2"; break;
74 case ActivationFunction::EXP: method = "EXP"; break;
75 case ActivationFunction::NOT: method = "NOT"; break;
76 case ActivationFunction::NONE: method = "NONE"; break;
77 case ActivationFunction::NONE_GRAD: method = "NONE_GRAD"; break;
83 std::string toString(DataLayout l)
87 case kernel_selector::DataLayout::bf: return "BF";
88 case kernel_selector::DataLayout::fb: return "FB";
89 case kernel_selector::DataLayout::bfyx: return "BFYX";
90 case kernel_selector::DataLayout::yxfb: return "YXFB";
91 case kernel_selector::DataLayout::byxf: return "BYXF";
92 case kernel_selector::DataLayout::fyxb: return "FYXB";
93 case kernel_selector::DataLayout::bs_f_bsv8__af8: return "BS_F_BSV8__AF8";
94 case kernel_selector::DataLayout::bs_f_bsv16__af8: return "BS_F_BSV16__AF8";
95 case kernel_selector::DataLayout::bf8_xy16: return "BF8_XY16";
96 case kernel_selector::DataLayout::brfyx: return "BRFYX";
97 case kernel_selector::DataLayout::winograd_2x3_s1_data: return "WINOGRAD_2x3_S1_DATA";
98 case kernel_selector::DataLayout::byxf_af32: return "BYXF_AF32";
99 case kernel_selector::DataLayout::byx8_f4: return "BYX8_F4";
100 case kernel_selector::DataLayout::fs_bs_yx_bsv4_fsv32: return "FS_BS_YX_BSV4_FSV32";
101 case kernel_selector::DataLayout::b_fs_yx_fsv4: return "B_FS_YX_FSV4";
106 std::string toString(Datatype dType)
110 case Datatype::INT8: return "INT8";
111 case Datatype::UINT8: return "UINT8";
112 case Datatype::INT16: return "INT16";
113 case Datatype::UINT16: return "UINT16";
114 case Datatype::INT32: return "INT32";
115 case Datatype::UINT32: return "UINT32";
116 case Datatype::INT64: return "INT64";
117 case Datatype::F16: return "F16";
118 case Datatype::F32: return "F32";
123 std::string toString(WeightsType wType)
127 case WeightsType::F16: return "F16";
128 case WeightsType::F32: return "F32";
129 case WeightsType::INT8: return "INT8";
134 std::string toString(KernelType kt)
138 case KernelType::UNKNOWN: return "UNKNOWN";
139 case KernelType::CONVOLUTION: return "CONVOLUTION";
140 case KernelType::LRN: return "LRN";
141 case KernelType::POOLING: return "POOLING";
142 case KernelType::ROI_POOLING: return "ROI_POOLING";
143 case KernelType::FULLY_CONNECTED: return "FULLY_CONNECTED";
144 case KernelType::ACTIVATION: return "ACTIVATION";
145 case KernelType::SOFT_MAX: return "SOFT_MAX";
146 case KernelType::REGION_YOLO: return "REGION_YOLO";
147 case KernelType::REORG_YOLO: return "REORG_YOLO";
148 case KernelType::ELTWISE: return "ELTWISE";
149 case KernelType::REORDER: return "REORDER";
150 case KernelType::SELECT: return "SELECT";
156 std::string toString(EltwiseMode b_mode)
160 case EltwiseMode::ADD: return "ADD";
161 case EltwiseMode::SUB: return "SUB";
162 case EltwiseMode::MUL: return "MUL";
163 case EltwiseMode::DIV: return "DIV";
164 case EltwiseMode::MIN: return "MIN";
165 case EltwiseMode::MAX: return "MAX";
166 case EltwiseMode::POW: return "POW";
167 case EltwiseMode::MODULU: return "MODULU";
168 case EltwiseMode::SQRT: return "SQRT";
169 case EltwiseMode::RSQRT: return "RSQRT";
170 case EltwiseMode::ASSIGN: return "ASSIGN";
176 std::string toString(ReorderMode mode)
180 case ReorderMode::xyzw: return "XYZW";
181 case ReorderMode::xywz: return "XYWZ";
182 case ReorderMode::xwyz: return "XWYZ";
183 case ReorderMode::wxyz: return "WXYZ";
184 case ReorderMode::xzyw: return "XZYW";
185 case ReorderMode::zyxw: return "ZYXW";
186 case ReorderMode::yxzw: return "YXZW";
187 default: return "XYZW";
191 std::string toString(MeanSubtractMode mode)
195 case MeanSubtractMode::NONE: return "NONE";
196 case MeanSubtractMode::INSIDE_PARAMS: return "INSIDE_PARAMS";
197 case MeanSubtractMode::IN_BUFFER: return "IN_BUFFER";
202 std::string toString(ArgMaxMinOut mode)
206 case ArgMaxMinOut::MAX: return "MAX";
207 case ArgMaxMinOut::MIN: return "MIN";
212 std::string toString(ArgMaxMinAxis mode)
216 case ArgMaxMinAxis::BATCH: return "BATCH";
217 case ArgMaxMinAxis::FEATURE: return "FEATURE";
218 case ArgMaxMinAxis::X: return "X";
219 case ArgMaxMinAxis::Y: return "Y";
220 case ArgMaxMinAxis::XYF: return "XYF";
225 std::string toString(LookUpTableAxis mode)
229 case LookUpTableAxis::BATCH: return "BATCH";
230 case LookUpTableAxis::FEATURE: return "FEATURE";
231 case LookUpTableAxis::X: return "X";
232 case LookUpTableAxis::Y: return "Y";
233 case LookUpTableAxis::XYF: return "XYF";
238 std::string toString(PoolType mode)
242 case PoolType::MAX: return "MAX";
243 case PoolType::AVG: return "AVG";
244 case PoolType::MAX_WITH_ARGMAX: return "MAX_WITH_ARGMAX";
245 case PoolType::BILINEAR: return "BILINEAR";
250 std::string toString(LRNMode mode)
254 case LRNMode::ACROSS_CHANNEL: return "ACROSS_CHANNEL";
255 case LRNMode::WITHIN_CHANNEL: return "WITHIN_CHANNEL";
260 std::string toString(KernelDividerMode mode)
264 case KernelDividerMode::DONT_CARE: return "DONT_CARE";
265 case KernelDividerMode::FIXED: return "FIXED";
266 case KernelDividerMode::DYNAMIC: return "DYNAMIC";
267 case KernelDividerMode::DYNAMIC_WITH_PADDING: return "DYNAMIC_WITH_PADDING";
272 std::string toString(SoftmaxDim d)
276 case SoftmaxDim::X: return "X";
277 case SoftmaxDim::Y: return "Y";
278 case SoftmaxDim::FEATURE: return "FEATURE";
283 std::string toString(NormalizeMode mode)
287 case NormalizeMode::ACROSS_SPATIAL: return "ACROSS_SPATIAL";
288 case NormalizeMode::WITHIN_SPATIAL: return "WITHIN_SPATIAL";
293 std::string toString(MVNMode mode)
297 case MVNMode::ACROSS_CHANNELS: return "ACROSS_CHANNELS";
298 case MVNMode::WITHIN_CHANNELS: return "WITHIN_CHANNELS";
303 std::string toString(WeightsLayout layout)
307 case WeightsLayout::oi: return "OI";
308 case WeightsLayout::io: return "IO";
309 case WeightsLayout::oiyx: return "OIYX";
310 case WeightsLayout::oyxi: return "OYXI";
311 case WeightsLayout::iyxo: return "IYXO";
312 case WeightsLayout::yxio: return "YXIO";
313 case WeightsLayout::os_iyx_osv16: return "OS_IYX_OSV16";
314 case WeightsLayout::os_iyx_osv32: return "OS_IYX_OSV32";
315 case WeightsLayout::os_iyx_osv64: return "OS_IYX_OSV64";
316 case WeightsLayout::os_iyx_osv16_rotate_180: return "OS_IYX_OSV16_ROTATE_180";
317 case WeightsLayout::os_i_osv16: return "OS_I_OSV16";
318 case WeightsLayout::os_i_osv8__ai8: return "OS_I_OSV8__AI8";
319 case WeightsLayout::os_i_osv16__ai8: return "OS_I_OSV16__AI8";
320 case WeightsLayout::i_yxs_os_yxsv2_osv16: return "I_YXS_OS_YXSV2_OSV16";
321 case WeightsLayout::iy_xs_os_xsv2_osv16__ao32: return "IY_XS_OS_XSV2_OSV16__AO32";
322 case WeightsLayout::iy_xs_os_xsv2_osv8__ao32: return "IY_XS_OS_XSV2_OSV8__AO32";
323 case WeightsLayout::image_2d_weights_c4_fyx_b: return "IMAGE_2D_WEIGHTS_C4_FYX_B";
324 case WeightsLayout::image_2d_weights_c1_b_fyx: return "IMAGE_2D_WEIGHTS_C1_B_FYX";
325 case WeightsLayout::winograd_2x3_s1_weights: return "WINOGRAD_2x3_S1_WEIGHTS";
326 case WeightsLayout::winograd_2x3_s1_fused_weights: return "WINOGRAD_2x3_S1_FUSED_WEIGHTS";
327 case WeightsLayout::winograd_6x3_s1_fused_weights: return "WINOGRAD_6x3_S1_FUSED_WEIGHTS";
328 case WeightsLayout::image_2d_weights_winograd_6x3_s1_fbxyb: return "IMAGE_2D_WEIGHTS_WINOGRAD_6x3_S1_FBXYB";
329 case WeightsLayout::image_2d_weights_winograd_6x3_s1_xfbyb: return "IMAGE_2D_WEIGHTS_WINOGRAD_6x3_S1_XFBYB";
330 case WeightsLayout::os_is_yx_isa8_osv8_isv4: return "OS_IS_YX_ISA8_OSV8_ISV4";
331 case WeightsLayout::os_is_yx_isa8_osv8_isv4_swizzled_by_4: return "OS_IS_YX_ISA8_OSV8_ISV4_SWIZZLED_BY_4";
332 case WeightsLayout::is_o_yx_isv32: return "IS_O_YX_ISV32";
333 case WeightsLayout::is_o32_yx_isv32_swizzled_by_4: return "IS_O32_YX_ISV32_SWIZZLED_BY_4";
334 case WeightsLayout::os_is_y_x8_osv8_isv4: return "OS_IS_Y_X8_OSV8_ISV4";
335 case WeightsLayout::os_is_yx_osv16_isv4: return "OS_IS_YX_OSV16_ISV4";
343 std::string toString(ConcatAxis a)
347 case ConcatAxis::X: return "X";
348 case ConcatAxis::Y: return "Y";
349 case ConcatAxis::FEATURE: return "FEATURE";
350 case ConcatAxis::BATCH: return "BATCH";
355 std::string toString(TileAxis a)
359 case TileAxis::X: return "X";
360 case TileAxis::Y: return "Y";
361 case TileAxis::FEATURE: return "FEATURE";
362 case TileAxis::BATCH: return "BATCH";
367 std::string toString(GatherAxis a)
371 case GatherAxis::X: return "X";
372 case GatherAxis::Y: return "Y";
373 case GatherAxis::FEATURE: return "FEATURE";
374 case GatherAxis::BATCH: return "BATCH";
379 std::string toString(SampleType type)
383 case SampleType::NEAREST: return "SAMPLE_TYPE_NEAREST";
384 case SampleType::BILINEAR: return "SAMPLE_TYPE_BILINEAR";
389 std::string toString(const BorderType type)
393 case BorderType::CONSTANT: return "BORDER_TYPE_CONSTANT";
394 case BorderType::EDGE: return "BORDER_TYPE_EDGE";
395 case BorderType::MIRROR: return "BORDER_TYPE_MIRROR";
396 case BorderType::MIRROR_101: return "BORDER_TYPE_MIRROR_101";
401 std::string toString(const IndexSelectAxis& axis)
405 case IndexSelectAxis::BATCH: return "INDEX_SELECT_AXIS_BATCH";
406 case IndexSelectAxis::FEATURE: return "INDEX_SELECT_AXIS_FEATURE";
407 case IndexSelectAxis::X: return "INDEX_SELECT_AXIS_X";
408 case IndexSelectAxis::Y: return "INDEX_SELECT_AXIS_Y";
413 std::string toString(const Tensor::Dim& dim)
416 s << "v" << dim.v << "_p" << dim.pitch << "_" << dim.pad.before << "_" << dim.pad.after;
420 std::string toString(const DataTensor& tensor)
423 s << toString(tensor.GetDType()) << "_";
424 s << toString(tensor.GetLayout()) << "_";
426 for (auto dim : tensor.GetDims())
428 s << "d" << i << "_" << toString(dim) << "_";