Skip to content

Commit

Permalink
Add DAXPY_ATOMIC, formatting, in REDUCE3, Kokkos::min, Kokkos::max
Browse files Browse the repository at this point in the history
  • Loading branch information
ajpowelsnl committed Feb 7, 2022
1 parent 0d8b139 commit 1320300
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 62 deletions.
1 change: 0 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ Kokkos_ENABLE_HIP variable to ON")

if(ENABLE_TARGET_OPENMP)
set(Kokkos_ENABLE_OPENMPTARGET ON CACHE BOOL "Docstring")
set(RAJA_ENABLE_TARGET_OPENMP ON CACHE BOOL "Docstring")
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
if(NOT EXPERIMENTAL_BUILD)
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")
Expand Down
1 change: 1 addition & 0 deletions src/basic-kokkos/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ blt_add_library(
NESTED_INIT-Kokkos.cpp
REDUCE3_INT-Kokkos.cpp
TRAP_INT-Kokkos.cpp
DAXPY_ATOMIC-Kokkos.cpp
DEPENDS_ON common ${RAJA_PERFSUITE_DEPENDS}
)
67 changes: 67 additions & 0 deletions src/basic-kokkos/DAXPY_ATOMIC-Kokkos.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// Copyright (c) 2017-21, Lawrence Livermore National Security, LLC
// and RAJA Performance Suite project contributors.
// See the RAJAPerf/LICENSE file for details.
//
// SPDX-License-Identifier: (BSD-3-Clause)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

#include "DAXPY_ATOMIC.hpp"
#include "common/KokkosViewUtils.hpp"
#include <iostream>

// Delete me
// For de-bugging:
#include "RAJA/RAJA.hpp"

namespace rajaperf {
namespace basic {

void DAXPY_ATOMIC::runKokkosVariant(VariantID vid) {

const Index_type run_reps = getRunReps();
const Index_type ibegin = 0;
const Index_type iend = getActualProblemSize();

DAXPY_ATOMIC_DATA_SETUP;
//
// Kokkos Views to wrap pointers declared in DAXPY_ATOMIC.hpp
//

auto x_view = getViewFromPointer(x, iend);
auto y_view = getViewFromPointer(y, iend);

switch (vid) {

case Kokkos_Lambda: {

Kokkos::fence();
startTimer();

for (RepIndex_type irep = 0; irep < run_reps; ++irep) {

Kokkos::parallel_for(
"DAXPY_ATOMIC_Kokkos Kokkos_Lambda",
Kokkos::RangePolicy<Kokkos::DefaultExecutionSpace>(ibegin, iend),
KOKKOS_LAMBDA(Index_type i) {
Kokkos::atomic_add(&y_view[i], a * x_view[i]);
});
}

Kokkos::fence();
stopTimer();

break;
}

default: {
getCout() << "\n DAXPY_ATOMIC : Unknown variant id = " << vid << std::endl;
}
}

moveDataToHostFromKokkosView(x, x_view, iend);
moveDataToHostFromKokkosView(y, y_view, iend);
}

} // end namespace basic
} // end namespace rajaperf
15 changes: 5 additions & 10 deletions src/basic-kokkos/REDUCE3_INT-Kokkos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,11 @@ void REDUCE3_INT::runKokkosVariant(VariantID vid) {
Kokkos::fence();
startTimer();
for (RepIndex_type irep = 0; irep < run_reps; ++irep) {
// The values below are initilized elsewhere by RPS
// These variables were declared to Kokkos-ify the parallel_reduce
// construct:

// If the RAJA OPENMP TARGET OPTION IS NOT DEFINED
//#ifndef RAJA_ENABLE_TARGET_OPENMP
Int_type max_value = m_vmax_init;
Int_type min_value = m_vmin_init;
Int_type sum = m_vsum_init;

// ADL: argument-dependent look up here
parallel_reduce(
"REDUCE3-Kokkos Kokkos_Lambda",
Kokkos::RangePolicy<Kokkos::DefaultExecutionSpace>(ibegin, iend),
Expand All @@ -58,10 +53,10 @@ void REDUCE3_INT::runKokkosVariant(VariantID vid) {
Kokkos::Max<Int_type>(max_value), Kokkos::Min<Int_type>(min_value),
sum);
m_vsum += static_cast<Int_type>(sum);
m_vmin = Kokkos::Experimental::min(m_vmin, static_cast<Int_type>(min_value));
m_vmax = Kokkos::Experimental::max(m_vmax, static_cast<Int_type>(max_value));

//#endif
m_vmin =
Kokkos::Experimental::min(m_vmin, static_cast<Int_type>(min_value));
m_vmax =
Kokkos::Experimental::max(m_vmax, static_cast<Int_type>(max_value));
}
Kokkos::fence();
stopTimer();
Expand Down
64 changes: 29 additions & 35 deletions src/basic/DAXPY_ATOMIC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,66 +12,60 @@

#include "common/DataUtils.hpp"

namespace rajaperf
{
namespace basic
{
namespace rajaperf {
namespace basic {


DAXPY_ATOMIC::DAXPY_ATOMIC(const RunParams& params)
: KernelBase(rajaperf::Basic_DAXPY_ATOMIC, params)
{
DAXPY_ATOMIC::DAXPY_ATOMIC(const RunParams &params)
: KernelBase(rajaperf::Basic_DAXPY_ATOMIC, params) {
setDefaultProblemSize(1000000);
setDefaultReps(500);

setActualProblemSize( getTargetProblemSize() );
setActualProblemSize(getTargetProblemSize());

setItsPerRep( getActualProblemSize() );
setItsPerRep(getActualProblemSize());
setKernelsPerRep(1);
setBytesPerRep( (1*sizeof(Real_type) + 2*sizeof(Real_type)) * getActualProblemSize() );
setBytesPerRep((1 * sizeof(Real_type) + 2 * sizeof(Real_type)) *
getActualProblemSize());
setFLOPsPerRep(2 * getActualProblemSize());

setUsesFeature(Forall);

setVariantDefined( Base_Seq );
setVariantDefined( Lambda_Seq );
setVariantDefined( RAJA_Seq );
setVariantDefined(Base_Seq);
setVariantDefined(Lambda_Seq);
setVariantDefined(RAJA_Seq);

setVariantDefined( Base_OpenMP );
setVariantDefined( Lambda_OpenMP );
setVariantDefined( RAJA_OpenMP );
setVariantDefined(Base_OpenMP);
setVariantDefined(Lambda_OpenMP);
setVariantDefined(RAJA_OpenMP);

setVariantDefined( Base_OpenMPTarget );
setVariantDefined( RAJA_OpenMPTarget );
setVariantDefined(Base_OpenMPTarget);
setVariantDefined(RAJA_OpenMPTarget);

setVariantDefined( Base_CUDA );
setVariantDefined( Lambda_CUDA );
setVariantDefined( RAJA_CUDA );
setVariantDefined(Base_CUDA);
setVariantDefined(Lambda_CUDA);
setVariantDefined(RAJA_CUDA);

setVariantDefined( Base_HIP );
setVariantDefined( Lambda_HIP );
setVariantDefined( RAJA_HIP );
}
setVariantDefined(Base_HIP);
setVariantDefined(Lambda_HIP);
setVariantDefined(RAJA_HIP);

DAXPY_ATOMIC::~DAXPY_ATOMIC()
{
setVariantDefined(Kokkos_Lambda);
}

void DAXPY_ATOMIC::setUp(VariantID vid)
{
DAXPY_ATOMIC::~DAXPY_ATOMIC() {}

void DAXPY_ATOMIC::setUp(VariantID vid) {
allocAndInitDataConst(m_y, getActualProblemSize(), 0.0, vid);
allocAndInitData(m_x, getActualProblemSize(), vid);
initData(m_a);
}

void DAXPY_ATOMIC::updateChecksum(VariantID vid)
{
void DAXPY_ATOMIC::updateChecksum(VariantID vid) {
checksum[vid] += calcChecksum(m_y, getActualProblemSize());
}

void DAXPY_ATOMIC::tearDown(VariantID vid)
{
(void) vid;
void DAXPY_ATOMIC::tearDown(VariantID vid) {
(void)vid;
deallocData(m_x);
deallocData(m_y);
}
Expand Down
26 changes: 10 additions & 16 deletions src/basic/DAXPY_ATOMIC.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,32 +17,25 @@
#ifndef RAJAPerf_Basic_DAXPY_ATOMIC_HPP
#define RAJAPerf_Basic_DAXPY_ATOMIC_HPP

#define DAXPY_ATOMIC_DATA_SETUP \
Real_ptr x = m_x; \
Real_ptr y = m_y; \
#define DAXPY_ATOMIC_DATA_SETUP \
Real_ptr x = m_x; \
Real_ptr y = m_y; \
Real_type a = m_a;

#define DAXPY_ATOMIC_BODY \
y[i] += a * x[i] ;

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

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

#include "common/KernelBase.hpp"

namespace rajaperf
{
namespace rajaperf {
class RunParams;

namespace basic
{
namespace basic {

class DAXPY_ATOMIC : public KernelBase
{
class DAXPY_ATOMIC : public KernelBase {
public:

DAXPY_ATOMIC(const RunParams& params);
DAXPY_ATOMIC(const RunParams &params);

~DAXPY_ATOMIC();

Expand All @@ -55,6 +48,7 @@ class DAXPY_ATOMIC : public KernelBase
void runCudaVariant(VariantID vid);
void runHipVariant(VariantID vid);
void runOpenMPTargetVariant(VariantID vid);
void runKokkosVariant(VariantID vid);

private:
Real_ptr m_x;
Expand Down

0 comments on commit 1320300

Please sign in to comment.