/* * The MIT License (MIT) * * Copyright (c) 2015-2022 Advanced Micro Devices, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #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 #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, execution_environment exec_env = execution_environment{}) const; std::size_t size() const; std::vector get_output_shapes() const; context& get_context() const; instruction_ref validate() const; target_assignments get_target_assignments(const std::vector& targets, assignment_options options = assignment_options{}); void compile(const target& t, compile_options options = compile_options{}); 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 not(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(); std::unordered_multimap get_module_tree(); 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