#ifndef MIGRAPHX_GUARD_MIGRAPHLIB_PROGRAM_HPP #define MIGRAPHX_GUARD_MIGRAPHLIB_PROGRAM_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include namespace migraphx { inline namespace MIGRAPHX_INLINE_NS { MIGRAPHX_DECLARE_ENV_VAR(MIGRAPHX_TRACE_COMPILE) MIGRAPHX_DECLARE_ENV_VAR(MIGRAPHX_TRACE_EVAL) struct program_impl; struct marker; /** * @brief Stores the instruction stream */ struct program { program(); // move constructor program(program&&) noexcept; // copy constructor program(const program&); // copy assignment operator program& operator=(program); ~program() noexcept; std::vector get_parameter_names() const; shape get_parameter_shape(std::string name) const; instruction_ref get_parameter(std::string name) const; std::unordered_map get_parameter_shapes() const; std::vector eval(parameter_map params) const; std::size_t size() const; std::vector get_output_shapes() const; context& get_context() const; instruction_ref validate() const; void compile(const target& t, compile_options options = compile_options{}, const std::string& ir_dump_path = "passes"); bool is_compiled() const; void finalize(); void perf_report(std::ostream& os, std::size_t n, parameter_map params, std::size_t batch = 1) const; void mark(const parameter_map& params, marker&& m); value to_value() const; void from_value(const value& v); void debug_print() const; void debug_print(instruction_ref ins) const; void print(std::unordered_map& names, const std::function)>& print_func) const; void print(const std::function)>& print_func) const; void print_graph(std::ostream& os, bool brief = false) const; void print_cpp(std::ostream& os) const; void dry_run(parameter_map params) const; void annotate(std::ostream& os, const std::function& a) const; program& sort(); friend std::ostream& operator<<(std::ostream& os, const program& p); friend bool operator==(const program& x, const program& y); friend bool operator!=(const program& x, const program& y) { return !(x == y); } // module related api module* create_module(const std::string& name); module* get_module(const std::string& name); const module* get_module(const std::string& name) const; module* get_main_module(); const module* get_main_module() const; std::vector get_modules() const; std::vector get_modules(); void remove_module(const std::string& name); void remove_unused_modules(); private: void assign(const program& p); std::unique_ptr impl; }; } // namespace MIGRAPHX_INLINE_NS } // namespace migraphx #endif