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
......@@ -18,7 +18,7 @@ CheckOptions:
- key: readability-identifier-naming.NamespaceCase
value: lower_case
- key: readability-identifier-naming.InlineNamespaceCase
value: lower_case
value: UPPER_CASE
- key: readability-identifier-naming.EnumConstantCase
value: lower_case
- key: readability-identifier-naming.ConstexprVariableCase
......
......@@ -14,5 +14,5 @@ gpu::target
cpu::target
-----------
.. doxygenstruct:: migraph::cpu::cpu_target
.. doxygenstruct:: migraph::cpu::target
......@@ -6,6 +6,7 @@ add_library(migraph
dead_code_elimination.cpp
eliminate_allocation.cpp
eliminate_contiguous.cpp
eliminate_concat.cpp
fwd_conv_batchnorm_rewrite.cpp
env.cpp
generate.cpp
......
......@@ -5,6 +5,7 @@
#include <migraph/iterator_for.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
void auto_contiguous::apply(program& p) const
{
......@@ -19,4 +20,5 @@ void auto_contiguous::apply(program& p) const
}
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -8,6 +8,7 @@
#include <unordered_set>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <class Range>
void cse_range(program& p, Range&& r)
......@@ -34,4 +35,5 @@ void cse_range(program& p, Range&& r)
void common_subexpression_elimination::apply(program& p) const { cse_range(p, iterator_for(p)); }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -4,6 +4,7 @@
#include <migraph/literal.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct match_const_add
{
......@@ -25,4 +26,5 @@ struct match_const_add
void constant_propagate::apply(program& p) const { match::find_matches(p, match_const_add{}); }
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -6,6 +6,7 @@
#include <migraph/ranges.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <class Range, class Iterator>
std::ptrdiff_t bidistance(const Range& r, Iterator start, Iterator last)
......@@ -61,4 +62,5 @@ void dead_code_elimination::apply(program& p) const
p.remove_instructions(std::next(last), p.end());
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -8,6 +8,7 @@
#include <migraph/pass_config.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
void eliminate_allocation::apply(program& p) const
{
......@@ -35,4 +36,6 @@ void eliminate_allocation::apply(program& p) const
p.replace_instruction(ins, op::load{s, offset}, mem);
}
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#include <iterator>
#include <migraph/eliminate_concat.hpp>
#include <migraph/program.hpp>
#include <migraph/instruction.hpp>
#include <migraph/operators.hpp>
#include <migraph/iterator_for.hpp>
#include <migraph/dfor.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
void eliminate_concat::apply(program& p) const
{
for(auto ins : iterator_for(p))
{
// Look for the concat operator
if(ins->name() != concat_opt.name())
continue;
// If any inputs are literals then abort
if(std::any_of(ins->inputs().begin() + 1, ins->inputs().end(), [](auto arg) {
return arg->name() == "@literal";
}))
continue;
// We can only do this optimization when concat axis is either the leftmost
// axis OR the sizes to the left of this axis are all equal to 1
// Since we've already checked that the non-axis dimensions are identical
// we only need to check the first input
auto lens = ins->inputs().front()->get_shape().lens();
auto concat_op = concat_opt.get_concat(ins->get_operator());
if(concat_op.axis == 0 ||
std::all_of(lens.begin(), lens.begin() + concat_op.axis, [](auto x) { return x == 1; }))
{
// Last input should be an allocation
auto last = ins->inputs().back();
if(last->name() != concat_opt.allocate())
continue;
// Where are the allocations for the tensors to be concatenated?
std::vector<instruction_ref> allocations;
for(auto ins2 = ins->inputs().begin(); ins2 != ins->inputs().end() - 1; ins2++)
{
auto last2 = (*ins2)->inputs().back();
if(last2->name() == concat_opt.allocate())
{
allocations.push_back(last2);
}
}
// Need to sort the allocations, so that we know where to
// insert the "super"-allocation
std::sort(
allocations.begin(), allocations.end(), [&](instruction_ref x, instruction_ref y) {
return std::distance(p.begin(), x) < std::distance(p.begin(), y);
});
// Move "super" allocation to the front
auto first = allocations.front();
auto super = p.move_instruction(last, first);
std::size_t offset = 0;
for(auto x : allocations)
{
migraph::op::load op{x->get_shape(), offset};
// migraph::op::load op{x->get_shape(), 0};
p.replace_instruction(x, op, {super});
offset += x->get_shape().bytes();
}
std::vector<instruction_ref> args = {super};
std::copy(ins->inputs().begin(), ins->inputs().end() - 1, std::back_inserter(args));
p.replace_instruction(ins, migraph::op::identity{}, args);
}
}
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -8,6 +8,7 @@
#include <utility>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
bool try_compute_shape(const operation& op, const std::vector<instruction_ref>& args)
{
......@@ -46,4 +47,5 @@ void eliminate_contiguous::apply(program& p) const
}
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -3,6 +3,7 @@
#include <cstdlib>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
bool enabled(const char* name)
{
......@@ -29,4 +30,5 @@ std::vector<std::string> env(const char* name)
return {{p}};
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -6,6 +6,8 @@
#include <migraph/dfor.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
void fwd_conv_batchnorm_rewrite::apply(program& p) const
{
for(auto ins : iterator_for(p))
......@@ -64,4 +66,6 @@ void fwd_conv_batchnorm_rewrite::apply(program& p) const
p.replace_instruction(ins, op::add{}, {c, b});
}
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#include <migraph/generate.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
argument generate_argument(shape s, unsigned long seed)
{
......@@ -30,4 +31,5 @@ literal abs(literal l)
return transform(std::move(l), [](auto x) { return std::fabs(x); });
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
......@@ -3,10 +3,12 @@
#include <migraph/shape.hpp>
#include <migraph/raw_data.hpp>
#include <migraph/config.hpp>
#include <functional>
#include <utility>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
/**
* @brief Arguments passed to instructions
......@@ -45,6 +47,7 @@ struct argument : raw_data<argument>
shape m_shape;
};
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#endif
#ifndef MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
#define MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
#include <migraph/config.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
namespace detail {
......@@ -32,6 +34,7 @@ detail::auto_any_caster<T> auto_any_cast(T& x)
return {x};
}
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#endif
......@@ -3,8 +3,10 @@
#include <string>
#include <migraph/instruction_ref.hpp>
#include <migraph/config.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct program;
......@@ -14,6 +16,7 @@ struct auto_contiguous
void apply(program& p) const;
};
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#endif
......@@ -5,8 +5,10 @@
#include <migraph/errors.hpp>
#include <migraph/argument.hpp>
#include <migraph/reflect.hpp>
#include <migraph/config.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
namespace builtin {
......@@ -62,7 +64,7 @@ struct param
};
} // namespace builtin
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#endif
......@@ -2,8 +2,10 @@
#define MIGRAPH_GUARD_RTGLIB_CHECK_CONTEXT_HPP
#include <migraph/program.hpp>
#include <migraph/config.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
template <class T>
struct check_context
......@@ -25,6 +27,7 @@ struct check_context
void apply(program& p) const { p.insert_instruction(p.begin(), op{}); }
};
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#endif
......@@ -2,9 +2,11 @@
#define MIGRAPH_GUARD_RTGLIB_CHECK_SHAPES_HPP
#include <migraph/shape.hpp>
#include <migraph/config.hpp>
#include <algorithm>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct check_shapes
{
......@@ -154,6 +156,7 @@ struct check_shapes
check_shapes slice(long start, long last) { return {get(start), get(last), name}; }
};
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#endif
......@@ -3,8 +3,10 @@
#include <string>
#include <migraph/instruction_ref.hpp>
#include <migraph/config.hpp>
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
struct program;
......@@ -14,6 +16,7 @@ struct common_subexpression_elimination
void apply(program& p) const;
};
} // namespace MIGRAPH_INLINE_NS
} // namespace migraph
#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