Dummy

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#include <alpaka/alpaka.hpp>

#define CATCH_CONFIG_MAIN
#include <catch.hpp>

#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
#include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
#include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h"

// each test binary is built for a single Alpaka backend
using namespace ALPAKA_ACCELERATOR_NAMESPACE;

namespace {
  struct Dummy {
    int x, y, z;
  };
}  // namespace

TEST_CASE("Test CopyToDevice for Alpaka buffers for the " EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) " backend",
          "[" EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) "]") {
  SECTION("Buffer of scalar") {
    auto buffer_host = cms::alpakatools::make_host_buffer<Dummy>();

    // run the test on each device
    for (auto const& device : cms::alpakatools::devices<Platform>()) {
      auto queue = Queue(device);
      using Copy = cms::alpakatools::CopyToDevice<decltype(buffer_host)>;
      auto buffer_device = Copy::copyAsync(queue, buffer_host);
      alpaka::wait(queue);
    }
  }

  SECTION("Buffer of array with static size") {
    // The buffer itself is really dynamically sized, even if the
    // alpakatools API looks like the array would have static size
    constexpr int N = 10;
    auto buffer_host = cms::alpakatools::make_host_buffer<int[N]>();
    for (int i = 0; i < N; ++i) {
      buffer_host[i] = i;
    }

    // run the test on each device
    for (auto const& device : cms::alpakatools::devices<Platform>()) {
      auto queue = Queue(device);
      using Copy = cms::alpakatools::CopyToDevice<decltype(buffer_host)>;
      auto buffer_device = Copy::copyAsync(queue, buffer_host);
      alpaka::wait(queue);
      REQUIRE(alpaka::getExtentProduct(buffer_device) == N);
    }
  }

  SECTION("Buffer of array with dynamic size") {
    constexpr int N = 10;
    auto buffer_host = cms::alpakatools::make_host_buffer<int[]>(N);
    for (int i = 0; i < N; ++i) {
      buffer_host[i] = i;
    }

    // run the test on each device
    for (auto const& device : cms::alpakatools::devices<Platform>()) {
      auto queue = Queue(device);
      using Copy = cms::alpakatools::CopyToDevice<decltype(buffer_host)>;
      auto buffer_device = Copy::copyAsync(queue, buffer_host);
      alpaka::wait(queue);
      REQUIRE(alpaka::getExtentProduct(buffer_device) == N);
    }
  }
}