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);
}
}
}
|