@@ -1653,15 +1653,13 @@ void initReduLocalAccs(bool Pow2WG, size_t LID, size_t WGSize,
1653
1653
const std::tuple<ReducerT...> &Reducers,
1654
1654
ReduTupleT<ResultT...> Identities,
1655
1655
std::index_sequence<Is...>) {
1656
- std::tie (std::get<Is>(LocalAccs)[LID]...) =
1657
- std::make_tuple (std::get<Is>(Reducers).MValue ...);
1656
+ ((std::get<Is>(LocalAccs)[LID] = std::get<Is>(Reducers).MValue ), ...);
1658
1657
1659
1658
// For work-groups, which size is not power of two, local accessors have
1660
1659
// an additional element with index WGSize that is used by the tree-reduction
1661
1660
// algorithm. Initialize those additional elements with identity values here.
1662
1661
if (!Pow2WG)
1663
- std::tie (std::get<Is>(LocalAccs)[WGSize]...) =
1664
- std::make_tuple (std::get<Is>(Identities)...);
1662
+ ((std::get<Is>(LocalAccs)[WGSize] = std::get<Is>(Identities)), ...);
1665
1663
}
1666
1664
1667
1665
template <typename ... LocalAccT, typename ... InputAccT, typename ... ResultT,
@@ -1679,28 +1677,26 @@ void initReduLocalAccs(bool UniformPow2WG, size_t LID, size_t GID,
1679
1677
// give any impact into the final partial sums during the tree-reduction
1680
1678
// algorithm work.
1681
1679
if (UniformPow2WG || GID < NWorkItems)
1682
- std::tie (std::get<Is>(LocalAccs)[LID]...) =
1683
- std::make_tuple (std::get<Is>(InputAccs)[GID]...);
1680
+ ((std::get<Is>(LocalAccs)[LID] = std::get<Is>(InputAccs)[GID]), ...);
1684
1681
else
1685
- std::tie (std::get<Is>(LocalAccs)[LID]...) =
1686
- std::make_tuple (std::get<Is>(Identities)...);
1682
+ ((std::get<Is>(LocalAccs)[LID] = std::get<Is>(Identities)), ...);
1687
1683
1688
1684
// For work-groups, which size is not power of two, local accessors have
1689
1685
// an additional element with index WGSize that is used by the tree-reduction
1690
1686
// algorithm. Initialize those additional elements with identity values here.
1691
1687
if (!UniformPow2WG)
1692
- std::tie (std::get<Is>(LocalAccs)[WGSize]...) =
1693
- std::make_tuple (std::get<Is>(Identities)...);
1688
+ ((std::get<Is>(LocalAccs)[WGSize] = std::get<Is>(Identities)), ...);
1694
1689
}
1695
1690
1696
1691
template <typename ... LocalAccT, typename ... BOPsT, size_t ... Is>
1697
1692
void reduceReduLocalAccs (size_t IndexA, size_t IndexB,
1698
1693
ReduTupleT<LocalAccT...> LocalAccs,
1699
1694
ReduTupleT<BOPsT...> BOPs,
1700
1695
std::index_sequence<Is...>) {
1701
- std::tie (std::get<Is>(LocalAccs)[IndexA]...) =
1702
- std::make_tuple ((std::get<Is>(BOPs)(std::get<Is>(LocalAccs)[IndexA],
1703
- std::get<Is>(LocalAccs)[IndexB]))...);
1696
+ auto ProcessOne = [=](auto &LocalAcc, auto &BOp) {
1697
+ LocalAcc[IndexA] = BOp (LocalAcc[IndexA], LocalAcc[IndexB]);
1698
+ };
1699
+ (ProcessOne (std::get<Is>(LocalAccs), std::get<Is>(BOPs)), ...);
1704
1700
}
1705
1701
1706
1702
template <typename ... Reductions, typename ... OutAccT, typename ... LocalAccT,
@@ -1713,23 +1709,23 @@ void writeReduSumsToOutAccs(
1713
1709
std::index_sequence<Is...>) {
1714
1710
// Add the initial value of user's variable to the final result.
1715
1711
if (IsOneWG)
1716
- std::tie (std::get<Is>(LocalAccs)[0 ]...) = std::make_tuple (std::get<Is>(
1717
- BOPs)(std::get<Is>(LocalAccs)[0 ], IsInitializeToIdentity[Is]
1718
- ? std::get<Is>(IdentityVals)
1719
- : std::get<Is>(OutAccs)[0 ])...);
1712
+ ((std::get<Is>(LocalAccs)[0 ] = std::get<Is>(BOPs)(
1713
+ std::get<Is>(LocalAccs)[0 ], IsInitializeToIdentity[Is]
1714
+ ? std::get<Is>(IdentityVals)
1715
+ : std::get<Is>(OutAccs)[0 ])),
1716
+ ...);
1720
1717
1721
1718
if (Pow2WG) {
1722
1719
// The partial sums for the work-group are stored in 0-th elements of local
1723
1720
// accessors. Simply write those sums to output accessors.
1724
- std::tie (std::get<Is>(OutAccs)[OutAccIndex]...) =
1725
- std::make_tuple (std::get<Is>(LocalAccs)[0 ]...);
1721
+ ((std::get<Is>(OutAccs)[OutAccIndex] = std::get<Is>(LocalAccs)[0 ]), ...);
1726
1722
} else {
1727
1723
// Each of local accessors keeps two partial sums: in 0-th and WGsize-th
1728
1724
// elements. Combine them into final partial sums and write to output
1729
1725
// accessors.
1730
- std::tie ( std::get<Is>(OutAccs)[OutAccIndex]...) =
1731
- std::make_tuple (std:: get<Is>(BOPs)( std::get<Is>(LocalAccs)[0 ] ,
1732
- std::get<Is>(LocalAccs)[WGSize]) ...);
1726
+ (( std::get<Is>(OutAccs)[OutAccIndex] = std::get<Is>(BOPs)(
1727
+ std::get<Is>(LocalAccs)[ 0 ], std::get<Is>(LocalAccs)[WGSize])) ,
1728
+ ...);
1733
1729
}
1734
1730
}
1735
1731
0 commit comments