xref: /aosp_15_r20/external/ComputeLibrary/src/runtime/CL/mlgo/Utils.cpp (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1*c217d954SCole Faust /*
2*c217d954SCole Faust  * Copyright (c) 2021 Arm Limited.
3*c217d954SCole Faust  *
4*c217d954SCole Faust  * SPDX-License-Identifier: MIT
5*c217d954SCole Faust  *
6*c217d954SCole Faust  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*c217d954SCole Faust  * of this software and associated documentation files (the "Software"), to
8*c217d954SCole Faust  * deal in the Software without restriction, including without limitation the
9*c217d954SCole Faust  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*c217d954SCole Faust  * sell copies of the Software, and to permit persons to whom the Software is
11*c217d954SCole Faust  * furnished to do so, subject to the following conditions:
12*c217d954SCole Faust  *
13*c217d954SCole Faust  * The above copyright notice and this permission notice shall be included in all
14*c217d954SCole Faust  * copies or substantial portions of the Software.
15*c217d954SCole Faust  *
16*c217d954SCole Faust  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*c217d954SCole Faust  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*c217d954SCole Faust  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*c217d954SCole Faust  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*c217d954SCole Faust  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21*c217d954SCole Faust  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22*c217d954SCole Faust  * SOFTWARE.
23*c217d954SCole Faust  */
24*c217d954SCole Faust #include "src/runtime/CL/mlgo/Utils.h"
25*c217d954SCole Faust 
26*c217d954SCole Faust #include <sstream>
27*c217d954SCole Faust 
28*c217d954SCole Faust namespace arm_compute
29*c217d954SCole Faust {
30*c217d954SCole Faust namespace mlgo
31*c217d954SCole Faust {
32*c217d954SCole Faust namespace
33*c217d954SCole Faust {
34*c217d954SCole Faust template <typename T>
to_str(const T & val)35*c217d954SCole Faust inline std::string to_str(const T &val)
36*c217d954SCole Faust {
37*c217d954SCole Faust     std::stringstream ss;
38*c217d954SCole Faust     ss << val;
39*c217d954SCole Faust     return ss.str();
40*c217d954SCole Faust }
41*c217d954SCole Faust } // namespace
42*c217d954SCole Faust 
operator <<(std::ostream & os,const GEMMConfigNative & config)43*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, const GEMMConfigNative &config)
44*c217d954SCole Faust {
45*c217d954SCole Faust     return os << "Native:{"
46*c217d954SCole Faust            << "m0: " << config.m0 << ", "
47*c217d954SCole Faust            << "n0: " << config.n0 << ", "
48*c217d954SCole Faust            << "k0: " << config.k0 << ", "
49*c217d954SCole Faust            << "}";
50*c217d954SCole Faust }
operator <<(std::ostream & os,const GEMMConfigReshapedOnlyRHS & config)51*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, const GEMMConfigReshapedOnlyRHS &config)
52*c217d954SCole Faust {
53*c217d954SCole Faust     return os << "ReshapedOnlyRHS:{"
54*c217d954SCole Faust            << "m0: " << config.m0 << ", "
55*c217d954SCole Faust            << "n0: " << config.n0 << ", "
56*c217d954SCole Faust            << "k0: " << config.k0 << ", "
57*c217d954SCole Faust            << "h0: " << config.h0 << ", "
58*c217d954SCole Faust            << "interleave_rhs: " << config.interleave_rhs << ", "
59*c217d954SCole Faust            << "transpose_rhs: " << config.transpose_rhs << ", "
60*c217d954SCole Faust            << "export_cl_image: " << config.export_cl_image
61*c217d954SCole Faust            << "}";
62*c217d954SCole Faust }
operator <<(std::ostream & os,const GEMMConfigReshaped & config)63*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, const GEMMConfigReshaped &config)
64*c217d954SCole Faust {
65*c217d954SCole Faust     return os << "Reshaped:{"
66*c217d954SCole Faust            << "m0: " << config.m0 << ", "
67*c217d954SCole Faust            << "n0: " << config.n0 << ", "
68*c217d954SCole Faust            << "k0: " << config.k0 << ", "
69*c217d954SCole Faust            << "v0: " << config.v0 << ", "
70*c217d954SCole Faust            << "h0: " << config.h0 << ", "
71*c217d954SCole Faust            << "interleave_lhs: " << config.interleave_lhs << ", "
72*c217d954SCole Faust            << "interleave_rhs: " << config.interleave_rhs << ", "
73*c217d954SCole Faust            << "transpose_rhs: " << config.transpose_rhs << ", "
74*c217d954SCole Faust            << "export_cl_image: " << config.export_cl_image
75*c217d954SCole Faust            << "}";
76*c217d954SCole Faust }
operator <<(std::ostream & os,HeuristicType ht)77*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, HeuristicType ht)
78*c217d954SCole Faust {
79*c217d954SCole Faust     switch(ht)
80*c217d954SCole Faust     {
81*c217d954SCole Faust         case HeuristicType::GEMM_Type:
82*c217d954SCole Faust         {
83*c217d954SCole Faust             os << "GEMM_Type";
84*c217d954SCole Faust             break;
85*c217d954SCole Faust         }
86*c217d954SCole Faust         case HeuristicType::GEMM_Config_Reshaped_Only_RHS:
87*c217d954SCole Faust         {
88*c217d954SCole Faust             os << "GEMM_Config_Reshaped_Only_RHS";
89*c217d954SCole Faust             break;
90*c217d954SCole Faust         }
91*c217d954SCole Faust         case HeuristicType::GEMM_Config_Reshaped:
92*c217d954SCole Faust         {
93*c217d954SCole Faust             os << "GEMM_Config_Reshaped";
94*c217d954SCole Faust             break;
95*c217d954SCole Faust         }
96*c217d954SCole Faust         default:
97*c217d954SCole Faust         {
98*c217d954SCole Faust             os << "Unknown";
99*c217d954SCole Faust             break;
100*c217d954SCole Faust         }
101*c217d954SCole Faust     }
102*c217d954SCole Faust     return os;
103*c217d954SCole Faust }
operator <<(std::ostream & os,DataType dt)104*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, DataType dt)
105*c217d954SCole Faust {
106*c217d954SCole Faust     switch(dt)
107*c217d954SCole Faust     {
108*c217d954SCole Faust         case DataType::F32:
109*c217d954SCole Faust         {
110*c217d954SCole Faust             os << "F32";
111*c217d954SCole Faust             break;
112*c217d954SCole Faust         }
113*c217d954SCole Faust         case DataType::F16:
114*c217d954SCole Faust         {
115*c217d954SCole Faust             os << "F16";
116*c217d954SCole Faust             break;
117*c217d954SCole Faust         }
118*c217d954SCole Faust         case DataType::QASYMM8:
119*c217d954SCole Faust         {
120*c217d954SCole Faust             os << "QASYMM8";
121*c217d954SCole Faust             break;
122*c217d954SCole Faust         }
123*c217d954SCole Faust         default:
124*c217d954SCole Faust         {
125*c217d954SCole Faust             os << "Unknown";
126*c217d954SCole Faust             break;
127*c217d954SCole Faust         }
128*c217d954SCole Faust     }
129*c217d954SCole Faust     return os;
130*c217d954SCole Faust }
operator <<(std::ostream & os,const HeuristicTree::Index & index)131*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, const HeuristicTree::Index &index)
132*c217d954SCole Faust {
133*c217d954SCole Faust     HeuristicType ht;
134*c217d954SCole Faust     std::string   ip;
135*c217d954SCole Faust     DataType      dt;
136*c217d954SCole Faust     std::tie(ht, ip, dt) = index;
137*c217d954SCole Faust     os << "Index(";
138*c217d954SCole Faust     os << "HeuristicType=" << ht << ",";
139*c217d954SCole Faust     os << "IP=" << ip << ",";
140*c217d954SCole Faust     os << "DataType=" << dt;
141*c217d954SCole Faust     os << ")";
142*c217d954SCole Faust     return os;
143*c217d954SCole Faust }
operator <<(std::ostream & os,const Query & query)144*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, const Query &query)
145*c217d954SCole Faust {
146*c217d954SCole Faust     os << "Query(";
147*c217d954SCole Faust     os << "IP=" << query.ip_target << ",";
148*c217d954SCole Faust     os << "DataType=" << query.data_type << ",";
149*c217d954SCole Faust     os << "M=" << query.m << ",";
150*c217d954SCole Faust     os << "N=" << query.n << ",";
151*c217d954SCole Faust     os << "K=" << query.k << ",";
152*c217d954SCole Faust     os << "B=" << query.b << ")";
153*c217d954SCole Faust     return os;
154*c217d954SCole Faust }
155*c217d954SCole Faust 
to_string(const GEMMConfigNative & config)156*c217d954SCole Faust std::string to_string(const GEMMConfigNative &config)
157*c217d954SCole Faust {
158*c217d954SCole Faust     return to_str(config);
159*c217d954SCole Faust }
160*c217d954SCole Faust 
to_string(const GEMMConfigReshapedOnlyRHS & config)161*c217d954SCole Faust std::string to_string(const GEMMConfigReshapedOnlyRHS &config)
162*c217d954SCole Faust {
163*c217d954SCole Faust     return to_str(config);
164*c217d954SCole Faust }
165*c217d954SCole Faust 
to_string(const GEMMConfigReshaped & config)166*c217d954SCole Faust std::string to_string(const GEMMConfigReshaped &config)
167*c217d954SCole Faust {
168*c217d954SCole Faust     return to_str(config);
169*c217d954SCole Faust }
170*c217d954SCole Faust 
to_string(const Query & query)171*c217d954SCole Faust std::string to_string(const Query &query)
172*c217d954SCole Faust {
173*c217d954SCole Faust     return to_str(query);
174*c217d954SCole Faust }
175*c217d954SCole Faust 
176*c217d954SCole Faust namespace parser
177*c217d954SCole Faust {
operator <<(std::ostream & os,const CharPosition & pos)178*c217d954SCole Faust std::ostream &operator<<(std::ostream &os, const CharPosition &pos)
179*c217d954SCole Faust {
180*c217d954SCole Faust     os << "(Ln: " << pos.ln << ", Col: " << pos.col << ")";
181*c217d954SCole Faust     return os;
182*c217d954SCole Faust }
183*c217d954SCole Faust } // namespace parser
184*c217d954SCole Faust 
185*c217d954SCole Faust } // namespace mlgo
186*c217d954SCole Faust 
187*c217d954SCole Faust } // namespace arm_compute