Skip to content

Commit 1320300

Browse files
committed
Add DAXPY_ATOMIC, formatting, in REDUCE3, Kokkos::min, Kokkos::max
1 parent 0d8b139 commit 1320300

6 files changed

Lines changed: 112 additions & 62 deletions

File tree

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ Kokkos_ENABLE_HIP variable to ON")
155155

156156
if(ENABLE_TARGET_OPENMP)
157157
set(Kokkos_ENABLE_OPENMPTARGET ON CACHE BOOL "Docstring")
158-
set(RAJA_ENABLE_TARGET_OPENMP ON CACHE BOOL "Docstring")
159158
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
160159
if(NOT EXPERIMENTAL_BUILD)
161160
message(FATAL_ERROR "Kokkos builds with OpenMPTarget require a Debug build to succeed at the moment. Rebuild with CMAKE_BUILD_TYPE=Debug. If you're a compiler developer, rebuild with -DEXPERIMENTAL_BUILD=ON")

src/basic-kokkos/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ blt_add_library(
2121
NESTED_INIT-Kokkos.cpp
2222
REDUCE3_INT-Kokkos.cpp
2323
TRAP_INT-Kokkos.cpp
24+
DAXPY_ATOMIC-Kokkos.cpp
2425
DEPENDS_ON common ${RAJA_PERFSUITE_DEPENDS}
2526
)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
2+
// Copyright (c) 2017-21, Lawrence Livermore National Security, LLC
3+
// and RAJA Performance Suite project contributors.
4+
// See the RAJAPerf/LICENSE file for details.
5+
//
6+
// SPDX-License-Identifier: (BSD-3-Clause)
7+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
8+
9+
#include "DAXPY_ATOMIC.hpp"
10+
#include "common/KokkosViewUtils.hpp"
11+
#include <iostream>
12+
13+
// Delete me
14+
// For de-bugging:
15+
#include "RAJA/RAJA.hpp"
16+
17+
namespace rajaperf {
18+
namespace basic {
19+
20+
void DAXPY_ATOMIC::runKokkosVariant(VariantID vid) {
21+
22+
const Index_type run_reps = getRunReps();
23+
const Index_type ibegin = 0;
24+
const Index_type iend = getActualProblemSize();
25+
26+
DAXPY_ATOMIC_DATA_SETUP;
27+
//
28+
// Kokkos Views to wrap pointers declared in DAXPY_ATOMIC.hpp
29+
//
30+
31+
auto x_view = getViewFromPointer(x, iend);
32+
auto y_view = getViewFromPointer(y, iend);
33+
34+
switch (vid) {
35+
36+
case Kokkos_Lambda: {
37+
38+
Kokkos::fence();
39+
startTimer();
40+
41+
for (RepIndex_type irep = 0; irep < run_reps; ++irep) {
42+
43+
Kokkos::parallel_for(
44+
"DAXPY_ATOMIC_Kokkos Kokkos_Lambda",
45+
Kokkos::RangePolicy<Kokkos::DefaultExecutionSpace>(ibegin, iend),
46+
KOKKOS_LAMBDA(Index_type i) {
47+
Kokkos::atomic_add(&y_view[i], a * x_view[i]);
48+
});
49+
}
50+
51+
Kokkos::fence();
52+
stopTimer();
53+
54+
break;
55+
}
56+
57+
default: {
58+
getCout() << "\n DAXPY_ATOMIC : Unknown variant id = " << vid << std::endl;
59+
}
60+
}
61+
62+
moveDataToHostFromKokkosView(x, x_view, iend);
63+
moveDataToHostFromKokkosView(y, y_view, iend);
64+
}
65+
66+
} // end namespace basic
67+
} // end namespace rajaperf

src/basic-kokkos/REDUCE3_INT-Kokkos.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,11 @@ void REDUCE3_INT::runKokkosVariant(VariantID vid) {
3333
Kokkos::fence();
3434
startTimer();
3535
for (RepIndex_type irep = 0; irep < run_reps; ++irep) {
36-
// The values below are initilized elsewhere by RPS
37-
// These variables were declared to Kokkos-ify the parallel_reduce
38-
// construct:
3936

40-
// If the RAJA OPENMP TARGET OPTION IS NOT DEFINED
41-
//#ifndef RAJA_ENABLE_TARGET_OPENMP
4237
Int_type max_value = m_vmax_init;
4338
Int_type min_value = m_vmin_init;
4439
Int_type sum = m_vsum_init;
45-
40+
// ADL: argument-dependent look up here
4641
parallel_reduce(
4742
"REDUCE3-Kokkos Kokkos_Lambda",
4843
Kokkos::RangePolicy<Kokkos::DefaultExecutionSpace>(ibegin, iend),
@@ -58,10 +53,10 @@ void REDUCE3_INT::runKokkosVariant(VariantID vid) {
5853
Kokkos::Max<Int_type>(max_value), Kokkos::Min<Int_type>(min_value),
5954
sum);
6055
m_vsum += static_cast<Int_type>(sum);
61-
m_vmin = Kokkos::Experimental::min(m_vmin, static_cast<Int_type>(min_value));
62-
m_vmax = Kokkos::Experimental::max(m_vmax, static_cast<Int_type>(max_value));
63-
64-
//#endif
56+
m_vmin =
57+
Kokkos::Experimental::min(m_vmin, static_cast<Int_type>(min_value));
58+
m_vmax =
59+
Kokkos::Experimental::max(m_vmax, static_cast<Int_type>(max_value));
6560
}
6661
Kokkos::fence();
6762
stopTimer();

src/basic/DAXPY_ATOMIC.cpp

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,66 +12,60 @@
1212

1313
#include "common/DataUtils.hpp"
1414

15-
namespace rajaperf
16-
{
17-
namespace basic
18-
{
15+
namespace rajaperf {
16+
namespace basic {
1917

20-
21-
DAXPY_ATOMIC::DAXPY_ATOMIC(const RunParams& params)
22-
: KernelBase(rajaperf::Basic_DAXPY_ATOMIC, params)
23-
{
18+
DAXPY_ATOMIC::DAXPY_ATOMIC(const RunParams &params)
19+
: KernelBase(rajaperf::Basic_DAXPY_ATOMIC, params) {
2420
setDefaultProblemSize(1000000);
2521
setDefaultReps(500);
2622

27-
setActualProblemSize( getTargetProblemSize() );
23+
setActualProblemSize(getTargetProblemSize());
2824

29-
setItsPerRep( getActualProblemSize() );
25+
setItsPerRep(getActualProblemSize());
3026
setKernelsPerRep(1);
31-
setBytesPerRep( (1*sizeof(Real_type) + 2*sizeof(Real_type)) * getActualProblemSize() );
27+
setBytesPerRep((1 * sizeof(Real_type) + 2 * sizeof(Real_type)) *
28+
getActualProblemSize());
3229
setFLOPsPerRep(2 * getActualProblemSize());
3330

3431
setUsesFeature(Forall);
3532

36-
setVariantDefined( Base_Seq );
37-
setVariantDefined( Lambda_Seq );
38-
setVariantDefined( RAJA_Seq );
33+
setVariantDefined(Base_Seq);
34+
setVariantDefined(Lambda_Seq);
35+
setVariantDefined(RAJA_Seq);
3936

40-
setVariantDefined( Base_OpenMP );
41-
setVariantDefined( Lambda_OpenMP );
42-
setVariantDefined( RAJA_OpenMP );
37+
setVariantDefined(Base_OpenMP);
38+
setVariantDefined(Lambda_OpenMP);
39+
setVariantDefined(RAJA_OpenMP);
4340

44-
setVariantDefined( Base_OpenMPTarget );
45-
setVariantDefined( RAJA_OpenMPTarget );
41+
setVariantDefined(Base_OpenMPTarget);
42+
setVariantDefined(RAJA_OpenMPTarget);
4643

47-
setVariantDefined( Base_CUDA );
48-
setVariantDefined( Lambda_CUDA );
49-
setVariantDefined( RAJA_CUDA );
44+
setVariantDefined(Base_CUDA);
45+
setVariantDefined(Lambda_CUDA);
46+
setVariantDefined(RAJA_CUDA);
5047

51-
setVariantDefined( Base_HIP );
52-
setVariantDefined( Lambda_HIP );
53-
setVariantDefined( RAJA_HIP );
54-
}
48+
setVariantDefined(Base_HIP);
49+
setVariantDefined(Lambda_HIP);
50+
setVariantDefined(RAJA_HIP);
5551

56-
DAXPY_ATOMIC::~DAXPY_ATOMIC()
57-
{
52+
setVariantDefined(Kokkos_Lambda);
5853
}
5954

60-
void DAXPY_ATOMIC::setUp(VariantID vid)
61-
{
55+
DAXPY_ATOMIC::~DAXPY_ATOMIC() {}
56+
57+
void DAXPY_ATOMIC::setUp(VariantID vid) {
6258
allocAndInitDataConst(m_y, getActualProblemSize(), 0.0, vid);
6359
allocAndInitData(m_x, getActualProblemSize(), vid);
6460
initData(m_a);
6561
}
6662

67-
void DAXPY_ATOMIC::updateChecksum(VariantID vid)
68-
{
63+
void DAXPY_ATOMIC::updateChecksum(VariantID vid) {
6964
checksum[vid] += calcChecksum(m_y, getActualProblemSize());
7065
}
7166

72-
void DAXPY_ATOMIC::tearDown(VariantID vid)
73-
{
74-
(void) vid;
67+
void DAXPY_ATOMIC::tearDown(VariantID vid) {
68+
(void)vid;
7569
deallocData(m_x);
7670
deallocData(m_y);
7771
}

src/basic/DAXPY_ATOMIC.hpp

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,32 +17,25 @@
1717
#ifndef RAJAPerf_Basic_DAXPY_ATOMIC_HPP
1818
#define RAJAPerf_Basic_DAXPY_ATOMIC_HPP
1919

20-
#define DAXPY_ATOMIC_DATA_SETUP \
21-
Real_ptr x = m_x; \
22-
Real_ptr y = m_y; \
20+
#define DAXPY_ATOMIC_DATA_SETUP \
21+
Real_ptr x = m_x; \
22+
Real_ptr y = m_y; \
2323
Real_type a = m_a;
2424

25-
#define DAXPY_ATOMIC_BODY \
26-
y[i] += a * x[i] ;
27-
28-
#define DAXPY_ATOMIC_RAJA_BODY(policy) \
29-
RAJA::atomicAdd<policy>(&y[i], a * x[i]);
25+
#define DAXPY_ATOMIC_BODY y[i] += a * x[i];
3026

27+
#define DAXPY_ATOMIC_RAJA_BODY(policy) RAJA::atomicAdd<policy>(&y[i], a * x[i]);
3128

3229
#include "common/KernelBase.hpp"
3330

34-
namespace rajaperf
35-
{
31+
namespace rajaperf {
3632
class RunParams;
3733

38-
namespace basic
39-
{
34+
namespace basic {
4035

41-
class DAXPY_ATOMIC : public KernelBase
42-
{
36+
class DAXPY_ATOMIC : public KernelBase {
4337
public:
44-
45-
DAXPY_ATOMIC(const RunParams& params);
38+
DAXPY_ATOMIC(const RunParams &params);
4639

4740
~DAXPY_ATOMIC();
4841

@@ -55,6 +48,7 @@ class DAXPY_ATOMIC : public KernelBase
5548
void runCudaVariant(VariantID vid);
5649
void runHipVariant(VariantID vid);
5750
void runOpenMPTargetVariant(VariantID vid);
51+
void runKokkosVariant(VariantID vid);
5852

5953
private:
6054
Real_ptr m_x;

0 commit comments

Comments
 (0)