MCPcopy Create free account
hub / github.com/ARM-software/armnn / AssignBackends

Function AssignBackends

src/armnn/Network.cpp:1212–1293  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1210}
1211
1212OptimizationResult AssignBackends(OptimizedNetworkImpl* optNetObjPtr,
1213 BackendSettings& backendSettings,
1214 Graph::Iterator& firstLayer,
1215 Graph::Iterator& lastLayer,
1216 Optional<std::vector<std::string>&> errMessages)
1217{
1218 ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_AssignBackends");
1219 OptimizationResult result;
1220
1221 bool restart = false;
1222 BackendIdVector availablePreferredBackends;
1223 for (auto it = firstLayer; it != lastLayer; it = (restart ? firstLayer : ++it))
1224 {
1225 if (it == firstLayer)
1226 {
1227 availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();
1228 if (availablePreferredBackends.empty())
1229 {
1230 ReportError("No preferred backends are available", errMessages);
1231 result.m_Error = true;
1232 return result;
1233 }
1234 }
1235 // In the case where we've set restart it must be reset before we continue looking at backends.
1236 if (restart)
1237 {
1238 restart = false;
1239 }
1240 AssignBackendsIConnectable(optNetObjPtr,
1241 *it,
1242 errMessages,
1243 result,
1244 backendSettings,
1245 availablePreferredBackends,
1246 restart);
1247 }
1248
1249 for (auto it = firstLayer; it != lastLayer; ++it)
1250 {
1251 auto layer = PolymorphicDowncast<Layer*>(*it);
1252 std::vector<DataType> inOutDataType = GetLayerInOutDatatype(layer);
1253
1254 // In AttemptBackendAssignment() we check:
1255 // - if input/output datatypes of the layer are float16
1256 // - if the layer is supported with these datatypes
1257 // If the layer is not supported (failing on ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED() in clframework),
1258 // we attempt to insert convertion layers either side of the new fp32 layer.
1259 bool isFloat16 = false;
1260 for (auto type : inOutDataType)
1261 {
1262 if (type == DataType::Float16)
1263 {
1264 isFloat16 = true;
1265 break;
1266 }
1267 }
1268
1269 if (layer->GetBackendId() == "Unknown" || isFloat16)

Callers 4

OptimizeFunction · 0.85
NetworkTests.cppFile · 0.85
OptimizerTests.cppFile · 0.85

Calls 13

ReportErrorFunction · 0.85
GetLayerInOutDatatypeFunction · 0.85
emptyMethod · 0.80
GetOutputSlotMethod · 0.80
GetConnectionMethod · 0.60
GetBackendIdMethod · 0.45
GetTypeMethod · 0.45
SetBackendIdMethod · 0.45
strMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected