resolve GGL merge conflicts

Change-Id: I7a5ec3696cf2dd1a77b1686536a1cb84cbfed66e


[ROCm/clr commit: 6f38d0f55e]
このコミットが含まれているのは:
sunway513
2017-03-27 17:19:09 +00:00
committed by Sun, Peng
コミット d64768262f
5個のファイルの変更357行の追加401行の削除
+335 -380
ファイルの表示
@@ -35,7 +35,7 @@ THE SOFTWARE.
#include <type_traits>
#include <utility>
namespace glo_tests
namespace hip_impl
{
namespace
{
@@ -54,7 +54,6 @@ namespace glo_tests
template<FunctionalProcedure K, typename... Ts>
requires(Domain<K> == {Ts...})
static
inline
void grid_launch_impl(
New_grid_launch_tag,
@@ -79,14 +78,13 @@ namespace glo_tests
throw std::runtime_error{"Failed to retrieve accelerator_view!"};
}
hc::parallel_for_each(*av, d, [=](hc::tiled_index<3> idx) [[hc]] {
hc::parallel_for_each(*av, d, [=](const hc::tiled_index<3>& idx) [[hc]] {
k(args...);
});
}
template<FunctionalProcedure K, typename... Ts>
requires(Domain<K> == {hipLaunchParm, Ts...})
static
inline
void grid_launch_impl(
Old_grid_launch_tag,
@@ -110,7 +108,6 @@ namespace glo_tests
template<FunctionalProcedure K, typename... Ts>
requires(Domain<K> == {Ts...})
static
inline
std::enable_if_t<!std::is_function<K>::value> grid_launch(
dim3 num_blocks,
@@ -152,7 +149,6 @@ namespace glo_tests
template<FunctionalProcedure K, K* k, typename... Ts>
requires(Domain<K> == {Ts...})
static
inline
void grid_launch(
New_grid_launch_tag,
@@ -174,7 +170,6 @@ namespace glo_tests
template<FunctionalProcedure K, K* k, typename... Ts>
requires(Domain<K> == {Ts...})
static
inline
void grid_launch(
Old_grid_launch_tag,
@@ -196,7 +191,6 @@ namespace glo_tests
template<FunctionalProcedure K, K* k, typename... Ts>
requires(Domain<K> == {Ts...})
static
inline
std::enable_if_t<std::is_function<K>::value> grid_launch(
dim3 num_blocks,
@@ -214,402 +208,363 @@ namespace glo_tests
std::forward<Ts>(args)...);
}
namespace
{
template<typename K, typename = void> struct Wrapper;
template<FunctionalProcedure K>
struct Wrapper<K, std::enable_if_t<!std::is_function<K>::value>> {
template<typename... Ts>
requires(Domain<K> == {Ts...})
void operator()(Ts&&... args) const
{
grid_launch(std::forward<Ts>(args)...);
}
};
template<FunctionalProcedure K>
struct Wrapper<K, std::enable_if_t<std::is_function<K>::value>> {
template<typename... Ts>
void operator()(Ts&&...) const {}
};
}
// TODO: these are temporary, they need to be uglified and them completely
// removed once we enable C++14 support and can have proper generic,
// variadic lambdas.
#define make_lambda_wrapper21( \
kernel_name, \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, \
p16, p17, p18, p19) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_, \
std::decay_t<decltype(p14)> _p14_, \
std::decay_t<decltype(p15)> _p15_, \
std::decay_t<decltype(p16)> _p16_, \
std::decay_t<decltype(p17)> _p17_, \
std::decay_t<decltype(p18)> _p18_, \
std::decay_t<decltype(p19)> _p19_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_, _p17_, \
_p18_, _p19_); \
// TODO: these are temporary, they need to be completely removed once we
// enable C++14 support and can have proper generic, variadic lambdas.
#define make_kernel_lambda_hip_21(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15,\
p16, p17, p18, p19)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_,\
const std::decay_t<decltype(p14)>& _p14_,\
const std::decay_t<decltype(p15)>& _p15_,\
const std::decay_t<decltype(p16)>& _p16_,\
const std::decay_t<decltype(p17)>& _p17_,\
const std::decay_t<decltype(p18)>& _p18_,\
const std::decay_t<decltype(p19)>& _p19_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_, _p17_,\
_p18_, _p19_);\
}
#define make_lambda_wrapper20( \
kernel_name, \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, \
p16, p17, p18) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_, \
std::decay_t<decltype(p14)> _p14_, \
std::decay_t<decltype(p15)> _p15_, \
std::decay_t<decltype(p16)> _p16_, \
std::decay_t<decltype(p17)> _p17_, \
std::decay_t<decltype(p18)> _p18_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_, _p17_, \
_p18_); \
#define make_kernel_lambda_hip_20(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15,\
p16, p17, p18)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_,\
const std::decay_t<decltype(p14)>& _p14_,\
const std::decay_t<decltype(p15)>& _p15_,\
const std::decay_t<decltype(p16)>& _p16_,\
const std::decay_t<decltype(p17)>& _p17_,\
const std::decay_t<decltype(p18)>& _p18_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_, _p17_,\
_p18_);\
}
#define make_lambda_wrapper19( \
kernel_name, \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, \
p16, p17) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_, \
std::decay_t<decltype(p14)> _p14_, \
std::decay_t<decltype(p15)> _p15_, \
std::decay_t<decltype(p16)> _p16_, \
std::decay_t<decltype(p17)> _p17_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_, _p17_); \
#define make_kernel_lambda_hip_19(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15,\
p16, p17)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_,\
const std::decay_t<decltype(p14)>& _p14_,\
const std::decay_t<decltype(p15)>& _p15_,\
const std::decay_t<decltype(p16)>& _p16_,\
const std::decay_t<decltype(p17)>& _p17_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_, _p17_);\
}
#define make_lambda_wrapper18( \
kernel_name, \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, \
p16) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_, \
std::decay_t<decltype(p14)> _p14_, \
std::decay_t<decltype(p15)> _p15_, \
std::decay_t<decltype(p16)> _p16_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_); \
#define make_kernel_lambda_hip_18(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15,\
p16)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_,\
const std::decay_t<decltype(p14)>& _p14_,\
const std::decay_t<decltype(p15)>& _p15_,\
const std::decay_t<decltype(p16)>& _p16_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_, _p16_);\
}
#define make_lambda_wrapper17( \
kernel_name, \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_, \
std::decay_t<decltype(p14)> _p14_, \
std::decay_t<decltype(p15)> _p15_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_); \
#define make_kernel_lambda_hip_17(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_,\
const std::decay_t<decltype(p14)>& _p14_,\
const std::decay_t<decltype(p15)>& _p15_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_, _p15_);\
}
#define make_lambda_wrapper16( \
kernel_name, \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_, \
std::decay_t<decltype(p14)> _p14_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_); \
#define make_kernel_lambda_hip_16(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_,\
const std::decay_t<decltype(p14)>& _p14_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_, _p14_);\
}
#define make_lambda_wrapper15( \
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13)\
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_, \
std::decay_t<decltype(p13)> _p13_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_, _p13_); \
#define make_kernel_lambda_hip_15(\
kernel_name,\
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_,\
const std::decay_t<decltype(p13)>& _p13_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_, _p13_);\
}
#define make_lambda_wrapper14( \
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_, \
std::decay_t<decltype(p12)> _p12_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_, _p12_); \
#define make_kernel_lambda_hip_14(\
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_,\
const std::decay_t<decltype(p12)>& _p12_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_, _p12_);\
}
#define make_lambda_wrapper13( \
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_, \
std::decay_t<decltype(p11)> _p11_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, \
_p9_, _p10_, _p11_); \
#define make_kernel_lambda_hip_13(\
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_,\
const std::decay_t<decltype(p11)>& _p11_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_,\
_p9_, _p10_, _p11_);\
}
#define make_lambda_wrapper12( \
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_, \
std::decay_t<decltype(p10)> _p10_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, _p9_, \
_p10_); \
#define make_kernel_lambda_hip_12(\
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_,\
const std::decay_t<decltype(p10)>& _p10_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, _p9_,\
_p10_);\
}
#define make_lambda_wrapper11( \
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_, \
std::decay_t<decltype(p9)> _p9_) [[hc]] { \
kernel_name( \
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, _p9_); \
#define make_kernel_lambda_hip_11(\
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_,\
const std::decay_t<decltype(p9)>& _p9_) [[hc]] {\
kernel_name(\
_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_, _p9_);\
}
#define make_lambda_wrapper10( \
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_, \
std::decay_t<decltype(p8)> _p8_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_); \
#define make_kernel_lambda_hip_10(\
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_,\
const std::decay_t<decltype(p8)>& _p8_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_, _p8_);\
}
#define make_lambda_wrapper9(kernel_name, p0, p1, p2, p3, p4, p5, p6, p7) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_, \
std::decay_t<decltype(p7)> _p7_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_); \
#define make_kernel_lambda_hip_9(\
kernel_name, p0, p1, p2, p3, p4, p5, p6, p7)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_,\
const std::decay_t<decltype(p7)>& _p7_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_, _p7_);\
}
#define make_lambda_wrapper8(kernel_name, p0, p1, p2, p3, p4, p5, p6) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_, \
std::decay_t<decltype(p6)> _p6_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_); \
#define make_kernel_lambda_hip_8(kernel_name, p0, p1, p2, p3, p4, p5, p6)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_,\
const std::decay_t<decltype(p6)>& _p6_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_, _p6_);\
}
#define make_lambda_wrapper7(kernel_name, p0, p1, p2, p3, p4, p5) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_, \
std::decay_t<decltype(p5)> _p5_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_); \
#define make_kernel_lambda_hip_7(kernel_name, p0, p1, p2, p3, p4, p5)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_,\
const std::decay_t<decltype(p5)>& _p5_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_, _p5_);\
}
#define make_lambda_wrapper6(kernel_name, p0, p1, p2, p3, p4) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_, \
std::decay_t<decltype(p4)> _p4_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_); \
#define make_kernel_lambda_hip_6(kernel_name, p0, p1, p2, p3, p4)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_,\
const std::decay_t<decltype(p4)>& _p4_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_, _p3_, _p4_);\
}
#define make_lambda_wrapper5(kernel_name, p0, p1, p2, p3) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_, \
std::decay_t<decltype(p3)> _p3_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_, _p3_); \
#define make_kernel_lambda_hip_5(kernel_name, p0, p1, p2, p3)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_,\
const std::decay_t<decltype(p3)>& _p3_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_, _p3_);\
}
#define make_lambda_wrapper4(kernel_name, p0, p1, p2) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_, \
std::decay_t<decltype(p2)> _p2_) [[hc]] { \
kernel_name(_p0_, _p1_, _p2_); \
#define make_kernel_lambda_hip_4(kernel_name, p0, p1, p2)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_,\
const std::decay_t<decltype(p2)>& _p2_) [[hc]] {\
kernel_name(_p0_, _p1_, _p2_);\
}
#define make_lambda_wrapper3(kernel_name, p0, p1) \
[]( \
std::decay_t<decltype(p0)> _p0_, \
std::decay_t<decltype(p1)> _p1_) [[hc]] { \
kernel_name(_p0_, _p1_); \
#define make_kernel_lambda_hip_3(kernel_name, p0, p1)\
[](const std::decay_t<decltype(p0)>& _p0_,\
const std::decay_t<decltype(p1)>& _p1_) [[hc]] {\
kernel_name(_p0_, _p1_);\
}
#define make_lambda_wrapper2(kernel_name, p0) \
[](std::decay_t<decltype(p0)> _p0_) [[hc]] { \
kernel_name(_p0_); \
#define make_kernel_lambda_hip_2(kernel_name, p0)\
[](const std::decay_t<decltype(p0)>& _p0_) [[hc]] {\
kernel_name(_p0_);\
}
#define make_lambda_wrapper1(kernel_name) \
#define make_kernel_lambda_hip_1(kernel_name)\
[]() [[hc]] { kernel_name(lp); }
#define make_lambda_wrapper(...) \
overload_macro(make_lambda_wrapper, __VA_ARGS__)
#define make_kernel_lambda_hip_(...)\
overload_macro_hip_(make_kernel_lambda_hip_, __VA_ARGS__)
#define hipLaunchKernelV3( \
kernel_name, \
num_blocks, \
dim_blocks, \
group_mem_bytes, \
stream, \
...) \
{ \
glo_tests::grid_launch( \
num_blocks, \
dim_blocks, \
group_mem_bytes, \
stream, \
make_lambda_wrapper(kernel_name, __VA_ARGS__), \
##__VA_ARGS__); \
#define hipLaunchKernelV3(\
kernel_name,\
num_blocks,\
dim_blocks,\
group_mem_bytes,\
stream,\
...)\
{\
hip_impl::grid_launch(\
num_blocks,\
dim_blocks,\
group_mem_bytes,\
stream,\
make_kernel_lambda_hip_(kernel_name, __VA_ARGS__),\
##__VA_ARGS__);\
}
#define hipLaunchKernel( \
kernel_name, \
num_blocks, \
dim_blocks, \
group_mem_bytes, \
stream, \
...) \
{ \
hipLaunchKernelV3( \
kernel_name, \
num_blocks, \
dim_blocks, \
group_mem_bytes, \
stream, \
hipLaunchParm{}, \
##__VA_ARGS__); \
#define hipLaunchKernel(\
kernel_name,\
num_blocks,\
dim_blocks,\
group_mem_bytes,\
stream,\
...)\
{\
hipLaunchKernelV3(\
kernel_name,\
num_blocks,\
dim_blocks,\
group_mem_bytes,\
stream,\
hipLaunchParm{},\
##__VA_ARGS__);\
}
}
+13 -16
ファイルの表示
@@ -20,9 +20,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
//
// Created by alexv on 08/11/16.
//
#pragma once
#include <type_traits> // For std::conditional, std::decay, std::enable_if,
@@ -30,7 +27,7 @@ THE SOFTWARE.
#include <utility> // For std::declval.
namespace std
{
{ // TODO: these should be removed as soon as possible.
#if (__cplusplus < 201406L)
template<typename...>
using void_t = void;
@@ -126,20 +123,20 @@ namespace std
#endif
}
namespace glo_tests // Only for documentation, macros ignore namespaces.
namespace // Only for documentation, macros ignore namespaces.
{
#define count_macro_args_impl( \
_0, _1, _2, _3, _4, _5, _6, _7, \
_8, _9, _10, _11, _12, _13, _14, _15, \
_16, _17, _18, _19, _20, _21, _n, ...) _n
#define count_macro_args(...) \
count_macro_args_impl( \
#define count_macro_args_impl_hip_(\
_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15,\
_16, _17, _18, _19, _20, _21, _n, ...) _n
#define count_macro_args_hip_(...)\
count_macro_args_impl_hip_(\
, ##__VA_ARGS__, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9,\
8, 7, 6, 5, 4, 3, 2, 1, 0)
#define overloaded_macro_expand(macro, arg_cnt) macro##arg_cnt
#define overload_macro_impl(macro, arg_cnt) \
overloaded_macro_expand(macro, arg_cnt)
#define overload_macro(macro, ...) \
overload_macro_impl(macro, count_macro_args(__VA_ARGS__)) (__VA_ARGS__)
#define overloaded_macro_expand_hip_(macro, arg_cnt) macro##arg_cnt
#define overload_macro_impl_hip_(macro, arg_cnt)\
overloaded_macro_expand_hip_(macro, arg_cnt)
#define overload_macro_hip_(macro, ...)\
overload_macro_impl_hip_(macro, count_macro_args_hip_(__VA_ARGS__))\
(__VA_ARGS__)
}
+6 -2
ファイルの表示
@@ -62,11 +62,15 @@ THE SOFTWARE.
#include <grid_launch.h>
//TODO-HCC-GL - change this to typedef.
//typedef grid_launch_parm hipLaunchParm ;
struct EmptyLaunchParm{};
#if GENERIC_GRID_LAUNCH == 0
#define hipLaunchParm grid_launch_parm
#else
#define hipLaunchParm EmptyLaunchParm
namespace hip_impl
{
struct Empty_launch_parm{};
}
#define hipLaunchParm hip_impl::Empty_launch_parm
#endif //GENERIC_GRID_LAUNCH
#if defined (GRID_LAUNCH_VERSION) and (GRID_LAUNCH_VERSION >= 20) || GENERIC_GRID_LAUNCH == 1
+1 -1
ファイルの表示
@@ -32,7 +32,7 @@ THE SOFTWARE.
#include <iostream>
#ifndef GENERIC_GRID_LAUNCH
#define GENERIC_GRID_LAUNCH 0
#define GENERIC_GRID_LAUNCH 0
#endif
#include <hip/hcc_detail/host_defines.h>
+2 -2
ファイルの表示
@@ -32,7 +32,7 @@ THE SOFTWARE.
// Add guard to Generic Grid Launch method
#ifndef GENERIC_GRID_LAUNCH
#define GENERIC_GRID_LAUNCH 0
#define GENERIC_GRID_LAUNCH 0
#endif
#ifdef __HCC__
@@ -46,7 +46,7 @@ THE SOFTWARE.
#if GENERIC_GRID_LAUNCH == 0
//#warning "original global define reached"
#define __global__ __attribute__((hc_grid_launch)) __attribute__((used))
#else
#else
//#warning "GGL global define reached"
#define __global__ [[hc]] __attribute__((weak))
#endif //GENERIC_GRID_LAUNCH