27{
28 for (
const auto&
info : infos)
29 {
31 {
32 reasonIfUnsupported.
value() =
"TOSA does not have INT64 support for TOSARef backend";
33 return false;
34 }
35
36
41 {
42 reasonIfUnsupported.
value() =
"Must use a Quantize layer to/from unsigned INT for TOSARef backend";
43 return false;
44 }
45 }
46
50
51 std::vector<const TensorInfo*> inputInfos;
52 std::vector<const TensorInfo*> outputInfos;
53
54 switch (type)
55 {
58 return true;
66
67 inputInfos.push_back(&infos[0]);
68 inputInfos.push_back(&infos[1]);
69 outputInfos.push_back(&infos[2]);
70 break;
72 for (unsigned int i = 0; i < infos.size() - 1; ++i)
73 {
74 inputInfos.push_back(&infos[i]);
75 }
76 outputInfos.push_back(&infos.back());
77 break;
79 outputInfos.push_back(&infos[0]);
80 break;
82 {
83 inputInfos.push_back(&infos[0]);
84 outputInfos.push_back(&infos[1]);
85 inputInfos.push_back(&infos[2]);
86
88 if(conv2dDesc->m_BiasEnabled)
89 {
90 inputInfos.push_back(&infos[3]);
91 }
92 break;
93 }
95 {
96 inputInfos.push_back(&infos[0]);
97 outputInfos.push_back(&infos[1]);
98 inputInfos.push_back(&infos[2]);
99
101 if(conv3dDesc->m_BiasEnabled)
102 {
103 inputInfos.push_back(&infos[3]);
104 }
105 break;
106 }
108 {
109 inputInfos.push_back(&infos[0]);
110 outputInfos.push_back(&infos[1]);
111 inputInfos.push_back(&infos[2]);
112
114 if(conv2dDesc->m_BiasEnabled)
115 {
116 inputInfos.push_back(&infos[3]);
117 }
118 break;
119 }
121 {
122 inputInfos.push_back(&infos[0]);
123 outputInfos.push_back(&infos[1]);
124 inputInfos.push_back(&infos[2]);
126 if(fullyConnectedDesc->m_BiasEnabled)
127 {
128 inputInfos.push_back(&infos[3]);
129 }
130 break;
131 }
149 {
150 inputInfos.push_back(&infos[0]);
151 outputInfos.push_back(&infos[1]);
152 break;
153 }
155 {
156 inputInfos.push_back(&infos[0]);
157 for (unsigned int i = 1; i < infos.size(); ++i)
158 {
159 outputInfos.push_back(&infos[i]);
160 }
161 break;
162 }
164 {
165 inputInfos.push_back(&infos[0]);
166 outputInfos.push_back(&infos[1]);
167 inputInfos.push_back(&infos[2]);
168
170 if(conv2dDesc->m_BiasEnabled)
171 {
172 inputInfos.push_back(&infos[3]);
173 }
174 break;
175 }
177 {
179 for (unsigned int i = 0; i < stackDesc->m_NumInputs; ++i)
180 {
181 inputInfos.emplace_back(&infos[i]);
182 }
183 outputInfos.emplace_back(&infos[stackDesc->m_NumInputs]);
184 break;
185 }
186 default:
187
188 return false;
189 }
190
191 auto mappings =
GetTosaMapping(
nullptr, type, inputInfos, outputInfos, descriptor);
192 if (mappings->GetName() == "")
193 {
194
195 return false;
196 }
197
198 TosaSerializationHandler handler;
199
200
201 auto* block = new TosaSerializationBasicBlock("main",
202 "main",
203 mappings->GetOperators(),
204 mappings->GetTensors(),
205 mappings->GetInputs(),
206 mappings->GetOutputs());
207
208 std::vector<TosaSerializationBasicBlock*> blocks;
209 blocks.emplace_back(block);
210
211
212 auto* region = new TosaSerializationRegion("main", blocks);
213 handler.GetRegions().emplace_back(region);
214
215 GraphStatus status;
216 TosaReference::IModelRunner runner;
217
218#if !defined(TOSA_REFERENCE_MODEL_OUTPUT)
219
220
221 func_debug_t funcDebug;
222
223 FILE* file = fopen("/dev/null", "w");
224 funcDebug.func_debug_file = (file == nullptr) ? stderr : file;
225
226 runner.setFuncDebug(funcDebug);
227#endif
228
229
230 status = runner.initialize(handler);
231
232#if !defined(TOSA_REFERENCE_MODEL_OUTPUT)
233
234 funcDebug.func_debug_file = stderr;
235 runner.setFuncDebug(funcDebug);
236#endif
237
238 if(status == GraphStatus::TOSA_ERROR || status == GraphStatus::TOSA_UNPREDICTABLE)
239 {
240 return false;
241 }
242 else
243 {
244 return true;
245 }
246}
TosaSerializationBasicBlock * GetTosaMapping(const Layer *layer, const LayerType type, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const BaseDescriptor &descriptor)
DestType PolymorphicDowncast(SourceType *value)
Polymorphic downcast for build in pointers only.
void IgnoreUnused(Ts &&...)