#include #include namespace migraphx { inline namespace MIGRAPHX_INLINE_NS { namespace cpu { struct cpu_copy : reduce_dims_base, auto_register_op { template static auto reflect(Self&, F) { return pack(); } std::string name() const { return "cpu::copy"; } shape compute_shape(const std::vector& inputs) const { check_shapes{inputs, *this}.has(2); return inputs.at(1); } argument compute(context& ctx, const shape& output_shape, const std::vector& args) const { argument result = get_arg(args, args.size() - 1); visit_all(result, get_arg(args, 0))([&](auto output, auto input) { pointwise(output, input)(ctx, output.get_shape(), 1024, [](auto& y, auto x) { y = x; }); }); return result.reshape(output_shape); } std::ptrdiff_t output_alias(const std::vector& shapes) const { return shapes.size() - 1; } }; } // namespace cpu } // namespace MIGRAPHX_INLINE_NS } // namespace migraphx