Skip to content

Commit 95977a6

Browse files
committed
Backend agnostic PI tests are parameterised by PI Plugin.
Enable CUDA + OpenCL PI unit tests. Signed-off-by: Stuart Adams <[email protected]>
1 parent 7886fd8 commit 95977a6

16 files changed

+369
-296
lines changed

sycl/include/CL/sycl/detail/pi.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ typedef enum {
132132
// make the translation to OpenCL transparent.
133133
//
134134
typedef enum : pi_uint64 {
135+
PI_DEVICE_TYPE_DEFAULT = CL_DEVICE_TYPE_DEFAULT,
136+
PI_DEVICE_TYPE_ALL = CL_DEVICE_TYPE_ALL,
135137
PI_DEVICE_TYPE_CPU = CL_DEVICE_TYPE_CPU,
136138
PI_DEVICE_TYPE_GPU = CL_DEVICE_TYPE_GPU,
137139
PI_DEVICE_TYPE_ACC = CL_DEVICE_TYPE_ACCELERATOR

sycl/plugins/cuda/pi_cuda.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -716,15 +716,18 @@ pi_result cuda_piDevicesGet(pi_platform platform, pi_device_type device_type,
716716
pi_uint32 *num_devices) {
717717

718718
pi_result err = PI_SUCCESS;
719-
const bool askingForGPU = (device_type & PI_DEVICE_TYPE_GPU);
720-
size_t numDevices = askingForGPU ? platform->devices_.size() : 0;
719+
const bool askingForDefault = device_type == PI_DEVICE_TYPE_DEFAULT;
720+
const bool askingForGPU = device_type & PI_DEVICE_TYPE_GPU;
721+
const bool returnDevices = askingForDefault || askingForGPU;
722+
723+
size_t numDevices = returnDevices ? platform->devices_.size() : 0;
721724

722725
try {
723726
if (num_devices) {
724727
*num_devices = numDevices;
725728
}
726729

727-
if (askingForGPU && devices) {
730+
if (returnDevices && devices) {
728731
for (size_t i = 0; i < std::min(size_t(num_entries), numDevices); ++i) {
729732
devices[i] = platform->devices_[i].get();
730733
}

sycl/unittests/pi/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
22

33
# Enable exception handling for these unit tests
44
set(LLVM_REQUIRES_EH 1)
5-
add_sycl_unittest(PiTests OBJECT
5+
add_sycl_unittest(PiTests OBJECT
66
EnqueueMemTest.cpp
77
PiMock.cpp
88
PlatformTest.cpp

sycl/unittests/pi/EnqueueMemTest.cpp

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@
1313
using namespace cl::sycl;
1414

1515
namespace {
16-
class DISABLED_EnqueueMemTest : public ::testing::Test {
16+
class EnqueueMemTest : public testing::TestWithParam<detail::plugin> {
1717
protected:
18-
std::vector<detail::plugin> Plugins;
19-
2018
constexpr static size_t _numElementsX = 8;
2119
constexpr static size_t _numElementsY = 4;
2220

@@ -25,72 +23,77 @@ class DISABLED_EnqueueMemTest : public ::testing::Test {
2523
pi_queue _queue = nullptr;
2624
pi_mem _mem = nullptr;
2725

28-
DISABLED_EnqueueMemTest() = default;
26+
EnqueueMemTest() = default;
2927

30-
~DISABLED_EnqueueMemTest() = default;
28+
~EnqueueMemTest() = default;
3129

3230
void SetUp() override {
33-
Plugins = detail::pi::initialize();
34-
ASSERT_FALSE(Plugins.empty());
31+
32+
detail::plugin plugin = GetParam();
3533

3634
pi_platform platform = nullptr;
37-
ASSERT_EQ((Plugins[0].call_nocheck<detail::PiApiKind::piPlatformsGet>(
35+
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
3836
1, &platform, nullptr)),
3937
PI_SUCCESS);
4038

41-
ASSERT_EQ((Plugins[0].call_nocheck<detail::PiApiKind::piDevicesGet>(
42-
platform, PI_DEVICE_TYPE_GPU, 1, &_device, nullptr)),
39+
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
40+
platform, PI_DEVICE_TYPE_DEFAULT, 1, &_device, nullptr)),
4341
PI_SUCCESS);
4442

4543
pi_result result = PI_INVALID_VALUE;
46-
result = Plugins[0].call_nocheck<detail::PiApiKind::piContextCreate>(
44+
result = plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
4745
nullptr, 1u, &_device, nullptr, nullptr, &_context);
4846
ASSERT_EQ(result, PI_SUCCESS);
4947

50-
ASSERT_EQ((Plugins[0].call_nocheck<detail::PiApiKind::piQueueCreate>(
48+
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piQueueCreate>(
5149
_context, _device, 0, &_queue)),
5250
PI_SUCCESS);
5351

54-
ASSERT_EQ((Plugins[0].call_nocheck<detail::PiApiKind::piMemBufferCreate>(
52+
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piMemBufferCreate>(
5553
_context, 0, _numElementsX * _numElementsY * sizeof(pi_int32),
5654
nullptr, &_mem)),
5755
PI_SUCCESS);
5856
}
5957

6058
void TearDown() override {
61-
ASSERT_EQ((Plugins[0].call_nocheck<detail::PiApiKind::piMemRelease>(_mem)),
59+
60+
detail::plugin plugin = GetParam();
61+
62+
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piMemRelease>(_mem)),
6263
PI_SUCCESS);
6364
ASSERT_EQ(
64-
(Plugins[0].call_nocheck<detail::PiApiKind::piQueueRelease>(_queue)),
65+
(plugin.call_nocheck<detail::PiApiKind::piQueueRelease>(_queue)),
6566
PI_SUCCESS);
66-
ASSERT_EQ((Plugins[0].call_nocheck<detail::PiApiKind::piContextRelease>(
67+
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(
6768
_context)),
6869
PI_SUCCESS);
6970
}
7071

7172
template <typename T> void TestBufferFill(const T &pattern) {
7273

74+
detail::plugin plugin = GetParam();
75+
7376
T inValues[_numElementsX] = {};
7477

7578
for (size_t i = 0; i < _numElementsX; ++i) {
7679
ASSERT_NE(pattern, inValues[i]);
7780
}
7881

7982
ASSERT_EQ(
80-
(Plugins[0].call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
83+
(plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
8184
_queue, _mem, PI_TRUE, 0, _numElementsX * sizeof(T), inValues, 0,
8285
nullptr, nullptr)),
8386
PI_SUCCESS);
8487

8588
ASSERT_EQ(
86-
(Plugins[0].call_nocheck<detail::PiApiKind::piEnqueueMemBufferFill>(
89+
(plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferFill>(
8790
_queue, _mem, &pattern, sizeof(T), 0, sizeof(inValues), 0, nullptr,
8891
nullptr)),
8992
PI_SUCCESS);
9093

9194
T outValues[_numElementsX] = {};
9295
ASSERT_EQ(
93-
(Plugins[0].call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
96+
(plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
9497
_queue, _mem, PI_TRUE, 0, _numElementsX * sizeof(T), outValues, 0,
9598
nullptr, nullptr)),
9699
PI_SUCCESS);
@@ -101,6 +104,12 @@ class DISABLED_EnqueueMemTest : public ::testing::Test {
101104
}
102105
};
103106

107+
static std::vector<detail::plugin> Plugins = detail::pi::initialize();
108+
109+
INSTANTIATE_TEST_CASE_P(EnqueueMemTestImpl,
110+
EnqueueMemTest,
111+
testing::ValuesIn(Plugins),);
112+
104113
template<typename T>
105114
struct vec4 {
106115
T x, y, z, w;
@@ -127,7 +136,7 @@ struct vec2 {
127136
}
128137
};
129138

130-
TEST_F(DISABLED_EnqueueMemTest, piEnqueueMemBufferFill) {
139+
TEST_P(EnqueueMemTest, piEnqueueMemBufferFill) {
131140

132141
TestBufferFill(float{1});
133142
TestBufferFill(vec2<float>{1, 2});

0 commit comments

Comments
 (0)