Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions HeterogeneousTest/AlpakaDevice/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
<use name="alpaka"/>
<use name="HeterogeneousCore/AlpakaInterface"/>
<flags ALPAKA_BACKENDS="1"/>
<export>
<lib name="1"/>
</export>
10 changes: 4 additions & 6 deletions HeterogeneousTest/AlpakaDevice/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,13 @@ Alpaka-based libraries, and using them from multiple plugins.
The package `HeterogeneousTest/AlpakaDevice` implements a library that defines and exports Alpaka
device-side functions:
```c++
namespace cms::alpakatest {
namespace ALPAKA_ACCELERATOR_NAMESPACE::test {

template <typename TAcc>
ALPAKA_FN_ACC void add_vectors_f(TAcc const& acc, ...);
ALPAKA_FN_ACC void add_vectors_f(Acc1D const& acc, ...);

template <typename TAcc>
ALPAKA_FN_ACC void add_vectors_d(TAcc const& acc, ...);
ALPAKA_FN_ACC void add_vectors_d(Acc1D const& acc, ...);

} // namespace cms::alpakatest
} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test
```

The `plugins` directory implements the `AlpakaTestDeviceAdditionModule` `EDAnalyzer` that launches
Expand Down
26 changes: 8 additions & 18 deletions HeterogeneousTest/AlpakaDevice/interface/alpaka/DeviceAddition.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,22 @@

#include <alpaka/alpaka.hpp>

#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"

namespace cms::alpakatest {
namespace ALPAKA_ACCELERATOR_NAMESPACE::test {

template <typename TAcc>
ALPAKA_FN_ACC void add_vectors_f(TAcc const& acc,
ALPAKA_FN_ACC void add_vectors_f(Acc1D const& acc,
float const* __restrict__ in1,
float const* __restrict__ in2,
float* __restrict__ out,
uint32_t size) {
for (auto i : cms::alpakatools::uniform_elements(acc, size)) {
out[i] = in1[i] + in2[i];
}
}

template <typename TAcc>
ALPAKA_FN_ACC void add_vectors_d(TAcc const& acc,
uint32_t size);

ALPAKA_FN_ACC void add_vectors_d(Acc1D const& acc,
double const* __restrict__ in1,
double const* __restrict__ in2,
double* __restrict__ out,
uint32_t size) {
for (auto i : cms::alpakatools::uniform_elements(acc, size)) {
out[i] = in1[i] + in2[i];
}
}
uint32_t size);

} // namespace cms::alpakatest
} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test

#endif // HeterogeneousTest_AlpakaDevice_interface_alpaka_DeviceAddition_h
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@
namespace ALPAKA_ACCELERATOR_NAMESPACE::HeterogeneousTestAlpakaDevicePlugins {

struct KernelAddVectorsF {
template <typename TAcc>
ALPAKA_FN_ACC void operator()(TAcc const& acc,
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
const float* __restrict__ in1,
const float* __restrict__ in2,
float* __restrict__ out,
uint32_t size) const {
cms::alpakatest::add_vectors_f(acc, in1, in2, out, size);
test::add_vectors_f(acc, in1, in2, out, size);
}
};

Expand Down
31 changes: 31 additions & 0 deletions HeterogeneousTest/AlpakaDevice/src/alpaka/DeviceAddition.dev.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include <cstdint>

#include <alpaka/alpaka.hpp>

#include "HeterogeneousTest/AlpakaDevice/interface/alpaka/DeviceAddition.h"
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"

namespace ALPAKA_ACCELERATOR_NAMESPACE::test {

ALPAKA_FN_ACC void add_vectors_f(Acc1D const& acc,
float const* __restrict__ in1,
float const* __restrict__ in2,
float* __restrict__ out,
uint32_t size) {
for (auto i : cms::alpakatools::uniform_elements(acc, size)) {
out[i] = in1[i] + in2[i];
}
}

ALPAKA_FN_ACC void add_vectors_d(Acc1D const& acc,
double const* __restrict__ in1,
double const* __restrict__ in2,
double* __restrict__ out,
uint32_t size) {
for (auto i : cms::alpakatools::uniform_elements(acc, size)) {
out[i] = in1[i] + in2[i];
}
}

} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@
using namespace ALPAKA_ACCELERATOR_NAMESPACE;

struct KernelAddVectorsF {
template <typename TAcc>
ALPAKA_FN_ACC void operator()(TAcc const& acc,
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
const float* __restrict__ in1,
const float* __restrict__ in2,
float* __restrict__ out,
uint32_t size) const {
cms::alpakatest::add_vectors_f(acc, in1, in2, out, size);
test::add_vectors_f(acc, in1, in2, out, size);
}
};

Expand Down
4 changes: 4 additions & 0 deletions HeterogeneousTest/AlpakaKernel/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<use name="alpaka"/>
<use name="HeterogeneousCore/AlpakaInterface"/>
<use name="HeterogeneousTest/AlpakaDevice"/>
<flags ALPAKA_BACKENDS="1"/>
<export>
<lib name="1"/>
</export>
11 changes: 5 additions & 6 deletions HeterogeneousTest/AlpakaKernel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,18 @@ Alpaka-based libraries, and using them from multiple plugins.
The package `HeterogeneousTest/AlpakaKernel` implements a library that defines and exports Alpaka
kernels that call the device functions defined in the `HeterogeneousTest/AlpakaDevice` library:
```c++
namespace cms::alpakatest {
namespace ALPAKA_ACCELERATOR_NAMESPACE::test {

struct KernelAddVectorsF {
template <typename TAcc>
ALPAKA_FN_ACC void operator()(TAcc const& acc, ...) const;
ALPAKA_FN_ACC void operator()(Acc1D const& acc, ...) const;
};

struct KernelAddVectorsD {
template <typename TAcc>
ALPAKA_FN_ACC void operator()(TAcc const& acc, ...) const;
ALPAKA_FN_ACC void operator()(Acc1D const& acc, ...) const;
};

} // namespace cms::alpakatest

} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test
```

The `plugins` directory implements the `AlpakaTestKernelAdditionModule` `EDAnalyzer` that launches
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,26 @@

#include <alpaka/alpaka.hpp>

#include "HeterogeneousTest/AlpakaDevice/interface/alpaka/DeviceAddition.h"
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"

namespace cms::alpakatest {
namespace ALPAKA_ACCELERATOR_NAMESPACE::test {

struct KernelAddVectorsF {
template <typename TAcc>
ALPAKA_FN_ACC void operator()(TAcc const& acc,
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
const float* __restrict__ in1,
const float* __restrict__ in2,
float* __restrict__ out,
uint32_t size) const {
add_vectors_f(acc, in1, in2, out, size);
}
uint32_t size) const;
};

struct KernelAddVectorsD {
template <typename TAcc>
ALPAKA_FN_ACC void operator()(TAcc const& acc,
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
const double* __restrict__ in1,
const double* __restrict__ in2,
double* __restrict__ out,
uint32_t size) const {
add_vectors_d(acc, in1, in2, out, size);
}
uint32_t size) const;
};

} // namespace cms::alpakatest
} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test

#endif // HeterogeneousTest_AlpakaKernel_interface_alpaka_DeviceAdditionKernel_h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::HeterogeneousTestAlpakaKernelPlugins {
float* __restrict__ out,
uint32_t size) {
alpaka::exec<Acc1D>(
queue, cms::alpakatools::make_workdiv<Acc1D>(32, 32), cms::alpakatest::KernelAddVectorsF{}, in1, in2, out, size);
queue, cms::alpakatools::make_workdiv<Acc1D>(32, 32), test::KernelAddVectorsF{}, in1, in2, out, size);
}

} // namespace ALPAKA_ACCELERATOR_NAMESPACE::HeterogeneousTestAlpakaKernelPlugins
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include <cstdint>

#include <alpaka/alpaka.hpp>

#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
#include "HeterogeneousTest/AlpakaDevice/interface/alpaka/DeviceAddition.h"
#include "HeterogeneousTest/AlpakaKernel/interface/alpaka/DeviceAdditionKernel.h"

namespace ALPAKA_ACCELERATOR_NAMESPACE::test {

ALPAKA_FN_ACC void KernelAddVectorsF::operator()(Acc1D const& acc,
const float* __restrict__ in1,
const float* __restrict__ in2,
float* __restrict__ out,
uint32_t size) const {
add_vectors_f(acc, in1, in2, out, size);
}

ALPAKA_FN_ACC void KernelAddVectorsD::operator()(Acc1D const& acc,
const double* __restrict__ in1,
const double* __restrict__ in2,
double* __restrict__ out,
uint32_t size) const {
add_vectors_d(acc, in1, in2, out, size);
}

} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ TEST_CASE("HeterogeneousTest/AlpakaKernel test", "[alpakaTestDeviceAdditionKerne
// launch the 1-dimensional kernel for vector addition
alpaka::exec<Acc1D>(queue,
cms::alpakatools::make_workdiv<Acc1D>(32, 32),
cms::alpakatest::KernelAddVectorsF{},
test::KernelAddVectorsF{},
in1_d.data(),
in2_d.data(),
out_d.data(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
)

process.path = cms.Path(
process.alpakaTestDeviceAdditionModule +
# this one fails for the CUDA backend with "cudaErrorInvalidDeviceFunction: invalid device function"
# process.alpakaTestDeviceAdditionModule +
process.alpakaTestKernelAdditionModule +
process.alpakaTestWrapperAdditionModule +
process.alpakaTestOpaqueAdditionModule)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::test {
const float* __restrict__ in2,
float* __restrict__ out,
uint32_t size) {
alpaka::exec<Acc1D>(
queue, cms::alpakatools::make_workdiv<Acc1D>(32, 32), cms::alpakatest::KernelAddVectorsF{}, in1, in2, out, size);
alpaka::exec<Acc1D>(queue, cms::alpakatools::make_workdiv<Acc1D>(32, 32), KernelAddVectorsF{}, in1, in2, out, size);
}

void wrapper_add_vectors_d(Queue& queue,
const double* __restrict__ in1,
const double* __restrict__ in2,
double* __restrict__ out,
uint32_t size) {
alpaka::exec<Acc1D>(
queue, cms::alpakatools::make_workdiv<Acc1D>(32, 32), cms::alpakatest::KernelAddVectorsD{}, in1, in2, out, size);
alpaka::exec<Acc1D>(queue, cms::alpakatools::make_workdiv<Acc1D>(32, 32), KernelAddVectorsD{}, in1, in2, out, size);
}

} // namespace ALPAKA_ACCELERATOR_NAMESPACE::test