Update Kokkos library to r2.6.00
This commit is contained in:
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -283,6 +283,18 @@ T atomic_compare_exchange( volatile T * const dest, const T compare, const T val
|
||||
return retval;
|
||||
}
|
||||
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template< typename T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
T atomic_compare_exchange( volatile T * const dest_v, const T compare, const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
T retval = *dest;
|
||||
if (retval == compare) *dest = val;
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif // !defined ROCM_ATOMICS
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -61,15 +61,17 @@ void atomic_decrement<char>(volatile char* a) {
|
||||
#if defined( KOKKOS_ENABLE_RFO_PREFETCH )
|
||||
_mm_prefetch( (const char*) a, _MM_HINT_ET0 );
|
||||
#endif
|
||||
|
||||
__asm__ __volatile__(
|
||||
"lock decb %0"
|
||||
: /* no output registers */
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
char* a_nv = const_cast<char*>(a);
|
||||
--(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_sub(a, 1);
|
||||
Kokkos::atomic_fetch_sub(a, char(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -80,15 +82,17 @@ void atomic_decrement<short>(volatile short* a) {
|
||||
#if defined( KOKKOS_ENABLE_RFO_PREFETCH )
|
||||
_mm_prefetch( (const char*) a, _MM_HINT_ET0 );
|
||||
#endif
|
||||
|
||||
__asm__ __volatile__(
|
||||
"lock decw %0"
|
||||
: /* no output registers */
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
short* a_nv = const_cast<short*>(a);
|
||||
--(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_sub(a, 1);
|
||||
Kokkos::atomic_fetch_sub(a, short(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -99,15 +103,17 @@ void atomic_decrement<int>(volatile int* a) {
|
||||
#if defined( KOKKOS_ENABLE_RFO_PREFETCH )
|
||||
_mm_prefetch( (const char*) a, _MM_HINT_ET0 );
|
||||
#endif
|
||||
|
||||
__asm__ __volatile__(
|
||||
"lock decl %0"
|
||||
: /* no output registers */
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
int* a_nv = const_cast<int*>(a);
|
||||
--(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_sub(a, 1);
|
||||
Kokkos::atomic_fetch_sub(a, int(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -124,15 +130,24 @@ void atomic_decrement<long long int>(volatile long long int* a) {
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
long long int* a_nv = const_cast<long long int*>(a);
|
||||
--(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_sub(a, 1);
|
||||
using T = long long int;
|
||||
Kokkos::atomic_fetch_sub(a, T(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
void atomic_decrement(volatile T* a) {
|
||||
Kokkos::atomic_fetch_sub(a, 1);
|
||||
#if defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
T* a_nv = const_cast<T*>(a);
|
||||
--(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_sub(a, T(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
} // End of namespace Kokkos
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -387,6 +387,26 @@ void atomic_assign( volatile T * const dest , const T val )
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template < typename T >
|
||||
inline
|
||||
T atomic_exchange( volatile T * const dest_v , const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
T retval = *dest;
|
||||
*dest = val;
|
||||
return retval;
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
inline
|
||||
void atomic_assign( volatile T * const dest_v , const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
*dest = val;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
} // namespace Kokkos
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -358,6 +358,17 @@ T atomic_fetch_add( volatile T * const dest , const T val )
|
||||
return retval;
|
||||
}
|
||||
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template< typename T >
|
||||
T atomic_fetch_add( volatile T * const dest_v , const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
T retval = *dest;
|
||||
*dest += val;
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif // !defined ROCM_ATOMICS
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -134,6 +134,17 @@ T atomic_fetch_and( volatile T * const dest , const T val )
|
||||
return retval;
|
||||
}
|
||||
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template< typename T >
|
||||
T atomic_fetch_and( volatile T * const dest_v , const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
T retval = *dest;
|
||||
*dest &= val;
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -134,6 +134,17 @@ T atomic_fetch_or( volatile T * const dest , const T val )
|
||||
return retval;
|
||||
}
|
||||
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template< typename T >
|
||||
T atomic_fetch_or( volatile T * const dest_v , const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
T retval = *dest;
|
||||
*dest |= val;
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -266,6 +266,17 @@ T atomic_fetch_sub( volatile T * const dest , const T val )
|
||||
return retval;
|
||||
}
|
||||
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template< typename T >
|
||||
T atomic_fetch_sub( volatile T * const dest_v , const T val )
|
||||
{
|
||||
T* dest = const_cast<T*>(dest_v);
|
||||
T retval = *dest;
|
||||
*dest -= val;
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif // !defined ROCM_ATOMICS
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -338,6 +338,8 @@ T atomic_fetch_mod(volatile T * const dest, const T val) {
|
||||
return Impl::atomic_fetch_oper(Impl::ModOper<T,const T>(),dest,val);
|
||||
}
|
||||
|
||||
#if !defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
|
||||
template < typename T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
T atomic_fetch_and(volatile T * const dest, const T val) {
|
||||
@ -350,6 +352,8 @@ T atomic_fetch_or(volatile T * const dest, const T val) {
|
||||
return Impl::atomic_fetch_oper(Impl::OrOper<T,const T>(),dest,val);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
template < typename T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
T atomic_fetch_xor(volatile T * const dest, const T val) {
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -65,8 +65,11 @@ void atomic_increment<char>(volatile char* a) {
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
char* a_nv = const_cast<char*>(a);
|
||||
++(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_add(a,1);
|
||||
Kokkos::atomic_fetch_add(a, char(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -83,8 +86,11 @@ void atomic_increment<short>(volatile short* a) {
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
short* a_nv = const_cast<short*>(a);
|
||||
++(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_add(a,1);
|
||||
Kokkos::atomic_fetch_add(a, short(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -101,8 +107,11 @@ void atomic_increment<int>(volatile int* a) {
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
int* a_nv = const_cast<int*>(a);
|
||||
++(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_add(a,1);
|
||||
Kokkos::atomic_fetch_add(a,int(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -119,15 +128,24 @@ void atomic_increment<long long int>(volatile long long int* a) {
|
||||
: "m" (a[0])
|
||||
: "memory"
|
||||
);
|
||||
#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
long long int* a_nv = const_cast<long long int*>(a);
|
||||
++(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_add(a,1);
|
||||
using T = long long int;
|
||||
Kokkos::atomic_fetch_add(a,T(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
void atomic_increment(volatile T* a) {
|
||||
Kokkos::atomic_fetch_add(a,1);
|
||||
#if defined( KOKKOS_ENABLE_SERIAL_ATOMICS )
|
||||
T* a_nv = const_cast<T*>(a);
|
||||
++(*a_nv);
|
||||
#else
|
||||
Kokkos::atomic_fetch_add(a,T(1));
|
||||
#endif
|
||||
}
|
||||
|
||||
} // End of namespace Kokkos
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -86,24 +86,24 @@ public:
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
const_value_type operator ++ () const {
|
||||
const_value_type tmp = Kokkos::atomic_fetch_add(ptr,1);
|
||||
const_value_type tmp = Kokkos::atomic_fetch_add(ptr,non_const_value_type(1));
|
||||
return tmp+1;
|
||||
}
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
const_value_type operator -- () const {
|
||||
const_value_type tmp = Kokkos::atomic_fetch_add(ptr,-1);
|
||||
const_value_type tmp = Kokkos::atomic_fetch_sub(ptr,non_const_value_type(1));
|
||||
return tmp-1;
|
||||
}
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
const_value_type operator ++ (int) const {
|
||||
return Kokkos::atomic_fetch_add(ptr,1);
|
||||
return Kokkos::atomic_fetch_add(ptr,non_const_value_type(1));
|
||||
}
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
const_value_type operator -- (int) const {
|
||||
return Kokkos::atomic_fetch_add(ptr,-1);
|
||||
return Kokkos::atomic_fetch_sub(ptr,non_const_value_type(1));
|
||||
}
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
@ -119,12 +119,12 @@ public:
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
const_value_type operator -= (const_value_type& val) const {
|
||||
const_value_type tmp = Kokkos::atomic_fetch_add(ptr,-val);
|
||||
const_value_type tmp = Kokkos::atomic_fetch_sub(ptr,val);
|
||||
return tmp-val;
|
||||
}
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
const_value_type operator -= (volatile const_value_type& val) const {
|
||||
const_value_type tmp = Kokkos::atomic_fetch_add(ptr,-val);
|
||||
const_value_type tmp = Kokkos::atomic_fetch_sub(ptr,val);
|
||||
return tmp-val;
|
||||
}
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -48,6 +48,10 @@
|
||||
#include <cstdint>
|
||||
#include <climits>
|
||||
|
||||
#ifdef KOKKOS_COMPILER_INTEL
|
||||
#include<immintrin.h>
|
||||
#endif
|
||||
|
||||
#if defined( __HCC_ACCELERATOR__ )
|
||||
#include <hc.hpp>
|
||||
#endif
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -48,12 +48,14 @@
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
#include <stack>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
namespace {
|
||||
bool g_is_initialized = false;
|
||||
bool g_show_warnings = true;
|
||||
std::stack<std::function<void()> > finalize_hooks;
|
||||
}
|
||||
|
||||
namespace Kokkos { namespace Impl { namespace {
|
||||
@ -188,6 +190,26 @@ setenv("MEMKIND_HBW_NODES", "1", 0);
|
||||
void finalize_internal( const bool all_spaces = false )
|
||||
{
|
||||
|
||||
typename decltype(finalize_hooks)::size_type numSuccessfulCalls = 0;
|
||||
while(! finalize_hooks.empty()) {
|
||||
auto f = finalize_hooks.top();
|
||||
try {
|
||||
f();
|
||||
}
|
||||
catch(...) {
|
||||
std::cerr << "Kokkos::finalize: A finalize hook (set via "
|
||||
"Kokkos::push_finalize_hook) threw an exception that it did not catch."
|
||||
" Per std::atexit rules, this results in std::terminate. This is "
|
||||
"finalize hook number " << numSuccessfulCalls << " (1-based indexing) "
|
||||
"out of " << finalize_hooks.size() << " to call. Remember that "
|
||||
"Kokkos::finalize calls finalize hooks in reverse order from how they "
|
||||
"were pushed." << std::endl;
|
||||
std::terminate();
|
||||
}
|
||||
finalize_hooks.pop();
|
||||
++numSuccessfulCalls;
|
||||
}
|
||||
|
||||
#if defined(KOKKOS_ENABLE_PROFILING)
|
||||
Kokkos::Profiling::finalize();
|
||||
#endif
|
||||
@ -477,6 +499,11 @@ void initialize(const InitArguments& arguments) {
|
||||
Impl::initialize_internal(arguments);
|
||||
}
|
||||
|
||||
void push_finalize_hook(std::function<void()> f)
|
||||
{
|
||||
finalize_hooks.push(f);
|
||||
}
|
||||
|
||||
void finalize()
|
||||
{
|
||||
Impl::finalize_internal();
|
||||
@ -639,7 +666,12 @@ void print_configuration( std::ostream & out , const bool detail )
|
||||
#else
|
||||
msg << "no" << std::endl;
|
||||
#endif
|
||||
|
||||
msg << " KOKKOS_ENABLE_SERIAL_ATOMICS: ";
|
||||
#ifdef KOKKOS_ENABLE_SERIAL_ATOMICS
|
||||
msg << "yes" << std::endl;
|
||||
#else
|
||||
msg << "no" << std::endl;
|
||||
#endif
|
||||
|
||||
msg << "Vectorization:" << std::endl;
|
||||
msg << " KOKKOS_ENABLE_PRAGMA_IVDEP: ";
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -224,26 +224,201 @@ private:
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// parallel_for operator with a tag:
|
||||
|
||||
@ -251,45 +426,333 @@ private:
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
template< class ArgMember >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static VOIDTAG deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & ) const ) {}
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// parallel_reduce operator without a tag:
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( TagType , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class TagType , class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static REJECTTAG deduce_reduce_type( VOIDTAG , void (FunctorType::*)( const TagType & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
//----------------------------------------
|
||||
// parallel_reduce operator with a tag:
|
||||
|
||||
@ -297,18 +760,133 @@ private:
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , ArgMember , T & ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( tag_type , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
template< class ArgMember , class T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static T deduce_reduce_type( tag_type , void (FunctorType::*)( const tag_type & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , const ArgMember & , T & ) const ) {}
|
||||
|
||||
//----------------------------------------
|
||||
// parallel_scan operator without a tag:
|
||||
|
||||
@ -467,7 +1045,7 @@ struct FunctorValueInitFunction< FunctorType , void > {
|
||||
// If a proper FunctorType::init is declared then use it,
|
||||
// otherwise use default constructor.
|
||||
template< class FunctorType , class ArgTag
|
||||
, class T = typename FunctorValueTraits<FunctorType,ArgTag>::reference_type
|
||||
, class T = typename FunctorValueTraits<FunctorType,ArgTag>::reference_type // FIXME Fix FunctorValueTraits for multi-dim operator
|
||||
, class Enable = void >
|
||||
struct FunctorValueInit ;
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -160,6 +160,34 @@ private:
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( M , M , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
using type = decltype( deduce( & F::operator() ) );
|
||||
};
|
||||
|
||||
@ -170,10 +198,67 @@ private:
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag , M , M , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
template< typename M , typename A >
|
||||
KOKKOS_INLINE_FUNCTION static
|
||||
A deduce( void (Functor::*)( WTag const & , M , M , M , M , M , M , M , M , A & ) const );
|
||||
|
||||
using type = decltype( deduce( & F::operator() ) );
|
||||
};
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -47,12 +47,12 @@
|
||||
#include <impl/Kokkos_HostBarrier.hpp>
|
||||
#include <impl/Kokkos_Spinwait.hpp>
|
||||
|
||||
#include <chrono>
|
||||
|
||||
namespace Kokkos { namespace Impl {
|
||||
|
||||
namespace {
|
||||
|
||||
enum : int { HEADER_SIZE = HostBarrier::HEADER / sizeof(uint64_t) };
|
||||
|
||||
inline constexpr int length64( const int nthreads ) noexcept
|
||||
{
|
||||
return (nthreads-1 + sizeof(uint64_t)-1) / sizeof(uint64_t);
|
||||
@ -92,11 +92,11 @@ void rendezvous_initialize( volatile void * buffer
|
||||
else {
|
||||
|
||||
const int n = length64(size);
|
||||
volatile uint64_t * buff = reinterpret_cast<volatile uint64_t *>(buffer) + HEADER_SIZE;
|
||||
volatile uint64_t * buff = reinterpret_cast<volatile uint64_t *>(buffer) + RENDEZVOUS_HEADER/sizeof(uint64_t);
|
||||
|
||||
// wait for other threads to finish initializing
|
||||
for (int i=0; i<n; ++i) {
|
||||
spinwait_until_equal( buff[i], zero64 );
|
||||
root_spinwait_until_equal( buff[i], zero64 );
|
||||
}
|
||||
|
||||
// release the waiting threads
|
||||
@ -146,7 +146,7 @@ bool rendezvous( volatile void * buffer
|
||||
}
|
||||
}
|
||||
else { // rank 0
|
||||
volatile uint64_t * buff = reinterpret_cast<volatile uint64_t *>(buffer) + HEADER_SIZE;
|
||||
volatile uint64_t * buff = reinterpret_cast<volatile uint64_t *>(buffer) + RENDEZVOUS_HEADER/sizeof(uint64_t);
|
||||
const int n = length64(size);
|
||||
|
||||
uint64_t comp = byte_value;
|
||||
@ -168,9 +168,9 @@ bool rendezvous( volatile void * buffer
|
||||
const uint64_t tail = rem ? tmp.value : comp;
|
||||
|
||||
for (int i=0; i<n-1; ++i) {
|
||||
spinwait_until_equal( buff[i], comp );
|
||||
root_spinwait_until_equal( buff[i], comp );
|
||||
}
|
||||
spinwait_until_equal( buff[n-1], tail );
|
||||
root_spinwait_until_equal( buff[n-1], tail );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -402,10 +402,13 @@ fflush(stdout);
|
||||
|
||||
std::pair<int64_t,int64_t> get_work_partition() noexcept
|
||||
{
|
||||
int64_t first = m_work_range.first;
|
||||
int64_t second = m_work_range.second;
|
||||
first *= m_work_chunk;
|
||||
second *= m_work_chunk;
|
||||
return std::pair<int64_t,int64_t>
|
||||
( m_work_range.first * m_work_chunk
|
||||
, m_work_range.second * m_work_chunk < m_work_end
|
||||
? m_work_range.second * m_work_chunk : m_work_end );
|
||||
( first
|
||||
, second < m_work_end ? second : m_work_end );
|
||||
}
|
||||
|
||||
std::pair<int64_t,int64_t> get_work_stealing_chunk() noexcept
|
||||
@ -546,6 +549,7 @@ public:
|
||||
template< class Closure , typename T >
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
void team_broadcast( Closure const & f , T & value , const int source_team_rank) const noexcept
|
||||
#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST )
|
||||
{
|
||||
T volatile * const shared_value = (T*) m_data.team_reduce();
|
||||
|
||||
@ -569,6 +573,9 @@ public:
|
||||
value = *shared_value ;
|
||||
}
|
||||
}
|
||||
#else
|
||||
{ Kokkos::abort("HostThreadTeamMember team_broadcast\n"); }
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// team_reduce( Sum(result) );
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -53,7 +53,7 @@ struct PhysicalLayout {
|
||||
enum LayoutType {Left,Right,Scalar,Error};
|
||||
LayoutType layout_type;
|
||||
int rank;
|
||||
long long int stride[8]; //distance between two neighboring elements in a given dimension
|
||||
long long int stride[9]; //distance between two neighboring elements in a given dimension
|
||||
|
||||
template< class T , class L , class D , class M >
|
||||
PhysicalLayout( const View<T,L,D,M> & view )
|
||||
@ -61,7 +61,7 @@ struct PhysicalLayout {
|
||||
is_same< typename View<T,L,D,M>::array_layout , LayoutRight >::value ? Right : Error ))
|
||||
, rank( view.Rank )
|
||||
{
|
||||
for(int i=0;i<8;i++) stride[i] = 0;
|
||||
for(int i=0;i<9;i++) stride[i] = 0;
|
||||
view.stride( stride );
|
||||
}
|
||||
};
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,13 +35,14 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
*/
|
||||
|
||||
#include <Kokkos_Macros.hpp>
|
||||
|
||||
#if defined(KOKKOS_ENABLE_PROFILING)
|
||||
|
||||
#include <impl/Kokkos_Profiling_Interface.hpp>
|
||||
@ -228,6 +229,8 @@ void initialize() {
|
||||
if(nullptr == firstProfileLibrary) {
|
||||
std::cerr << "Error: Unable to load KokkosP library: " <<
|
||||
profileLibraryName << std::endl;
|
||||
std::cerr << "dlopen(" << profileLibraryName << ", RTLD_NOW | RTLD_GLOBAL) failed with "
|
||||
<< dlerror() << '\n';
|
||||
} else {
|
||||
#ifdef KOKKOS_ENABLE_PROFILING_LOAD_PRINT
|
||||
std::cout << "KokkosP: Library Loaded: " << profileLibraryName << std::endl;
|
||||
@ -336,6 +339,43 @@ void finalize() {
|
||||
}
|
||||
|
||||
#else
|
||||
void KOKKOS_CORE_SRC_IMPL_PROFILING_INTERFACE_PREVENT_LINK_ERROR() {}
|
||||
#endif
|
||||
|
||||
#include <impl/Kokkos_Profiling_Interface.hpp>
|
||||
#include <cstring>
|
||||
|
||||
namespace Kokkos {
|
||||
namespace Profiling {
|
||||
|
||||
bool profileLibraryLoaded() { return false; }
|
||||
|
||||
|
||||
void beginParallelFor(const std::string& , const uint32_t , uint64_t* ) {}
|
||||
void endParallelFor(const uint64_t ) {}
|
||||
void beginParallelScan(const std::string& , const uint32_t , uint64_t* ) {}
|
||||
void endParallelScan(const uint64_t ) {}
|
||||
void beginParallelReduce(const std::string& , const uint32_t , uint64_t* ) {}
|
||||
void endParallelReduce(const uint64_t ) {}
|
||||
|
||||
void pushRegion(const std::string& ) {}
|
||||
void popRegion() {}
|
||||
void createProfileSection(const std::string& , uint32_t* ) {}
|
||||
void startSection(const uint32_t ) {}
|
||||
void stopSection(const uint32_t ) {}
|
||||
void destroyProfileSection(const uint32_t ) {}
|
||||
|
||||
void markEvent(const std::string& ) {}
|
||||
|
||||
void allocateData(const SpaceHandle , const std::string , const void* , const uint64_t ) {}
|
||||
void deallocateData(const SpaceHandle , const std::string , const void* , const uint64_t ) {}
|
||||
|
||||
void beginDeepCopy(const SpaceHandle , const std::string , const void* ,
|
||||
const SpaceHandle , const std::string , const void* ,
|
||||
const uint64_t ) {}
|
||||
void endDeepCopy() {}
|
||||
|
||||
void initialize() {}
|
||||
void finalize() {}
|
||||
|
||||
}} // end namespace Kokkos::Profiling
|
||||
|
||||
#endif
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -45,19 +45,20 @@
|
||||
#define KOKKOSP_INTERFACE_HPP
|
||||
|
||||
#include <Kokkos_Macros.hpp>
|
||||
|
||||
#if defined(KOKKOS_ENABLE_PROFILING)
|
||||
|
||||
#include <cinttypes>
|
||||
#include <cstddef>
|
||||
#include <Kokkos_Core_fwd.hpp>
|
||||
#include <string>
|
||||
#include <cinttypes>
|
||||
|
||||
#include <impl/Kokkos_Profiling_DeviceInfo.hpp>
|
||||
#include <dlfcn.h>
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
|
||||
|
||||
#if defined(KOKKOS_ENABLE_PROFILING)
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include <impl/Kokkos_Profiling_DeviceInfo.hpp>
|
||||
|
||||
#define KOKKOSP_INTERFACE_VERSION 20171029
|
||||
|
||||
namespace Kokkos {
|
||||
@ -128,6 +129,49 @@ void finalize();
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
namespace Kokkos {
|
||||
namespace Profiling {
|
||||
|
||||
struct SpaceHandle {
|
||||
SpaceHandle(const char* space_name);
|
||||
char name[64];
|
||||
};
|
||||
|
||||
|
||||
bool profileLibraryLoaded();
|
||||
|
||||
|
||||
void beginParallelFor(const std::string& , const uint32_t , uint64_t* );
|
||||
void endParallelFor(const uint64_t );
|
||||
void beginParallelScan(const std::string& , const uint32_t , uint64_t* );
|
||||
void endParallelScan(const uint64_t );
|
||||
void beginParallelReduce(const std::string& , const uint32_t , uint64_t* );
|
||||
void endParallelReduce(const uint64_t );
|
||||
|
||||
void pushRegion(const std::string& );
|
||||
void popRegion();
|
||||
void createProfileSection(const std::string& , uint32_t* );
|
||||
void startSection(const uint32_t );
|
||||
void stopSection(const uint32_t );
|
||||
void destroyProfileSection(const uint32_t );
|
||||
|
||||
void markEvent(const std::string& );
|
||||
|
||||
void allocateData(const SpaceHandle , const std::string , const void* , const uint64_t );
|
||||
void deallocateData(const SpaceHandle , const std::string , const void* , const uint64_t );
|
||||
|
||||
void beginDeepCopy(const SpaceHandle , const std::string , const void* ,
|
||||
const SpaceHandle , const std::string , const void* ,
|
||||
const uint64_t );
|
||||
void endDeepCopy();
|
||||
|
||||
void initialize();
|
||||
void finalize();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -46,26 +46,7 @@
|
||||
namespace Kokkos {
|
||||
namespace Impl {
|
||||
|
||||
namespace {
|
||||
|
||||
__thread int t_tracking_enabled = 1;
|
||||
|
||||
}
|
||||
|
||||
int SharedAllocationRecord< void , void >::tracking_enabled()
|
||||
{ return t_tracking_enabled; }
|
||||
|
||||
void SharedAllocationRecord< void , void >::tracking_disable()
|
||||
{
|
||||
t_tracking_enabled = 0;
|
||||
}
|
||||
|
||||
void SharedAllocationRecord< void , void >::tracking_enable()
|
||||
{
|
||||
t_tracking_enabled = 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
__thread int SharedAllocationRecord<void, void>::t_tracking_enabled = 1;
|
||||
|
||||
bool
|
||||
SharedAllocationRecord< void , void >::
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -107,21 +107,24 @@ protected:
|
||||
, size_t arg_alloc_size
|
||||
, function_type arg_dealloc
|
||||
);
|
||||
private:
|
||||
|
||||
static __thread int t_tracking_enabled;
|
||||
|
||||
public:
|
||||
inline std::string get_label() const { return std::string("Unmanaged"); }
|
||||
|
||||
static int tracking_enabled();
|
||||
static int tracking_enabled() { return t_tracking_enabled; }
|
||||
|
||||
/**\brief A host process thread claims and disables the
|
||||
* shared allocation tracking flag.
|
||||
*/
|
||||
static void tracking_disable();
|
||||
static void tracking_disable() { t_tracking_enabled = 0; }
|
||||
|
||||
/**\brief A host process thread releases and enables the
|
||||
* shared allocation tracking flag.
|
||||
*/
|
||||
static void tracking_enable();
|
||||
static void tracking_enable() { t_tracking_enabled = 1; }
|
||||
|
||||
~SharedAllocationRecord() = default ;
|
||||
|
||||
@ -280,6 +283,12 @@ public:
|
||||
|
||||
#endif
|
||||
|
||||
#define KOKKOS_IMPL_SHARED_ALLOCATION_CARRY_RECORD_BITS(rhs, override_tracking) \
|
||||
(((!override_tracking) || (rhs.m_record_bits & DO_NOT_DEREF_FLAG) \
|
||||
|| (!KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_ENABLED)) \
|
||||
? rhs.m_record_bits | DO_NOT_DEREF_FLAG \
|
||||
: rhs.m_record_bits)
|
||||
|
||||
/** \brief Assign a specialized record */
|
||||
inline
|
||||
void assign_allocated_record_to_uninitialized( Record * arg_record )
|
||||
@ -355,11 +364,9 @@ public:
|
||||
KOKKOS_FORCEINLINE_FUNCTION
|
||||
SharedAllocationTracker & operator = ( SharedAllocationTracker && rhs )
|
||||
{
|
||||
// If this is tracking then must decrement
|
||||
KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_DECREMENT
|
||||
// Move and reset RHS to default constructed value.
|
||||
m_record_bits = rhs.m_record_bits ;
|
||||
rhs.m_record_bits = DO_NOT_DEREF_FLAG ;
|
||||
auto swap_tmp = m_record_bits;
|
||||
m_record_bits = rhs.m_record_bits;
|
||||
rhs.m_record_bits = swap_tmp;
|
||||
return *this ;
|
||||
}
|
||||
|
||||
@ -367,9 +374,7 @@ public:
|
||||
|
||||
KOKKOS_FORCEINLINE_FUNCTION
|
||||
SharedAllocationTracker( const SharedAllocationTracker & rhs )
|
||||
: m_record_bits( KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_ENABLED
|
||||
? rhs.m_record_bits
|
||||
: rhs.m_record_bits | DO_NOT_DEREF_FLAG )
|
||||
: m_record_bits( KOKKOS_IMPL_SHARED_ALLOCATION_CARRY_RECORD_BITS(rhs, true) )
|
||||
{
|
||||
KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_INCREMENT
|
||||
}
|
||||
@ -378,10 +383,7 @@ public:
|
||||
KOKKOS_FORCEINLINE_FUNCTION
|
||||
SharedAllocationTracker( const SharedAllocationTracker & rhs
|
||||
, const bool enable_tracking )
|
||||
: m_record_bits( KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_ENABLED
|
||||
&& enable_tracking
|
||||
? rhs.m_record_bits
|
||||
: rhs.m_record_bits | DO_NOT_DEREF_FLAG )
|
||||
: m_record_bits( KOKKOS_IMPL_SHARED_ALLOCATION_CARRY_RECORD_BITS(rhs, enable_tracking) )
|
||||
{ KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_INCREMENT }
|
||||
|
||||
KOKKOS_FORCEINLINE_FUNCTION
|
||||
@ -389,9 +391,7 @@ public:
|
||||
{
|
||||
// If this is tracking then must decrement
|
||||
KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_DECREMENT
|
||||
m_record_bits = KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_ENABLED
|
||||
? rhs.m_record_bits
|
||||
: rhs.m_record_bits | DO_NOT_DEREF_FLAG ;
|
||||
m_record_bits = KOKKOS_IMPL_SHARED_ALLOCATION_CARRY_RECORD_BITS(rhs, true);
|
||||
KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_INCREMENT
|
||||
return *this ;
|
||||
}
|
||||
@ -402,10 +402,7 @@ public:
|
||||
, const bool enable_tracking )
|
||||
{
|
||||
KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_DECREMENT
|
||||
m_record_bits = KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_ENABLED
|
||||
&& enable_tracking
|
||||
? rhs.m_record_bits
|
||||
: rhs.m_record_bits | DO_NOT_DEREF_FLAG ;
|
||||
m_record_bits = KOKKOS_IMPL_SHARED_ALLOCATION_CARRY_RECORD_BITS(rhs, enable_tracking);
|
||||
KOKKOS_IMPL_SHARED_ALLOCATION_TRACKER_INCREMENT
|
||||
}
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -71,45 +71,64 @@ void host_thread_yield( const uint32_t i , const WaitMode mode )
|
||||
|
||||
const int c = Kokkos::Impl::bit_scan_reverse(i);
|
||||
|
||||
if ( sleep_limit < i ) {
|
||||
if ( WaitMode::ROOT != mode ) {
|
||||
if ( sleep_limit < i ) {
|
||||
|
||||
// Attempt to put the thread to sleep for 'c' milliseconds
|
||||
// Attempt to put the thread to sleep for 'c' milliseconds
|
||||
|
||||
#if defined( KOKKOS_ENABLE_STDTHREAD ) || defined( _WIN32 )
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
std::this_thread::yield();
|
||||
std::this_thread::sleep_until( start + std::chrono::nanoseconds( c * 1000 ) );
|
||||
#else
|
||||
timespec req ;
|
||||
req.tv_sec = 0 ;
|
||||
req.tv_nsec = 1000 * c ;
|
||||
nanosleep( &req, nullptr );
|
||||
#endif
|
||||
#if defined( KOKKOS_ENABLE_STDTHREAD ) || defined( _WIN32 )
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
std::this_thread::yield();
|
||||
std::this_thread::sleep_until( start + std::chrono::nanoseconds( c * 1000 ) );
|
||||
#else
|
||||
timespec req ;
|
||||
req.tv_sec = 0 ;
|
||||
req.tv_nsec = 1000 * c ;
|
||||
nanosleep( &req, nullptr );
|
||||
#endif
|
||||
}
|
||||
|
||||
else if ( mode == WaitMode::PASSIVE || yield_limit < i ) {
|
||||
|
||||
// Attempt to yield thread resources to runtime
|
||||
|
||||
#if defined( KOKKOS_ENABLE_STDTHREAD ) || defined( _WIN32 )
|
||||
std::this_thread::yield();
|
||||
#else
|
||||
sched_yield();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined( KOKKOS_ENABLE_ASM )
|
||||
|
||||
else if ( (1u<<4) < i ) {
|
||||
|
||||
// Insert a few no-ops to quiet the thread:
|
||||
|
||||
for ( int k = 0 ; k < c ; ++k ) {
|
||||
#if defined( __amd64 ) || defined( __amd64__ ) || \
|
||||
defined( __x86_64 ) || defined( __x86_64__ )
|
||||
#if !defined( _WIN32 ) /* IS NOT Microsoft Windows */
|
||||
asm volatile( "nop\n" );
|
||||
#else
|
||||
__asm__ __volatile__( "nop\n" );
|
||||
#endif
|
||||
#elif defined(__PPC64__)
|
||||
asm volatile( "nop\n" );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif /* defined( KOKKOS_ENABLE_ASM ) */
|
||||
}
|
||||
|
||||
else if ( mode == WaitMode::PASSIVE || yield_limit < i ) {
|
||||
|
||||
// Attempt to yield thread resources to runtime
|
||||
|
||||
#if defined( KOKKOS_ENABLE_STDTHREAD ) || defined( _WIN32 )
|
||||
std::this_thread::yield();
|
||||
#else
|
||||
sched_yield();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined( KOKKOS_ENABLE_ASM )
|
||||
|
||||
else if ( (1u<<4) < i ) {
|
||||
|
||||
// Insert a few no-ops to quiet the thread:
|
||||
|
||||
else if ( (1u<<3) < i ) {
|
||||
// no-ops for root thread
|
||||
for ( int k = 0 ; k < c ; ++k ) {
|
||||
#if defined( __amd64 ) || defined( __amd64__ ) || \
|
||||
defined( __x86_64 ) || defined( __x86_64__ )
|
||||
#if !defined( _WIN32 ) /* IS NOT Microsoft Windows */
|
||||
defined( __x86_64 ) || defined( __x86_64__ )
|
||||
#if !defined( _WIN32 ) /* IS NOT Microsoft Windows */
|
||||
asm volatile( "nop\n" );
|
||||
#else
|
||||
#else
|
||||
__asm__ __volatile__( "nop\n" );
|
||||
#endif
|
||||
#elif defined(__PPC64__)
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -55,16 +55,38 @@
|
||||
namespace Kokkos {
|
||||
namespace Impl {
|
||||
|
||||
#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST )
|
||||
|
||||
enum class WaitMode : int {
|
||||
ACTIVE // Used for tight loops to keep threads active longest
|
||||
, PASSIVE // Used to quickly yield the thread to quite down the system
|
||||
, ROOT // Never sleep or yield the root thread
|
||||
};
|
||||
|
||||
|
||||
void host_thread_yield( const uint32_t i , const WaitMode mode );
|
||||
|
||||
template <typename T>
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
root_spinwait_while_equal( T const volatile & flag, const T value )
|
||||
{
|
||||
Kokkos::store_fence();
|
||||
uint32_t i = 0 ;
|
||||
while( value == flag ) {
|
||||
host_thread_yield(++i, WaitMode::ROOT);
|
||||
}
|
||||
Kokkos::load_fence();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
root_spinwait_until_equal( T const volatile & flag, const T value )
|
||||
{
|
||||
Kokkos::store_fence();
|
||||
uint32_t i = 0 ;
|
||||
while( value != flag ) {
|
||||
host_thread_yield(++i, WaitMode::ROOT);
|
||||
}
|
||||
Kokkos::load_fence();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
@ -114,30 +136,6 @@ yield_until_equal( T const volatile & flag, const T value )
|
||||
Kokkos::load_fence();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
template <typename T>
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
spinwait_while_equal( T const volatile & flag, const T value ) {}
|
||||
|
||||
template <typename T>
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
yield_while_equal( T const volatile & flag, const T value ) {}
|
||||
|
||||
template <typename T>
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
spinwait_until_equal( T const volatile & flag, const T value ) {}
|
||||
|
||||
template <typename T>
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
typename std::enable_if< std::is_integral<T>::value, void>::type
|
||||
yield_until_equal( T const volatile & flag, const T value ) {}
|
||||
|
||||
#endif
|
||||
|
||||
} /* namespace Impl */
|
||||
} /* namespace Kokkos */
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -180,7 +180,7 @@ public:
|
||||
TaskBase & operator = ( TaskBase && ) = delete ;
|
||||
TaskBase & operator = ( const TaskBase & ) = delete ;
|
||||
|
||||
KOKKOS_INLINE_FUNCTION ~TaskBase() = default ;
|
||||
KOKKOS_INLINE_FUNCTION_DEFAULTED ~TaskBase() = default ;
|
||||
|
||||
KOKKOS_INLINE_FUNCTION constexpr
|
||||
TaskBase()
|
||||
@ -518,15 +518,22 @@ public:
|
||||
member_type * const member = reinterpret_cast< member_type * >( exec );
|
||||
result_type * const result = TaskResult< result_type >::ptr( task );
|
||||
|
||||
task->apply_functor( member , result );
|
||||
|
||||
// Task may be serial or team.
|
||||
// If team then must synchronize before querying if respawn was requested.
|
||||
// If team then only one thread calls destructor.
|
||||
|
||||
const bool only_one_thread =
|
||||
#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA)
|
||||
0 == threadIdx.x && 0 == threadIdx.y ;
|
||||
#else
|
||||
0 == member->team_rank();
|
||||
#endif
|
||||
|
||||
task->apply_functor( member , result );
|
||||
|
||||
member->team_barrier();
|
||||
|
||||
if ( 0 == member->team_rank() && !(task->requested_respawn()) ) {
|
||||
if ( only_one_thread && !(task->requested_respawn()) ) {
|
||||
// Did not respawn, destroy the functor to free memory.
|
||||
static_cast<functor_type*>(task)->~functor_type();
|
||||
// Cannot destroy and deallocate the task until its dependences
|
||||
@ -537,7 +544,7 @@ public:
|
||||
// Constructor for runnable task
|
||||
KOKKOS_INLINE_FUNCTION constexpr
|
||||
TaskBase( FunctorType && arg_functor )
|
||||
: root_type() , functor_type( std::move(arg_functor) ) {}
|
||||
: root_type() , functor_type( arg_functor ) {}
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
~TaskBase() {}
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -655,7 +655,9 @@ void TaskQueue< ExecSpace >::complete
|
||||
schedule_runnable( x );
|
||||
}
|
||||
else {
|
||||
#if !defined( __HCC_ACCELERATOR__ )
|
||||
schedule_aggregate( x );
|
||||
#endif
|
||||
}
|
||||
|
||||
x = next ;
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
@ -361,7 +361,8 @@ struct SubviewExtents {
|
||||
private:
|
||||
|
||||
// Cannot declare zero-length arrays
|
||||
enum { InternalRangeRank = RangeRank ? RangeRank : 1u };
|
||||
// '+' is used to silence GCC 7.2.0 -Wduplicated-branches warning when RangeRank=1
|
||||
enum { InternalRangeRank = RangeRank ? RangeRank : +1u };
|
||||
|
||||
size_t m_begin[ DomainRank ];
|
||||
size_t m_length[ InternalRangeRank ];
|
||||
@ -2825,23 +2826,26 @@ public:
|
||||
, ( (Kokkos::Impl::ViewCtorProp<void,std::string> const &) arg_prop ).value
|
||||
, alloc_size );
|
||||
|
||||
// Only set the the pointer and initialize if the allocation is non-zero.
|
||||
// May be zero if one of the dimensions is zero.
|
||||
#ifdef KOKKOS_ENABLE_DEPRECATED_CODE
|
||||
if ( alloc_size ) {
|
||||
#endif
|
||||
m_handle = handle_type( reinterpret_cast< pointer_type >( record->data() ) );
|
||||
#ifdef KOKKOS_ENABLE_DEPRECATED_CODE
|
||||
}
|
||||
#endif
|
||||
|
||||
m_handle = handle_type( reinterpret_cast< pointer_type >( record->data() ) );
|
||||
// Only initialize if the allocation is non-zero.
|
||||
// May be zero if one of the dimensions is zero.
|
||||
if ( alloc_size && alloc_prop::initialize ) {
|
||||
// Assume destruction is only required when construction is requested.
|
||||
// The ViewValueFunctor has both value construction and destruction operators.
|
||||
record->m_destroy = functor_type( ( (Kokkos::Impl::ViewCtorProp<void,execution_space> const &) arg_prop).value
|
||||
, (value_type *) m_handle
|
||||
, m_offset.span()
|
||||
);
|
||||
|
||||
if ( alloc_prop::initialize ) {
|
||||
// Assume destruction is only required when construction is requested.
|
||||
// The ViewValueFunctor has both value construction and destruction operators.
|
||||
record->m_destroy = functor_type( ( (Kokkos::Impl::ViewCtorProp<void,execution_space> const &) arg_prop).value
|
||||
, (value_type *) m_handle
|
||||
, m_offset.span()
|
||||
);
|
||||
|
||||
// Construct values
|
||||
record->m_destroy.construct_shared_allocation();
|
||||
}
|
||||
// Construct values
|
||||
record->m_destroy.construct_shared_allocation();
|
||||
}
|
||||
|
||||
return record ;
|
||||
@ -3191,10 +3195,8 @@ template< class MapType >
|
||||
struct OperatorBoundsErrorOnDevice< MapType, true > {
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
static void run(MapType const& map) {
|
||||
char const* const user_alloc_start = reinterpret_cast<char const*>(map.data());
|
||||
char const* const header_start = user_alloc_start - sizeof(SharedAllocationHeader);
|
||||
SharedAllocationHeader const* const header =
|
||||
reinterpret_cast<SharedAllocationHeader const*>(header_start);
|
||||
SharedAllocationHeader::get_header((void*)(map.data()));
|
||||
char const* const label = header->label();
|
||||
enum { LEN = 128 };
|
||||
char msg[LEN];
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
// 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 H. Carter Edwards (hcedwar@sandia.gov)
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
|
||||
Reference in New Issue
Block a user