Update Kokkos library in LAMMPS to v2.7.24
This commit is contained in:
@ -318,6 +318,24 @@ struct TestMDRange_2D {
|
||||
|
||||
ASSERT_EQ( sum, 2 * (N0 - s0) * (N1 - s1) );
|
||||
}
|
||||
// Test with reducers - scalar + label
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2>, Kokkos::IndexType<int> > range_type;
|
||||
int s0 = 1;
|
||||
int s1 = 1;
|
||||
range_type range( {{ s0, s1 }}, {{ N0, N1 }}, {{ 3, 3 }} );
|
||||
|
||||
TestMDRange_2D functor( N0, N1 );
|
||||
|
||||
parallel_for( "rank2-parfor-label", range, functor );
|
||||
|
||||
value_type sum = 0.0;
|
||||
Kokkos::Sum< value_type > reducer_scalar( sum );
|
||||
|
||||
parallel_reduce( "rank2-reducer-label", range, functor, reducer_scalar );
|
||||
|
||||
ASSERT_EQ( sum, 2 * (N0 - s0) * (N1 - s1) );
|
||||
}
|
||||
// Test with reducers - scalar view
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2>, Kokkos::IndexType<int> > range_type;
|
||||
@ -337,7 +355,31 @@ struct TestMDRange_2D {
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 );
|
||||
}
|
||||
// Test Min reducer with lambda
|
||||
#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA )
|
||||
#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION )
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2>, Kokkos::IndexType<int> > range_type;
|
||||
range_type range( {{ 1, 1 }}, {{ N0, N1 }}, {{ 3, 3 }} );
|
||||
|
||||
Kokkos::View< double**, ExecSpace > v_in("v_in", N0, N1 );
|
||||
|
||||
parallel_for( "rank2-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j ) {
|
||||
v_in( i , j ) = (i+1) * (j+1) ;
|
||||
});
|
||||
|
||||
double min;
|
||||
Kokkos::Min< double > reducer_scalar( min );
|
||||
|
||||
parallel_reduce( "rank2-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, double& min_val ) {
|
||||
min_val = fmin( v_in(i,j), min_val );
|
||||
}
|
||||
, reducer_scalar);
|
||||
|
||||
ASSERT_EQ( min, 4.0 );
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
// Tagged operator test
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<2, Iterate::Default, Iterate::Default >, Kokkos::IndexType<int>, InitTag > range_type;
|
||||
@ -858,6 +900,22 @@ struct TestMDRange_3D {
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 );
|
||||
}
|
||||
// Test with reducers - scalar + label
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<3>, Kokkos::IndexType<int> > range_type;
|
||||
range_type range( {{ 0, 0, 0 }}, {{ N0, N1, N2 }}, {{ 3, 3, 3 }} );
|
||||
|
||||
TestMDRange_3D functor( N0, N1, N2 );
|
||||
|
||||
parallel_for( "rank3-parfor-label", range, functor );
|
||||
|
||||
value_type sum = 0.0;
|
||||
Kokkos::Sum< value_type > reducer_scalar( sum );
|
||||
|
||||
parallel_reduce( "rank3-reducer-label", range, functor, reducer_scalar );
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 );
|
||||
}
|
||||
// Test with reducers - scalar view
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<3>, Kokkos::IndexType<int> > range_type;
|
||||
@ -877,6 +935,31 @@ struct TestMDRange_3D {
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 );
|
||||
}
|
||||
// Test Min reducer with lambda
|
||||
#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA )
|
||||
#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION )
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<3>, Kokkos::IndexType<int> > range_type;
|
||||
|
||||
range_type range( {{ 1, 1, 1 }}, {{ N0, N1, N2 }}, {{ 3, 3, 3 }} );
|
||||
|
||||
Kokkos::View< double***, ExecSpace > v_in("v_in", N0, N1, N2 );
|
||||
|
||||
parallel_for( "rank3-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k ) {
|
||||
v_in( i, j, k ) = (i+1) * (j+1) * (k+1) ;
|
||||
});
|
||||
|
||||
double min;
|
||||
|
||||
parallel_reduce("rank3-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, double& min_val ) {
|
||||
min_val = (v_in(i,j,k) < min_val) ? v_in(i,j,k) : min_val;
|
||||
}
|
||||
, Kokkos::Min<double>(min) );
|
||||
|
||||
ASSERT_EQ( min, 8.0 );
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Tagged operator test
|
||||
{
|
||||
@ -1382,6 +1465,23 @@ struct TestMDRange_4D {
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 );
|
||||
}
|
||||
|
||||
// Test with reducers - scalar + label
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4>, Kokkos::IndexType<int> > range_type;
|
||||
range_type range( {{ 0, 0, 0, 0 }}, {{ N0, N1, N2, N3 }}, {{ 3, 3, 3, 3 }} );
|
||||
|
||||
TestMDRange_4D functor( N0, N1, N2, N3 );
|
||||
|
||||
parallel_for( "rank4-parfor-label", range, functor );
|
||||
|
||||
value_type sum = 0.0;
|
||||
Kokkos::Sum< value_type > reducer_scalar( sum );
|
||||
|
||||
parallel_reduce( "rank4-reducer-label", range, functor, reducer_scalar );
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 );
|
||||
}
|
||||
|
||||
// Test with reducers - scalar view
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4>, Kokkos::IndexType<int> > range_type;
|
||||
@ -1402,6 +1502,32 @@ struct TestMDRange_4D {
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 );
|
||||
}
|
||||
|
||||
// Test Min reducer with lambda
|
||||
#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA )
|
||||
#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION )
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4>, Kokkos::IndexType<int> > range_type;
|
||||
|
||||
range_type range( {{ 1, 1, 1, 1 }}, {{ N0, N1, N2, N3 }}, {{ 3, 3, 3, 3 }} );
|
||||
|
||||
Kokkos::View< double****, ExecSpace > v_in("v_in", N0, N1, N2, N3 );
|
||||
|
||||
parallel_for( "rank4-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l ) {
|
||||
v_in( i, j, k, l ) = (i+1) * (j+1) * (k+1) * (l+1) ;
|
||||
});
|
||||
|
||||
double min;
|
||||
|
||||
parallel_reduce("rank4-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, double& min_val ) {
|
||||
min_val = (v_in(i,j,k,l) < min_val) ? v_in(i,j,k,l) : min_val;
|
||||
}
|
||||
, Kokkos::Min<double>(min) );
|
||||
|
||||
ASSERT_EQ( min, 16.0 );
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Tagged operator test
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<4, Iterate::Default, Iterate::Default >, Kokkos::IndexType<int>, InitTag > range_type;
|
||||
@ -1926,6 +2052,23 @@ struct TestMDRange_5D {
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 );
|
||||
}
|
||||
|
||||
// Test with reducers - scalar + label
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5>, Kokkos::IndexType<int> > range_type;
|
||||
range_type range( {{ 0, 0, 0, 0, 0 }}, {{ N0, N1, N2, N3, N4 }}, {{ 3, 3, 3, 3, 3 }} );
|
||||
|
||||
TestMDRange_5D functor( N0, N1, N2, N3, N4 );
|
||||
|
||||
parallel_for( "rank5-parfor-label", range, functor );
|
||||
|
||||
value_type sum = 0.0;
|
||||
Kokkos::Sum< value_type > reducer_scalar( sum );
|
||||
|
||||
parallel_reduce( "rank5-reducer-label", range, functor, reducer_scalar );
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 );
|
||||
}
|
||||
|
||||
// Test with reducers - scalar view
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5>, Kokkos::IndexType<int> > range_type;
|
||||
@ -1946,6 +2089,32 @@ struct TestMDRange_5D {
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 );
|
||||
}
|
||||
|
||||
// Test Min reducer with lambda
|
||||
#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA )
|
||||
#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION )
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5>, Kokkos::IndexType<int> > range_type;
|
||||
|
||||
range_type range( {{ 1, 1, 1, 1, 1 }}, {{ N0, N1, N2, N3, N4 }}, {{ 3, 3, 3, 2, 2 }} );
|
||||
|
||||
Kokkos::View< double*****, ExecSpace > v_in("v_in", N0, N1, N2, N3, N4 );
|
||||
|
||||
parallel_for( "rank5-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m ) {
|
||||
v_in( i, j, k, l, m ) = (i+1) * (j+1) * (k+1) * (l+1) * (m+1) ;
|
||||
});
|
||||
|
||||
double min;
|
||||
|
||||
parallel_reduce("rank5-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m, double& min_val ) {
|
||||
min_val = (v_in(i,j,k,l,m) < min_val) ? v_in(i,j,k,l,m) : min_val;
|
||||
}
|
||||
, Kokkos::Min<double>(min) );
|
||||
|
||||
ASSERT_EQ( min, 32.0 );
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Tagged operator test
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<5, Iterate::Default, Iterate::Default >, Kokkos::IndexType<int>, InitTag > range_type;
|
||||
@ -2401,6 +2570,23 @@ struct TestMDRange_6D {
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 );
|
||||
}
|
||||
|
||||
// Test with reducers - scalar + label
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6>, Kokkos::IndexType<int> > range_type;
|
||||
range_type range( {{ 0, 0, 0, 0, 0, 0 }}, {{ N0, N1, N2, N3, N4, N5 }}, {{ 3, 3, 3, 3, 3, 2 }} );
|
||||
|
||||
TestMDRange_6D functor( N0, N1, N2, N3, N4, N5 );
|
||||
|
||||
parallel_for( "rank6-parfor-label", range, functor );
|
||||
|
||||
value_type sum = 0.0;
|
||||
Kokkos::Sum< value_type > reducer_scalar( sum );
|
||||
|
||||
parallel_reduce( "rank6-reducer-label", range, functor, reducer_scalar );
|
||||
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 );
|
||||
}
|
||||
|
||||
// Test with reducers - scalar view
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6>, Kokkos::IndexType<int> > range_type;
|
||||
@ -2421,6 +2607,32 @@ struct TestMDRange_6D {
|
||||
ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 );
|
||||
}
|
||||
|
||||
// Test Min reducer with lambda
|
||||
#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA )
|
||||
#if !defined(KOKKOS_ENABLE_CUDA) || ( 8000 <= CUDA_VERSION )
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6>, Kokkos::IndexType<int> > range_type;
|
||||
|
||||
range_type range( {{ 1, 1, 1, 1, 1, 1 }}, {{ N0, N1, N2, N3, N4, N5 }}, {{ 3, 3, 3, 2, 2, 1 }} );
|
||||
|
||||
Kokkos::View< double******, ExecSpace > v_in("v_in", N0, N1, N2, N3, N4, N5 );
|
||||
|
||||
parallel_for( "rank6-init-lambda", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m, const int n ) {
|
||||
v_in( i, j, k, l, m, n ) = (i+1) * (j+1) * (k+1) * (l+1) * (m+1) * (n+1) ;
|
||||
});
|
||||
|
||||
double min;
|
||||
|
||||
parallel_reduce("rank6-min-reducer", range, KOKKOS_LAMBDA ( const int i, const int j, const int k, const int l, const int m, const int n, double& min_val ) {
|
||||
min_val = (v_in(i,j,k,l,m,n) < min_val) ? v_in(i,j,k,l,m,n) : min_val;
|
||||
}
|
||||
, Kokkos::Min<double>(min) );
|
||||
|
||||
ASSERT_EQ( min, 64.0 );
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Tagged operator test
|
||||
{
|
||||
typedef typename Kokkos::MDRangePolicy< ExecSpace, Kokkos::Rank<6, Iterate::Default, Iterate::Default >, Kokkos::IndexType<int>, InitTag > range_type;
|
||||
|
||||
Reference in New Issue
Block a user