forked from kokkos/kokkos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TestHIP_Memory_Requirements.cpp
58 lines (51 loc) · 2.48 KB
/
TestHIP_Memory_Requirements.cpp
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
//@HEADER
// ************************************************************************
//
// Kokkos v. 4.0
// Copyright (2022) National Technology & Engineering
// Solutions of Sandia, LLC (NTESS).
//
// Under the terms of Contract DE-NA0003525 with NTESS,
// the U.S. Government retains certain rights in this software.
//
// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions.
// See https://kokkos.org/LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//@HEADER
#include <Kokkos_Core.hpp>
#include <TestHIP_Category.hpp>
namespace {
template <class HIPMemoryContainer>
bool checkMemoryCoarseGrainedness(HIPMemoryContainer const& container) {
auto size = container.size();
auto allocationSize = HIPMemoryContainer::required_allocation_size(size);
hipMemRangeCoherencyMode memInfo;
KOKKOS_IMPL_HIP_SAFE_CALL(hipMemRangeGetAttribute(
&memInfo, sizeof(hipMemRangeCoherencyMode),
hipMemRangeAttributeCoherencyMode, container.data(), allocationSize));
return (hipMemRangeCoherencyModeCoarseGrain == memInfo);
}
#define KOKKOS_TEST_MEMORY_COARSEGRAINEDNESS(MEMORY_SPACE, DATATYPE, SIZE) \
{ \
Kokkos::View<DATATYPE*, MEMORY_SPACE> view(#MEMORY_SPACE, SIZE); \
ASSERT_TRUE(view.is_allocated()) \
<< "View in " << #MEMORY_SPACE << " with size " << SIZE \
<< " was not allocated. This prevents checks of the grainedness."; \
ASSERT_TRUE(checkMemoryCoarseGrainedness(view)) \
<< "The memory in views in " << #MEMORY_SPACE \
<< " is not coarse-grained. Kokkos relies on all user facing memory " \
"being coarse-grained."; \
}
TEST(hip, memory_requirements) {
// we want all user-facing memory in hip to be coarse grained. As of
// today(07.01.22) the documentation is not reliable/correct, we test the
// memory on the device and host
// FIXME_HIP
GTEST_SKIP() << "skipping the test because the CI on MI100 returns: error( "
"hipErrorInvalidValue)";
KOKKOS_TEST_MEMORY_COARSEGRAINEDNESS(Kokkos::HIPSpace, int, 10);
KOKKOS_TEST_MEMORY_COARSEGRAINEDNESS(Kokkos::HIPHostPinnedSpace, int, 10);
KOKKOS_TEST_MEMORY_COARSEGRAINEDNESS(Kokkos::HIPManagedSpace, int, 10);
}
} // namespace