Unverified Commit ee80cee9 authored by Paul Fultz II's avatar Paul Fultz II Committed by GitHub
Browse files

Merge branch 'master' into gpu_slice_test

parents 6d06226d f958d56f
...@@ -3,8 +3,10 @@ ...@@ -3,8 +3,10 @@
#include <cassert> #include <cassert>
#include <type_traits> #include <type_traits>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <class T> template <class T>
struct iterator_for_range struct iterator_for_range
...@@ -37,6 +39,7 @@ iterator_for_range<T> iterator_for(T& x) ...@@ -37,6 +39,7 @@ iterator_for_range<T> iterator_for(T& x)
return {&x}; return {&x};
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -7,10 +7,12 @@ ...@@ -7,10 +7,12 @@
#include <migraph/tensor_view.hpp> #include <migraph/tensor_view.hpp>
#include <migraph/raw_data.hpp> #include <migraph/raw_data.hpp>
#include <migraph/make_shared_array.hpp> #include <migraph/make_shared_array.hpp>
#include <migraph/config.hpp>
#include <memory> #include <memory>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
/** /**
* @brief Represents a raw literal * @brief Represents a raw literal
...@@ -122,6 +124,7 @@ literal transform(literal l1, literal l2, F f) ...@@ -122,6 +124,7 @@ literal transform(literal l1, literal l2, F f)
return result; return result;
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
#define MIGRAPH_GUARD_MIGRAPHLIB_MAKE_SHARED_ARRAY_HPP #define MIGRAPH_GUARD_MIGRAPHLIB_MAKE_SHARED_ARRAY_HPP
#include <memory> #include <memory>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <typename T> template <typename T>
std::shared_ptr<T> make_shared_array(size_t size) std::shared_ptr<T> make_shared_array(size_t size)
...@@ -11,6 +13,7 @@ std::shared_ptr<T> make_shared_array(size_t size) ...@@ -11,6 +13,7 @@ std::shared_ptr<T> make_shared_array(size_t size)
return std::shared_ptr<T>(new T[size], std::default_delete<T[]>()); return std::shared_ptr<T>(new T[size], std::default_delete<T[]>());
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -3,8 +3,10 @@ ...@@ -3,8 +3,10 @@
#include <memory> #include <memory>
#include <type_traits> #include <type_traits>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <class F, F f> // NOLINT template <class F, F f> // NOLINT
struct manage_deleter struct manage_deleter
...@@ -49,6 +51,7 @@ shared<T> share(T p) ...@@ -49,6 +51,7 @@ shared<T> share(T p)
return shared<T>{std::move(p)}; return shared<T>{std::move(p)};
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#define MIGRAPH_MANAGE_PTR(T, F) \ #define MIGRAPH_MANAGE_PTR(T, F) \
......
...@@ -6,9 +6,11 @@ ...@@ -6,9 +6,11 @@
#include <migraph/instruction.hpp> #include <migraph/instruction.hpp>
#include <migraph/program.hpp> #include <migraph/program.hpp>
#include <migraph/iterator_for.hpp> #include <migraph/iterator_for.hpp>
#include <migraph/config.hpp>
#include <unordered_map> #include <unordered_map>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
namespace match { namespace match {
...@@ -338,7 +340,7 @@ inline auto either_arg(std::size_t i, std::size_t j) ...@@ -338,7 +340,7 @@ inline auto either_arg(std::size_t i, std::size_t j)
} }
} // namespace match } // namespace match
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -3,16 +3,21 @@ ...@@ -3,16 +3,21 @@
#include <string> #include <string>
#include <migraph/instruction_ref.hpp> #include <migraph/instruction_ref.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct program; struct program;
struct memory_coloring struct memory_coloring
{ {
std::string allocation_op{}; std::string allocation_op{};
bool verify = false;
std::string name() const { return "memory coloring"; } std::string name() const { return "memory coloring"; }
void apply(program& p) const; void apply(program& p) const;
}; };
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -2,12 +2,15 @@ ...@@ -2,12 +2,15 @@
#define MIGRAPH_GUARD_MIGRAPHLIB_ONNX_HPP #define MIGRAPH_GUARD_MIGRAPHLIB_ONNX_HPP
#include <migraph/program.hpp> #include <migraph/program.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
/// Create a program from an onnx file /// Create a program from an onnx file
program parse_onnx(const std::string& name); program parse_onnx(const std::string& name);
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -13,8 +13,10 @@ ...@@ -13,8 +13,10 @@
#include <migraph/argument.hpp> #include <migraph/argument.hpp>
#include <migraph/context.hpp> #include <migraph/context.hpp>
#include <migraph/auto_any_cast.hpp> #include <migraph/auto_any_cast.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
#ifdef DOXYGEN #ifdef DOXYGEN
...@@ -43,6 +45,9 @@ struct operation ...@@ -43,6 +45,9 @@ struct operation
* the same the `output` shape. * the same the `output` shape.
*/ */
argument compute(context& ctx, const shape& output, const std::vector<argument>& input) const; argument compute(context& ctx, const shape& output, const std::vector<argument>& input) const;
/// An optional method to return which argument the output will alias. If
/// there is no aliased output then -1 can be returned.
int output_alias(const std::vector<shape>& input) const;
/// An optional stream operator to print the operation. When this is not /// An optional stream operator to print the operation. When this is not
/// implemented, it will just print the operation's name. /// implemented, it will just print the operation's name.
friend std::ostream& operator<<(std::ostream& os, const operation& op); friend std::ostream& operator<<(std::ostream& os, const operation& op);
...@@ -108,12 +113,32 @@ compute_op(const T& x, context& ctx, const shape& output_shape, const std::vecto ...@@ -108,12 +113,32 @@ compute_op(const T& x, context& ctx, const shape& output_shape, const std::vecto
return compute_op(rank<1>{}, x, ctx, output_shape, input); return compute_op(rank<1>{}, x, ctx, output_shape, input);
} }
template <class T>
int output_alias_op(rank<0>, const T&, const std::vector<shape>&)
{
return -1;
}
template <class T>
auto output_alias_op(rank<1>, const T& x, const std::vector<shape>& shapes)
-> decltype(x.output_alias(shapes))
{
return x.output_alias(shapes);
}
template <class T>
int output_alias_op(const T& x, const std::vector<shape>& shapes)
{
return output_alias_op(rank<1>{}, x, shapes);
}
/* /*
* Type-erased interface for: * Type-erased interface for:
* *
* struct operation * struct operation
* { * {
* std::string name() const; * std::string name() const;
* int output_alias(const std::vector<shape>& input) const;
* shape compute_shape(const std::vector<shape>& input) const; * shape compute_shape(const std::vector<shape>& input) const;
* argument compute(context& ctx,const shape& output,const std::vector<argument>& input) const; * argument compute(context& ctx,const shape& output,const std::vector<argument>& input) const;
* friend std::ostream & operator<<(std::ostream & os,const operation & op) ; * friend std::ostream & operator<<(std::ostream & os,const operation & op) ;
...@@ -185,6 +210,12 @@ struct operation ...@@ -185,6 +210,12 @@ struct operation
return (*this).private_detail_te_get_handle().name(); return (*this).private_detail_te_get_handle().name();
} }
int output_alias(const std::vector<shape>& input) const
{
assert((*this).private_detail_te_handle_mem_var);
return (*this).private_detail_te_get_handle().output_alias(input);
}
shape compute_shape(const std::vector<shape>& input) const shape compute_shape(const std::vector<shape>& input) const
{ {
assert((*this).private_detail_te_handle_mem_var); assert((*this).private_detail_te_handle_mem_var);
...@@ -217,6 +248,7 @@ struct operation ...@@ -217,6 +248,7 @@ struct operation
virtual const std::type_info& type() const = 0; virtual const std::type_info& type() const = 0;
virtual std::string name() const = 0; virtual std::string name() const = 0;
virtual int output_alias(const std::vector<shape>& input) const = 0;
virtual shape compute_shape(const std::vector<shape>& input) const = 0; virtual shape compute_shape(const std::vector<shape>& input) const = 0;
virtual argument virtual argument
compute(context& ctx, const shape& output, const std::vector<argument>& input) const = 0; compute(context& ctx, const shape& output, const std::vector<argument>& input) const = 0;
...@@ -254,8 +286,15 @@ struct operation ...@@ -254,8 +286,15 @@ struct operation
std::string name() const override { return private_detail_te_value.name(); } std::string name() const override { return private_detail_te_value.name(); }
int output_alias(const std::vector<shape>& input) const override
{
return output_alias_op(private_detail_te_value, input);
}
shape compute_shape(const std::vector<shape>& input) const override shape compute_shape(const std::vector<shape>& input) const override
{ {
return private_detail_te_value.compute_shape(input); return private_detail_te_value.compute_shape(input);
} }
...@@ -348,6 +387,7 @@ inline bool operator!=(const operation& x, const operation& y) { return !(x == y ...@@ -348,6 +387,7 @@ inline bool operator!=(const operation& x, const operation& y) { return !(x == y
#endif #endif
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -6,10 +6,12 @@ ...@@ -6,10 +6,12 @@
#include <migraph/check_shapes.hpp> #include <migraph/check_shapes.hpp>
#include <migraph/stringutils.hpp> #include <migraph/stringutils.hpp>
#include <migraph/streamutils.hpp> #include <migraph/streamutils.hpp>
#include <migraph/config.hpp>
#include <cmath> #include <cmath>
#include <utility> #include <utility>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
namespace op { namespace op {
struct not_computable struct not_computable
...@@ -223,22 +225,6 @@ struct pooling ...@@ -223,22 +225,6 @@ struct pooling
} }
}; };
struct activation
{
std::string mode;
std::string name() const { return "activation"; }
shape compute_shape(std::vector<shape> inputs) const
{
check_shapes{inputs, *this}.has(1);
return inputs.front();
}
friend std::ostream& operator<<(std::ostream& os, const activation& op)
{
os << op.name() << ":" << op.mode;
return os;
}
};
struct leaky_relu struct leaky_relu
{ {
std::string name() const { return "leaky_relu"; } std::string name() const { return "leaky_relu"; }
...@@ -296,6 +282,7 @@ struct transpose ...@@ -296,6 +282,7 @@ struct transpose
{ {
return {std::move(output_shape), std::move(args.front().data)}; return {std::move(output_shape), std::move(args.front().data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct contiguous struct contiguous
...@@ -359,6 +346,7 @@ struct concat ...@@ -359,6 +346,7 @@ struct concat
new_lens[axis] = new_dim_axis; new_lens[axis] = new_dim_axis;
return {type, new_lens}; return {type, new_lens};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct slice struct slice
...@@ -440,6 +428,7 @@ struct slice ...@@ -440,6 +428,7 @@ struct slice
auto offset = compute_offset(input.get_shape()) * output_shape.type_size(); auto offset = compute_offset(input.get_shape()) * output_shape.type_size();
return {std::move(output_shape), [=] { return input.data() + offset; }}; return {std::move(output_shape), [=] { return input.data() + offset; }};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct squeeze struct squeeze
...@@ -487,6 +476,7 @@ struct squeeze ...@@ -487,6 +476,7 @@ struct squeeze
{ {
return {std::move(output_shape), std::move(args.front().data)}; return {std::move(output_shape), std::move(args.front().data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct unsqueeze struct unsqueeze
...@@ -525,6 +515,7 @@ struct unsqueeze ...@@ -525,6 +515,7 @@ struct unsqueeze
{ {
return {std::move(output_shape), std::move(args.front().data)}; return {std::move(output_shape), std::move(args.front().data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct reshape struct reshape
...@@ -576,6 +567,7 @@ struct reshape ...@@ -576,6 +567,7 @@ struct reshape
{ {
return {std::move(output_shape), std::move(args.front().data)}; return {std::move(output_shape), std::move(args.front().data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct dot struct dot
...@@ -613,9 +605,14 @@ struct unary ...@@ -613,9 +605,14 @@ struct unary
} }
}; };
struct identity : unary struct identity
{ {
std::string name() const { return "identity"; } std::string name() const { return "identity"; }
shape compute_shape(std::vector<shape> inputs) const { return inputs.at(0); }
argument compute(context&, shape output_shape, std::vector<argument> args) const
{
return {std::move(output_shape), std::move(args.at(0).data)};
}
}; };
struct abs : unary struct abs : unary
...@@ -673,6 +670,11 @@ struct neg : unary ...@@ -673,6 +670,11 @@ struct neg : unary
std::string name() const { return "neg"; } std::string name() const { return "neg"; }
}; };
struct relu : unary
{
std::string name() const { return "relu"; }
};
struct softmax struct softmax
{ {
std::string name() const { return "softmax"; } std::string name() const { return "softmax"; }
...@@ -713,6 +715,7 @@ struct flatten ...@@ -713,6 +715,7 @@ struct flatten
{ {
return {std::move(output_shape), std::move(args.front().data)}; return {std::move(output_shape), std::move(args.front().data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct broadcast struct broadcast
{ {
...@@ -755,6 +758,7 @@ struct broadcast ...@@ -755,6 +758,7 @@ struct broadcast
{ {
return {std::move(output_shape), std::move(args.at(0).data)}; return {std::move(output_shape), std::move(args.at(0).data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct scalar struct scalar
...@@ -776,6 +780,7 @@ struct scalar ...@@ -776,6 +780,7 @@ struct scalar
{ {
return {std::move(output_shape), std::move(args.at(0).data)}; return {std::move(output_shape), std::move(args.at(0).data)};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct binary struct binary
...@@ -828,6 +833,7 @@ struct load ...@@ -828,6 +833,7 @@ struct load
{ {
return {s, args[0].data() + offset}; return {s, args[0].data() + offset};
} }
int output_alias(const std::vector<shape>&) const { return 0; }
}; };
struct outline struct outline
...@@ -853,6 +859,7 @@ struct outline ...@@ -853,6 +859,7 @@ struct outline
}; };
} // namespace op } // namespace op
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -7,8 +7,10 @@ ...@@ -7,8 +7,10 @@
#include <memory> #include <memory>
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct program; struct program;
...@@ -216,6 +218,7 @@ inline const ValueType& any_cast(const pass& x) ...@@ -216,6 +218,7 @@ inline const ValueType& any_cast(const pass& x)
#endif #endif
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -3,9 +3,13 @@ ...@@ -3,9 +3,13 @@
#define MIGRAPH_GUARD_PASS_CONFIG_HPP #define MIGRAPH_GUARD_PASS_CONFIG_HPP
#include <migraph/env.hpp> #include <migraph/env.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
MIGRAPH_DECLARE_ENV_VAR(MIGRAPH_DISABLE_MEMORY_COLORING) MIGRAPH_DECLARE_ENV_VAR(MIGRAPH_DISABLE_MEMORY_COLORING)
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif // MIGRAPH_GUARD_PASS_CONFIG_HPP #endif // MIGRAPH_GUARD_PASS_CONFIG_HPP
...@@ -9,10 +9,12 @@ ...@@ -9,10 +9,12 @@
#include <migraph/instruction_ref.hpp> #include <migraph/instruction_ref.hpp>
#include <migraph/target.hpp> #include <migraph/target.hpp>
#include <migraph/tracer.hpp> #include <migraph/tracer.hpp>
#include <migraph/config.hpp>
#include <algorithm> #include <algorithm>
#include <iostream> #include <iostream>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct program_impl; struct program_impl;
...@@ -106,6 +108,8 @@ struct program ...@@ -106,6 +108,8 @@ struct program
private: private:
std::unique_ptr<program_impl> impl; std::unique_ptr<program_impl> impl;
}; };
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
#include <algorithm> #include <algorithm>
#include <initializer_list> #include <initializer_list>
#include <migraph/rank.hpp> #include <migraph/rank.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
namespace detail { namespace detail {
...@@ -104,6 +106,7 @@ iterator_range<Iterator> range(std::pair<Iterator, Iterator> p) ...@@ -104,6 +106,7 @@ iterator_range<Iterator> range(std::pair<Iterator, Iterator> p)
return {p.first, p.second}; return {p.first, p.second};
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
#ifndef MIGRAPH_GUARD_RTGLIB_RANK_HPP #ifndef MIGRAPH_GUARD_RTGLIB_RANK_HPP
#define MIGRAPH_GUARD_RTGLIB_RANK_HPP #define MIGRAPH_GUARD_RTGLIB_RANK_HPP
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <int N> template <int N>
struct rank : rank<N - 1> struct rank : rank<N - 1>
...@@ -13,6 +16,7 @@ struct rank<0> ...@@ -13,6 +16,7 @@ struct rank<0>
{ {
}; };
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
#include <migraph/tensor_view.hpp> #include <migraph/tensor_view.hpp>
#include <migraph/requires.hpp> #include <migraph/requires.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct raw_data_base struct raw_data_base
{ {
...@@ -203,6 +205,7 @@ auto visit_all(T&& x, Ts&&... xs) ...@@ -203,6 +205,7 @@ auto visit_all(T&& x, Ts&&... xs)
}; };
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
#include <migraph/functional.hpp> #include <migraph/functional.hpp>
#include <migraph/rank.hpp> #include <migraph/rank.hpp>
#include <migraph/config.hpp>
#include <functional> #include <functional>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
namespace detail { namespace detail {
...@@ -45,6 +47,7 @@ void reflect_each(T& x, F f) ...@@ -45,6 +47,7 @@ void reflect_each(T& x, F f)
}); });
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
#define MIGRAPH_GUARD_MIGRAPHLIB_REQUIRES_HPP #define MIGRAPH_GUARD_MIGRAPHLIB_REQUIRES_HPP
#include <type_traits> #include <type_traits>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <bool... Bs> template <bool... Bs>
struct and_ : std::is_same<and_<Bs...>, and_<(Bs || true)...>> // NOLINT struct and_ : std::is_same<and_<Bs...>, and_<(Bs || true)...>> // NOLINT
...@@ -44,6 +46,7 @@ struct requires_enum ...@@ -44,6 +46,7 @@ struct requires_enum
#endif #endif
#endif #endif
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -9,8 +9,10 @@ ...@@ -9,8 +9,10 @@
#include <migraph/errors.hpp> #include <migraph/errors.hpp>
#include <migraph/half.hpp> #include <migraph/half.hpp>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct shape_impl; struct shape_impl;
...@@ -161,6 +163,7 @@ struct shape ...@@ -161,6 +163,7 @@ struct shape
std::string type_string() const; std::string type_string() const;
}; };
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -2,9 +2,11 @@ ...@@ -2,9 +2,11 @@
#define MIGRAPH_GUARD_MIGRAPHLIB_SHAPE_FOR_EACH_HPP #define MIGRAPH_GUARD_MIGRAPHLIB_SHAPE_FOR_EACH_HPP
#include <migraph/shape.hpp> #include <migraph/shape.hpp>
#include <migraph/config.hpp>
#include <algorithm> #include <algorithm>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <class F> template <class F>
void shape_for_each(const migraph::shape& s, F f) void shape_for_each(const migraph::shape& s, F f)
...@@ -26,6 +28,7 @@ void shape_for_each(const migraph::shape& s, F f) ...@@ -26,6 +28,7 @@ void shape_for_each(const migraph::shape& s, F f)
} }
} }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
#define MIGRAPH_GUARD_RTGLIB_SIMPLIFY_ALGEBRA_HPP #define MIGRAPH_GUARD_RTGLIB_SIMPLIFY_ALGEBRA_HPP
#include <string> #include <string>
#include <migraph/config.hpp>
namespace migraph { namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct program; struct program;
...@@ -13,6 +15,7 @@ struct simplify_algebra ...@@ -13,6 +15,7 @@ struct simplify_algebra
void apply(program& p) const; void apply(program& p) const;
}; };
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph } // namespace migraph
#endif #endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment