Make `axis` and `num_splits` static attributes of the operation.
Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
void KernelGenerator::visit(const model::operation::Split &node)
{
const auto ifm_index{node.getInputs().at(model::operation::Split::Input::INPUT)};
- const auto axis_index{node.param().axis_index};
- const auto num_of_splits_index{node.param().num_of_splits_index};
- assert(_ctx.at(num_of_splits_index).asScalar<unsigned int>() == node.getOutputs().size());
+ assert(node.param().num_splits == static_cast<int>(node.getOutputs().size()));
const auto ifm_rank = _ctx.at(ifm_index).shape().rank();
std::vector<model::OperandIndex> output_indexes;
const auto frontend_layout = _current_subg_layout;
const auto backend_layout = ifm_alloc->layout();
- auto axis = _ctx.at(axis_index).asScalar<int32_t>();
+ auto axis = node.param().axis;
if (axis < 0)
axis += ifm_rank;
axis = acl_common::ToARMComputeAxis(ifm_rank, axis, frontend_layout, backend_layout).value();
fn->configure(ifm_alloc->handle(), output_allocs, axis);
- auto acl_fn = asAclFunction(std::move(fn));
-
- _execution_builder->append(std::move(acl_fn));
+ _execution_builder->append(asAclFunction(std::move(fn)));
}
void KernelGenerator::visit(const model::operation::Unpack &node)
{
// TODO Support this op by SubTensor
const auto ifm_index{node.getInputs().at(model::operation::Split::Input::INPUT)};
- const auto axis_index{node.param().axis_index};
- const auto num_of_splits_index{node.param().num_of_splits_index};
- assert(_ctx.at(num_of_splits_index).asScalar<unsigned int>() == node.getOutputs().size());
+ assert(node.param().num_splits == static_cast<int>(node.getOutputs().size()));
const auto ifm_rank = _ctx.at(ifm_index).shape().rank();
std::vector<model::OperandIndex> output_indexes;
const auto frontend_layout = _current_subg_layout;
const auto backend_layout = ifm_alloc->layout();
- auto axis = _ctx.at(axis_index).asScalar<int32_t>();
+ auto axis = node.param().axis;
if (axis < 0)
axis += ifm_rank;
axis = acl_common::ToARMComputeAxis(ifm_rank, axis, frontend_layout, backend_layout).value();
fn->configure(ifm_alloc->handle(), output_allocs, axis);
- auto acl_fn = asAclFunction(std::move(fn));
-
- _execution_builder->append(std::move(acl_fn));
+ _execution_builder->append(asAclFunction(std::move(fn)));
}
void KernelGenerator::visit(const model::operation::SQRT &node)
struct Param
{
- OperandIndex axis_index;
- OperandIndex num_of_splits_index;
+ int axis;
+ int num_splits;
};
public:
};
_map[ANEURALNETWORKS_SPLIT_EX] = [](const OperationFactory::Param &init_param,
- neurun::model::Operands &) {
+ neurun::model::Operands &operands) {
assert(init_param.input_count == 3);
assert(init_param.output_count >= 1); // At least one output tensor and axis
}
operation::Split::Param param;
- param.axis_index = OperandIndex{init_param.inputs[1]};
- param.num_of_splits_index = OperandIndex{init_param.inputs[2]};
+ param.axis = operands.at(OperandIndex{init_param.inputs[1]}).asScalar<std::int32_t>();
+ param.num_splits = operands.at(OperandIndex{init_param.inputs[2]}).asScalar<std::int32_t>();
return new operation::Split{inputs, outputs, param};
};