Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
73da1e4a
Commit
73da1e4a
authored
Aug 19, 2022
by
Paul
Browse files
Format
parent
dd900bf2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
34 deletions
+34
-34
src/targets/gpu/kernels/include/migraphx/kernels/array.hpp
src/targets/gpu/kernels/include/migraphx/kernels/array.hpp
+34
-34
No files found.
src/targets/gpu/kernels/include/migraphx/kernels/array.hpp
View file @
73da1e4a
...
@@ -33,42 +33,42 @@
...
@@ -33,42 +33,42 @@
namespace
migraphx
{
namespace
migraphx
{
// NOLINTNEXTLINE
// NOLINTNEXTLINE
#define MIGRAPHX_DEVICE_ARRAY_OP(op, binary_op) \
#define MIGRAPHX_DEVICE_ARRAY_OP(op, binary_op)
\
template <class U> \
template <class U>
\
constexpr array& operator op(const array<U, N>& x) \
constexpr array& operator op(const array<U, N>& x)
\
{ \
{
\
array_for_each(*this, x)([](auto& sy, auto sx) { sy op sx; });
\
array_for_each(*this, x)([](auto& sy, auto sx) { sy op sx; }); \
return *this; \
return *this;
\
} \
}
\
template <class U, MIGRAPHX_REQUIRES(is_convertible<U, T>{})> \
template <class U, MIGRAPHX_REQUIRES(is_convertible<U, T>{})>
\
constexpr array& operator op(const U& x) \
constexpr array& operator op(const U& x)
\
{ \
{
\
array_for_each(*this)([&](auto& sy) { sy op x; });
\
array_for_each
(*this)([&](auto& sy) { sy op x; }); \
return *this; \
return *this;
\
} \
}
\
template <class U> \
template <class U>
\
friend constexpr auto operator binary_op(const array& x, const array<U, N>& y) \
friend constexpr auto operator binary_op(const array& x, const array<U, N>& y)
\
{ \
{
\
array<decltype(T {} binary_op U{}), N> z{}; \
array<decltype(T {} binary_op U{}), N> z{};
\
array_for_each(z, x, y)([&](auto& sz, auto sx, auto sy) { sz = sx binary_op sy; });
\
array_for_each(z, x, y)([&](auto& sz, auto sx, auto sy) { sz = sx binary_op sy; }); \
return z; \
return z;
\
} \
}
\
template <class U, MIGRAPHX_REQUIRES(is_convertible<U, T>{})> \
template <class U, MIGRAPHX_REQUIRES(is_convertible<U, T>{})>
\
friend constexpr auto operator binary_op(const array& x, const U& y) \
friend constexpr auto operator binary_op(const array& x, const U& y)
\
{ \
{
\
array<decltype(T {} binary_op U{}), N> z{}; \
array<decltype(T {} binary_op U{}), N> z{};
\
array_for_each(z, x)([&](auto& sz, auto sx) { sz = sx binary_op y; });
\
array_for_each(z, x)([&](auto& sz, auto sx) { sz = sx binary_op y; }); \
return z; \
return z;
\
} \
}
\
template <class U, MIGRAPHX_REQUIRES(is_convertible<U, T>{})> \
template <class U, MIGRAPHX_REQUIRES(is_convertible<U, T>{})>
\
friend constexpr auto operator binary_op(const U& x, const array& y) \
friend constexpr auto operator binary_op(const U& x, const array& y)
\
{ \
{
\
array<decltype(T {} binary_op U{}), N> z{}; \
array<decltype(T {} binary_op U{}), N> z{};
\
array_for_each(z, y)([&](auto& sz, auto sy) { sz = x binary_op sy; });
\
array_for_each(z, y)([&](auto& sz, auto sy) { sz = x binary_op sy; }); \
return z; \
return z;
\
}
}
template
<
class
T
,
class
...
Ts
>
template
<
class
T
,
class
...
Ts
>
constexpr
auto
array_for_each
(
T
&
x
,
Ts
&
...
xs
)
constexpr
auto
array_for_each
(
T
&
x
,
Ts
&
...
xs
)
{
{
return
[
&
](
auto
f
)
{
return
[
&
](
auto
f
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment