File indexing completed on 2024-04-06 12:15:46
0001 #include "catch.hpp"
0002
0003 #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"
0004 #include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
0005 #include "HeterogeneousCore/CUDAUtilities/interface/requireDevices.h"
0006
0007 TEST_CASE("device_unique_ptr", "[cudaMemTools]") {
0008 if (not cms::cudatest::testDevices()) {
0009 return;
0010 }
0011
0012 cudaStream_t stream;
0013 cudaCheck(cudaStreamCreateWithFlags(&stream, cudaStreamNonBlocking));
0014
0015 SECTION("Single element") {
0016 auto ptr = cms::cuda::make_device_unique<int>(stream);
0017 REQUIRE(ptr != nullptr);
0018 }
0019
0020 SECTION("Reset") {
0021 auto ptr = cms::cuda::make_device_unique<int>(stream);
0022 REQUIRE(ptr != nullptr);
0023 cudaCheck(cudaStreamSynchronize(stream));
0024
0025 ptr.reset();
0026 REQUIRE(ptr.get() == nullptr);
0027 }
0028
0029 SECTION("Multiple elements") {
0030 auto ptr = cms::cuda::make_device_unique<int[]>(10, stream);
0031 REQUIRE(ptr != nullptr);
0032 cudaCheck(cudaStreamSynchronize(stream));
0033
0034 ptr.reset();
0035 REQUIRE(ptr.get() == nullptr);
0036 }
0037
0038 SECTION("Allocating too much") {
0039 constexpr size_t maxSize = 1 << 30;
0040 auto ptr = cms::cuda::make_device_unique<char[]>(maxSize, stream);
0041 ptr.reset();
0042 REQUIRE_THROWS(ptr = cms::cuda::make_device_unique<char[]>(maxSize + 1, stream));
0043 }
0044
0045 cudaCheck(cudaStreamDestroy(stream));
0046 }