{
return session->register_custom_operation(id, info->eval_function);
}
+
+/*
+ * Set default backend
+ *
+ * @param[in] session session to which a default backend is set
+ * @param[in] backend default backend
+ */
+NNFW_STATUS nnfw_set_default_backend(nnfw_session *session, NNFW_BACKEND backend)
+{
+ return session->set_default_backend(backend);
+}
+
+/*
+ * Set the operation's backend
+ *
+ * @param[in] session session to be modified
+ * @param[in] op operation to be set
+ * @param[in] backend bakcend on which operation run
+ *
+ * @return NNFW_STATUS_NO_ERROR if successful
+ */
+NNFW_STATUS nnfw_set_op_backend(nnfw_session *session, NNFW_OP op, NNFW_BACKEND backend)
+{
+ return session->set_op_backend(op, backend);
+}
#include <dirent.h>
#include <limits.h>
#include <stdint.h>
+#include <util/ConfigSource.h>
nnfw_session::nnfw_session()
: _graph{nullptr}, _execution{nullptr},
- _kernel_registry{std::make_shared<neurun::backend::custom::KernelRegistry>()}
+ _kernel_registry{std::make_shared<neurun::backend::custom::KernelRegistry>()},
+ _source{nnfw::cpp14::make_unique<neurun::util::GeneralConfigSource>()}
{
// DO NOTHING
}
try
{
+ // config_source setting
+ using neurun::util::config_source;
+ config_source(std::move(_source));
+
auto compiler = nnfw::cpp14::make_unique<neurun::compiler::Compiler>(_graph);
compiler->compile();
std::shared_ptr<neurun::exec::IExecutor> executor;
_kernel_registry->registerKernel(id, eval_func);
return NNFW_STATUS_NO_ERROR;
}
+
+static std::string get_backend_string(NNFW_BACKEND backend)
+{
+ static std::unordered_map<NNFW_BACKEND, std::string> backend_map = {
+ {NNFW_BACKEND_ACL_CL, "acl_cl"},
+ {NNFW_BACKEND_ACL_NEON, "acl_neon"},
+ {NNFW_BACKEND_CPU, "cpu"},
+ {NNFW_BACKEND_SRCN, "srcn"},
+ };
+
+ auto b = backend_map.find(backend);
+
+ if (b == backend_map.end())
+ {
+ // this return value is handled by a caller to return error code
+ return std::string("");
+ }
+ else
+ {
+ return b->second;
+ }
+}
+
+static std::string get_op_backend_string(NNFW_OP op)
+{
+ // TODO: Provide complete set of operations
+ static std::unordered_map<NNFW_OP, std::string> operation_map = {
+ {NNFW_OP_TransposeConvNode, "OP_BACKEND_TransposeConvNode"},
+ {NNFW_OP_Conv2DNode, "OP_BACKEND_Conv2DNode"},
+ {NNFW_OP_DepthwiseConv2DNode, "OP_BACKEND_DepthwiseConv2DNode"},
+ {NNFW_OP_MeanNode, "OP_BACKEND_MeanNode"},
+ {NNFW_OP_AvgPool2DNode, "OP_BACKEND_AvgPool2DNode"},
+ {NNFW_OP_MaxPool2DNode, "OP_BACKEND_MaxPool2DNode"},
+ };
+
+ auto n = operation_map.find(op);
+
+ if (n == operation_map.end())
+ {
+ // this return value is handled by a caller to return error code
+ return std::string("");
+ }
+ else
+ {
+ return n->second;
+ }
+}
+
+NNFW_STATUS nnfw_session::set_default_backend(NNFW_BACKEND backend)
+{
+ try
+ {
+ std::string bs = get_backend_string(backend);
+ if (bs.empty())
+ {
+ return NNFW_STATUS_ERROR;
+ }
+ else
+ {
+ _source->set("OP_BACKEND_ALLOPS", bs);
+ }
+ }
+ catch (...)
+ {
+ std::cerr << "Error during nnfw_session::set_default_backend" << std::endl;
+ return NNFW_STATUS_ERROR;
+ }
+ return NNFW_STATUS_NO_ERROR;
+}
+
+NNFW_STATUS nnfw_session::set_op_backend(NNFW_OP op, NNFW_BACKEND backend)
+{
+
+ try
+ {
+ std::string key, value;
+ value = get_backend_string(backend);
+ key = get_op_backend_string(op);
+
+ if (key.empty() || value.empty())
+ {
+ return NNFW_STATUS_ERROR;
+ }
+
+ _source->set(key, value);
+ }
+ catch (...)
+ {
+ std::cerr << "Error during nnfw_session::set_op_backend." << std::endl;
+ return NNFW_STATUS_ERROR;
+ }
+ return NNFW_STATUS_NO_ERROR;
+}