Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // each test binary is built for a single Alpaka backend
0011 using namespace ALPAKA_ACCELERATOR_NAMESPACE;
0012 
0013 namespace {
0014   struct Dummy {
0015     int x, y, z;
0016   };
0017 }  // namespace
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     // run the test on each device
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     // The buffer itself is really dynamically sized, even if the
0035     // alpakatools API looks like the array would have static size
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     // run the test on each device
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     // run the test on each device
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 }