Commit 0fb084b3 authored by Paul's avatar Paul
Browse files

Format

parent 78be5944
...@@ -209,7 +209,7 @@ struct integral_const_array : array<T, sizeof...(Xs)> ...@@ -209,7 +209,7 @@ struct integral_const_array : array<T, sizeof...(Xs)>
MIGRAPHX_DEVICE_CONSTEXPR integral_const_array() : base_array({Xs...}) {} MIGRAPHX_DEVICE_CONSTEXPR integral_const_array() : base_array({Xs...}) {}
}; };
template<class F> template <class F>
constexpr auto return_const_array(F f) constexpr auto return_const_array(F f)
{ {
constexpr const auto a = f(); constexpr const auto a = f();
......
...@@ -102,64 +102,62 @@ struct shape ...@@ -102,64 +102,62 @@ struct shape
{ {
if constexpr(shape{}.standard()) if constexpr(shape{}.standard())
MIGRAPHX_ASSERT(i == compute_index(i)); MIGRAPHX_ASSERT(i == compute_index(i));
return i; return i;
}
else
{
return compute_index(i);
}
}
constexpr index_int compute_index(index_int i) const
{
constexpr auto sstrides = compute_standard_strides();
constexpr auto rank = Lens{}.size();
index_int result = 0;
repeat(rank, [&](auto j) {
constexpr auto k = rank - j - 1;
constexpr auto stride = Strides{}[k];
constexpr auto len = Lens{}[k];
if constexpr(stride != 0)
{
constexpr auto s = sstrides[k];
constexpr auto slen = s * len;
auto idx = (i % slen) / s;
result += stride * idx;
}
});
return result;
} }
else { return compute_index(i); }
}
/// Convert single index into a multi-index constexpr index_int
constexpr index_array multi(index_int idx) const compute_index(index_int i) const
{ {
index_array result; constexpr auto sstrides = compute_standard_strides();
index_int tidx = idx; constexpr auto rank = Lens{}.size();
for(diff_int is = result.size() - 1; is > 0; is--) index_int result = 0;
repeat(rank, [&](auto j) {
constexpr auto k = rank - j - 1;
constexpr auto stride = Strides{}[k];
constexpr auto len = Lens{}[k];
if constexpr(stride != 0)
{ {
result[is] = tidx % lens[is]; constexpr auto s = sstrides[k];
tidx = tidx / lens[is]; constexpr auto slen = s * len;
auto idx = (i % slen) / s;
result += stride * idx;
} }
result[0] = tidx; });
return result; return result;
} }
/// Convert multi-index into a single index
constexpr index_int single(index_array idx) const /// Convert single index into a multi-index
constexpr index_array multi(index_int idx) const
{
index_array result;
index_int tidx = idx;
for(diff_int is = result.size() - 1; is > 0; is--)
{ {
if(idx.empty()) result[is] = tidx % lens[is];
return 0; tidx = tidx / lens[is];
return inner_product(lens.begin() + 1, lens.end(), idx.begin(), idx.back());
} }
result[0] = tidx;
return result;
}
/// Convert multi-index into a single index
constexpr index_int single(index_array idx) const
{
if(idx.empty())
return 0;
return inner_product(lens.begin() + 1, lens.end(), idx.begin(), idx.back());
}
constexpr shape get_shape() const { return *this; } constexpr shape get_shape() const { return *this; }
template <class Stream> template <class Stream>
friend constexpr const Stream& operator<<(const Stream& ss, const shape& s) friend constexpr const Stream& operator<<(const Stream& ss, const shape& s)
{ {
ss << "{" << s.lens << "}, {" << s.strides << "}"; ss << "{" << s.lens << "}, {" << s.strides << "}";
return ss; return ss;
} }
}; }; // namespace migraphx
template <class Lens, class Strides> template <class Lens, class Strides>
constexpr shape<Lens, Strides> make_shape(Lens lens, Strides strides) constexpr shape<Lens, Strides> make_shape(Lens lens, Strides strides)
......
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