File indexing completed on 2024-12-19 04:04:41
0001 #include <alpaka/alpaka.hpp>
0002
0003 #define CATCH_CONFIG_MAIN
0004 #include <catch.hpp>
0005
0006 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0007 #include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
0008 #include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h"
0009
0010
0011 using namespace ALPAKA_ACCELERATOR_NAMESPACE;
0012
0013 namespace {
0014 struct Dummy {
0015 int x, y, z;
0016 };
0017 }
0018
0019 TEST_CASE("Test CopyToDevice for Alpaka buffers for the " EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) " backend",
0020 "[" EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) "]") {
0021 SECTION("Buffer of scalar") {
0022 auto buffer_host = cms::alpakatools::make_host_buffer<Dummy>();
0023
0024
0025 for (auto const& device : cms::alpakatools::devices<Platform>()) {
0026 auto queue = Queue(device);
0027 using Copy = cms::alpakatools::CopyToDevice<decltype(buffer_host)>;
0028 auto buffer_device = Copy::copyAsync(queue, buffer_host);
0029 alpaka::wait(queue);
0030 }
0031 }
0032
0033 SECTION("Buffer of array with static size") {
0034
0035
0036 constexpr int N = 10;
0037 auto buffer_host = cms::alpakatools::make_host_buffer<int[N]>();
0038 for (int i = 0; i < N; ++i) {
0039 buffer_host[i] = i;
0040 }
0041
0042
0043 for (auto const& device : cms::alpakatools::devices<Platform>()) {
0044 auto queue = Queue(device);
0045 using Copy = cms::alpakatools::CopyToDevice<decltype(buffer_host)>;
0046 auto buffer_device = Copy::copyAsync(queue, buffer_host);
0047 alpaka::wait(queue);
0048 REQUIRE(alpaka::getExtentProduct(buffer_device) == N);
0049 }
0050 }
0051
0052 SECTION("Buffer of array with dynamic size") {
0053 constexpr int N = 10;
0054 auto buffer_host = cms::alpakatools::make_host_buffer<int[]>(N);
0055 for (int i = 0; i < N; ++i) {
0056 buffer_host[i] = i;
0057 }
0058
0059
0060 for (auto const& device : cms::alpakatools::devices<Platform>()) {
0061 auto queue = Queue(device);
0062 using Copy = cms::alpakatools::CopyToDevice<decltype(buffer_host)>;
0063 auto buffer_device = Copy::copyAsync(queue, buffer_host);
0064 alpaka::wait(queue);
0065 REQUIRE(alpaka::getExtentProduct(buffer_device) == N);
0066 }
0067 }
0068 }