if (backend_all_str.compare("none") != 0)
{
VERBOSE(BackendResolver) << "Use backend for all ops: " << backend_all_str << std::endl;
-#define OP(InternalName, NnApiName) \
+#define OP(InternalName, IsNnApi, NnApiName) \
+ if (IsNnApi) \
{ \
auto backend = _backend_manager->get(backend_all_str); \
_gen_map[typeid(graph::operation::InternalName)] = backend; \
}
else
{
-#define OP(InternalName, NnApiName) \
+#define OP(InternalName, IsNnApi, NnApiName) \
+ if (IsNnApi) \
{ \
const auto &backend_str = \
::nnfw::util::EnvVar{std::string("OP_BACKEND_") + #NnApiName}.asString("acl_cl"); \
// NOTE The relation between "Internal Name" and "NN API Name" is "1 : N".
-// Internal Name | NN API Name
-OP(Conv2DNode , CONV_2D)
-OP(AvgPool2DNode , AVERAGE_POOL_2D)
-OP(MaxPool2DNode , MAX_POOL_2D)
-OP(ConcatNode , CONCATENATION)
-OP(FullyConnectedNode , FULLY_CONNECTED)
-OP(ReshapeNode , RESHAPE)
-OP(SoftmaxNode , SOFTMAX)
+// Internal Name | NN API? | NN API Name
+OP(AddNode , true , ADD)
+OP(Conv2DNode , true , CONV_2D)
+OP(AvgPool2DNode , true , AVERAGE_POOL_2D)
+OP(MaxPool2DNode , true , MAX_POOL_2D)
+OP(ConcatNode , true , CONCATENATION)
+OP(FullyConnectedNode , true , FULLY_CONNECTED)
+OP(ReshapeNode , true , RESHAPE)
+OP(SoftmaxNode , true , SOFTMAX)
+OP(PermuteNode , false , NOT_AVAILABLE)