-
Notifications
You must be signed in to change notification settings - Fork 420
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
algorithms: separate nonseq ops, rename for consistency
- Loading branch information
Showing
13 changed files
with
1,080 additions
and
939 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
117 changes: 117 additions & 0 deletions
117
algorithms/src/std_algorithms/Kokkos_ModifyingOperations.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
/* | ||
//@HEADER | ||
// ************************************************************************ | ||
// | ||
// Kokkos v. 3.0 | ||
// Copyright (2020) National Technology & Engineering | ||
// Solutions of Sandia, LLC (NTESS). | ||
// | ||
// Under the terms of Contract DE-NA0003525 with NTESS, | ||
// the U.S. Government retains certain rights in this software. | ||
// | ||
// Redistribution and use in source and binary forms, with or without | ||
// modification, are permitted provided that the following conditions are | ||
// met: | ||
// | ||
// 1. Redistributions of source code must retain the above copyright | ||
// notice, this list of conditions and the following disclaimer. | ||
// | ||
// 2. Redistributions in binary form must reproduce the above copyright | ||
// notice, this list of conditions and the following disclaimer in the | ||
// documentation and/or other materials provided with the distribution. | ||
// | ||
// 3. Neither the name of the Corporation nor the names of the | ||
// contributors may be used to endorse or promote products derived from | ||
// this software without specific prior written permission. | ||
// | ||
// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY | ||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE | ||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
// | ||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov) | ||
// | ||
// ************************************************************************ | ||
//@HEADER | ||
*/ | ||
|
||
#ifndef KOKKOS_MODIFYING_OPERATIONS_HPP | ||
#define KOKKOS_MODIFYING_OPERATIONS_HPP | ||
|
||
#include <Kokkos_Core.hpp> | ||
#include "Kokkos_BeginEnd.hpp" | ||
#include "Kokkos_Constraints.hpp" | ||
|
||
/// \file Kokkos_ModifyingOperations.hpp | ||
/// \brief Kokkos modifying operations | ||
|
||
namespace Kokkos { | ||
namespace Experimental { | ||
|
||
// see https://github.com/kokkos/kokkos/issues/4075 | ||
// | ||
// move | ||
// swap | ||
// iter_swap | ||
|
||
// move | ||
template <typename T> | ||
KOKKOS_INLINE_FUNCTION std::remove_reference_t<T>&& move(T&& t) { | ||
return static_cast<std::remove_reference_t<T>&&>(t); | ||
} | ||
|
||
// swap | ||
template <class T> | ||
KOKKOS_INLINE_FUNCTION void swap(T& a, T& b) noexcept { | ||
static_assert( | ||
std::is_move_assignable<T>::value && std::is_move_constructible<T>::value, | ||
"Kokkos::Experimental::swap arguments must be move assignable " | ||
"and move constructible"); | ||
|
||
T tmp = ::Kokkos::Experimental::move(a); | ||
a = ::Kokkos::Experimental::move(b); | ||
b = ::Kokkos::Experimental::move(tmp); | ||
} | ||
|
||
//---------------------------------------------------------------------------- | ||
namespace Impl{ | ||
template <class IteratorType1, class IteratorType2> | ||
struct StdIterSwapFunctor { | ||
IteratorType1 m_a; | ||
IteratorType2 m_b; | ||
|
||
KOKKOS_INLINE_FUNCTION | ||
void operator()(int i) const { | ||
(void)i; | ||
::Kokkos::Experimental::swap(*m_a, *m_b); | ||
} | ||
|
||
KOKKOS_INLINE_FUNCTION | ||
StdIterSwapFunctor(IteratorType1 _a, IteratorType2 _b) : m_a(_a), m_b(_b) {} | ||
}; | ||
|
||
template <class IteratorType1, class IteratorType2> | ||
KOKKOS_INLINE_FUNCTION void iter_swap_impl(IteratorType1 a, IteratorType2 b) { | ||
Kokkos::parallel_for(1, | ||
StdIterSwapFunctor<IteratorType1, IteratorType2>(a, b)); | ||
} | ||
} // namespace Impl | ||
//---------------------------------------------------------------------------- | ||
|
||
// iter_swap | ||
template <class IteratorType1, class IteratorType2> | ||
KOKKOS_INLINE_FUNCTION void iter_swap(IteratorType1 a, IteratorType2 b) { | ||
Impl::iter_swap_impl(a, b); | ||
} | ||
|
||
} // namespace Experimental | ||
} // namespace Kokkos | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.