Skip to content

Commit f837d17

Browse files
authored
[SYCL][CUDA] Skip PiCudaTests when running other plugins (#4103)
This fixes an issue where if the cuda plugin is enabled and lit tests for another plugin are run, it will try to run PiCudaTests, and all of them will assert since the device filter will be set to a non-cuda plugin and the tests request a cuda device. So instead of asserting this patch makes the PiCudaTests get marked as skipped if there is no cuda device found.
1 parent 6042d3a commit f837d17

File tree

8 files changed

+212
-162
lines changed

8 files changed

+212
-162
lines changed

sycl/unittests/pi/TestGetPlugin.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <functional>
1111

1212
namespace pi {
13-
inline cl::sycl::detail::plugin initializeAndGet(cl::sycl::backend backend) {
13+
inline cl::sycl::detail::plugin *initializeAndGet(cl::sycl::backend backend) {
1414
auto plugins = cl::sycl::detail::pi::initialize();
1515
auto it = std::find_if(plugins.begin(), plugins.end(),
1616
[=](cl::sycl::detail::plugin p) -> bool {
@@ -19,9 +19,10 @@ inline cl::sycl::detail::plugin initializeAndGet(cl::sycl::backend backend) {
1919
if (it == plugins.end()) {
2020
std::string msg = GetBackendString(backend);
2121
msg += " PI plugin not found!";
22-
throw std::runtime_error(msg);
22+
std::cerr << "Warning: " << msg << " Tests using it will be skipped.\n";
23+
return nullptr;
2324
}
24-
return *it;
25+
return &*it;
2526
}
2627

2728
inline std::vector<cl::sycl::detail::plugin> initializeAndRemoveInvalid() {

sycl/unittests/pi/cuda/test_base_objects.cpp

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ using namespace cl::sycl;
2424

2525
class CudaBaseObjectsTest : public ::testing::Test {
2626
protected:
27-
detail::plugin plugin = pi::initializeAndGet(backend::cuda);
27+
detail::plugin *plugin = pi::initializeAndGet(backend::cuda);
28+
29+
void SetUp() override {
30+
// skip the tests if the CUDA backend is not available
31+
if (!plugin) {
32+
GTEST_SKIP();
33+
}
34+
}
2835

2936
CudaBaseObjectsTest() = default;
3037

@@ -35,28 +42,28 @@ TEST_F(CudaBaseObjectsTest, piContextCreate) {
3542
pi_uint32 numPlatforms = 0;
3643
pi_platform platform = nullptr;
3744
pi_device device;
38-
ASSERT_EQ(plugin.getBackend(), backend::cuda);
45+
ASSERT_EQ(plugin->getBackend(), backend::cuda);
3946

40-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
47+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
4148
0, nullptr, &numPlatforms)),
4249
PI_SUCCESS)
4350
<< "piPlatformsGet failed.\n";
4451

45-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
52+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
4653
numPlatforms, &platform, nullptr)),
4754
PI_SUCCESS)
4855
<< "piPlatformsGet failed.\n";
4956

5057
ASSERT_GE(numPlatforms, 1u);
5158
ASSERT_NE(platform, nullptr);
5259

53-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
60+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
5461
platform, PI_DEVICE_TYPE_GPU, 1, &device, nullptr)),
5562
PI_SUCCESS)
5663
<< "piDevicesGet failed.\n";
5764

5865
pi_context ctxt = nullptr;
59-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
66+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
6067
nullptr, 1, &device, nullptr, nullptr, &ctxt)),
6168
PI_SUCCESS)
6269
<< "piContextCreate failed.\n";
@@ -79,24 +86,24 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryTrue) {
7986
pi_platform platform;
8087
pi_device device;
8188

82-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
89+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
8390
0, nullptr, &numPlatforms)),
8491
PI_SUCCESS)
8592
<< "piPlatformsGet failed.\n";
8693

87-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
94+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
8895
numPlatforms, &platform, nullptr)),
8996
PI_SUCCESS)
9097
<< "piPlatformsGet failed.\n";
9198

92-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
99+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
93100
platform, PI_DEVICE_TYPE_GPU, 1, &device, nullptr)),
94101
PI_SUCCESS);
95102
pi_context_properties properties[] = {
96103
__SYCL_PI_CONTEXT_PROPERTIES_CUDA_PRIMARY, PI_TRUE, 0};
97104

98105
pi_context ctxt;
99-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
106+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
100107
properties, 1, &device, nullptr, nullptr, &ctxt)),
101108
PI_SUCCESS);
102109
EXPECT_NE(ctxt, nullptr);
@@ -115,7 +122,7 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryTrue) {
115122
cuErr = cuCtxGetCurrent(&current);
116123
ASSERT_EQ(cuErr, CUDA_SUCCESS);
117124
ASSERT_EQ(current, cudaContext);
118-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
125+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
119126
PI_SUCCESS);
120127
}
121128

@@ -124,24 +131,24 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryFalse) {
124131
pi_platform platform;
125132
pi_device device;
126133

127-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
134+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
128135
0, nullptr, &numPlatforms)),
129136
PI_SUCCESS)
130137
<< "piPlatformsGet failed.\n";
131138

132-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
139+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
133140
numPlatforms, &platform, nullptr)),
134141
PI_SUCCESS)
135142
<< "piPlatformsGet failed.\n";
136143

137-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
144+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
138145
platform, PI_DEVICE_TYPE_GPU, 1, &device, nullptr)),
139146
PI_SUCCESS);
140147
pi_context_properties properties[] = {
141148
__SYCL_PI_CONTEXT_PROPERTIES_CUDA_PRIMARY, PI_FALSE, 0};
142149

143150
pi_context ctxt;
144-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
151+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
145152
properties, 1, &device, nullptr, nullptr, &ctxt)),
146153
PI_SUCCESS);
147154
EXPECT_NE(ctxt, nullptr);
@@ -160,7 +167,7 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryFalse) {
160167
cuErr = cuCtxGetCurrent(&current);
161168
ASSERT_EQ(cuErr, CUDA_SUCCESS);
162169
ASSERT_EQ(current, cudaContext);
163-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
170+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
164171
PI_SUCCESS);
165172
}
166173

@@ -169,22 +176,22 @@ TEST_F(CudaBaseObjectsTest, piContextCreateChildThread) {
169176
pi_platform platform;
170177
pi_device device;
171178

172-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
179+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
173180
0, nullptr, &numPlatforms)),
174181
PI_SUCCESS)
175182
<< "piPlatformsGet failed.\n";
176183

177-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
184+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
178185
numPlatforms, &platform, nullptr)),
179186
PI_SUCCESS)
180187
<< "piPlatformsGet failed.\n";
181188

182-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
189+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
183190
platform, PI_DEVICE_TYPE_GPU, 1, &device, nullptr)),
184191
PI_SUCCESS);
185192

186193
pi_context ctxt;
187-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
194+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
188195
nullptr, 1, &device, nullptr, nullptr, &ctxt)),
189196
PI_SUCCESS);
190197
EXPECT_NE(ctxt, nullptr);
@@ -215,6 +222,6 @@ TEST_F(CudaBaseObjectsTest, piContextCreateChildThread) {
215222

216223
callContextFromOtherThread.join();
217224

218-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
225+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
219226
PI_SUCCESS);
220227
}

sycl/unittests/pi/cuda/test_commands.cpp

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,37 +21,42 @@ using namespace cl::sycl;
2121
struct CudaCommandsTest : public ::testing::Test {
2222

2323
protected:
24-
detail::plugin plugin = pi::initializeAndGet(backend::cuda);
24+
detail::plugin *plugin = pi::initializeAndGet(backend::cuda);
2525

2626
pi_platform platform_;
2727
pi_device device_;
2828
pi_context context_;
2929
pi_queue queue_;
3030

3131
void SetUp() override {
32+
// skip the tests if the CUDA backend is not available
33+
if (!plugin) {
34+
GTEST_SKIP();
35+
}
36+
3237
cuCtxSetCurrent(nullptr);
3338
pi_uint32 numPlatforms = 0;
34-
ASSERT_EQ(plugin.getBackend(), backend::cuda);
39+
ASSERT_EQ(plugin->getBackend(), backend::cuda);
3540

36-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
41+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
3742
0, nullptr, &numPlatforms)),
3843
PI_SUCCESS)
3944
<< "piPlatformsGet failed.\n";
4045

41-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
46+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
4247
numPlatforms, &platform_, nullptr)),
4348
PI_SUCCESS)
4449
<< "piPlatformsGet failed.\n";
4550

46-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
51+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
4752
platform_, PI_DEVICE_TYPE_GPU, 1, &device_, nullptr)),
4853
PI_SUCCESS);
49-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
54+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
5055
nullptr, 1, &device_, nullptr, nullptr, &context_)),
5156
PI_SUCCESS);
5257
ASSERT_NE(context_, nullptr);
5358

54-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piQueueCreate>(
59+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piQueueCreate>(
5560
context_, device_, 0, &queue_)),
5661
PI_SUCCESS);
5762
ASSERT_NE(queue_, nullptr);
@@ -60,8 +65,10 @@ struct CudaCommandsTest : public ::testing::Test {
6065
}
6166

6267
void TearDown() override {
63-
plugin.call<detail::PiApiKind::piQueueRelease>(queue_);
64-
plugin.call<detail::PiApiKind::piContextRelease>(context_);
68+
if (plugin) {
69+
plugin->call<detail::PiApiKind::piQueueRelease>(queue_);
70+
plugin->call<detail::PiApiKind::piContextRelease>(context_);
71+
}
6572
}
6673

6774
CudaCommandsTest() = default;
@@ -77,15 +84,15 @@ TEST_F(CudaCommandsTest, PIEnqueueReadBufferBlocking) {
7784

7885
pi_mem memObj;
7986
ASSERT_EQ(
80-
(plugin.call_nocheck<detail::PiApiKind::piMemBufferCreate>(
87+
(plugin->call_nocheck<detail::PiApiKind::piMemBufferCreate>(
8188
context_, PI_MEM_FLAGS_ACCESS_RW, bytes, nullptr, &memObj, nullptr)),
8289
PI_SUCCESS);
8390

84-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
91+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
8592
queue_, memObj, true, 0, bytes, data, 0, nullptr, nullptr)),
8693
PI_SUCCESS);
8794

88-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
95+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
8996
queue_, memObj, true, 0, bytes, output, 0, nullptr, nullptr)),
9097
PI_SUCCESS);
9198

@@ -107,22 +114,22 @@ TEST_F(CudaCommandsTest, PIEnqueueReadBufferNonBlocking) {
107114

108115
pi_mem memObj;
109116
ASSERT_EQ(
110-
(plugin.call_nocheck<detail::PiApiKind::piMemBufferCreate>(
117+
(plugin->call_nocheck<detail::PiApiKind::piMemBufferCreate>(
111118
context_, PI_MEM_FLAGS_ACCESS_RW, bytes, nullptr, &memObj, nullptr)),
112119
PI_SUCCESS);
113120

114121
pi_event cpIn, cpOut;
115-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
122+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
116123
queue_, memObj, false, 0, bytes, data, 0, nullptr, &cpIn)),
117124
PI_SUCCESS);
118125
ASSERT_NE(cpIn, nullptr);
119126

120-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
127+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
121128
queue_, memObj, false, 0, bytes, output, 0, nullptr, &cpOut)),
122129
PI_SUCCESS);
123130
ASSERT_NE(cpOut, nullptr);
124131

125-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEventsWait>(1, &cpOut)),
132+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEventsWait>(1, &cpOut)),
126133
PI_SUCCESS);
127134

128135
bool isSame =

sycl/unittests/pi/cuda/test_device.cpp

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,45 @@ using namespace cl::sycl;
2121
struct CudaDeviceTests : public ::testing::Test {
2222

2323
protected:
24-
detail::plugin plugin = pi::initializeAndGet(backend::cuda);
24+
detail::plugin *plugin = pi::initializeAndGet(backend::cuda);
2525

2626
pi_platform platform_;
2727
pi_device device_;
2828
pi_context context_;
2929

3030
void SetUp() override {
31+
// skip the tests if the CUDA backend is not available
32+
if (!plugin) {
33+
GTEST_SKIP();
34+
}
35+
3136
pi_uint32 numPlatforms = 0;
32-
ASSERT_EQ(plugin.getBackend(), backend::cuda);
37+
ASSERT_EQ(plugin->getBackend(), backend::cuda);
3338

34-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
39+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
3540
0, nullptr, &numPlatforms)),
3641
PI_SUCCESS)
3742
<< "piPlatformsGet failed.\n";
3843

39-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
44+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
4045
numPlatforms, &platform_, nullptr)),
4146
PI_SUCCESS)
4247
<< "piPlatformsGet failed.\n";
4348

44-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
49+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
4550
platform_, PI_DEVICE_TYPE_GPU, 1, &device_, nullptr)),
4651
PI_SUCCESS);
47-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
52+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
4853
nullptr, 1, &device_, nullptr, nullptr, &context_)),
4954
PI_SUCCESS);
5055
EXPECT_NE(context_, nullptr);
5156
}
5257

5358
void TearDown() override {
54-
plugin.call<detail::PiApiKind::piDeviceRelease>(device_);
55-
plugin.call<detail::PiApiKind::piContextRelease>(context_);
59+
if (plugin) {
60+
plugin->call<detail::PiApiKind::piDeviceRelease>(device_);
61+
plugin->call<detail::PiApiKind::piContextRelease>(context_);
62+
}
5663
}
5764

5865
CudaDeviceTests() = default;
@@ -63,7 +70,7 @@ TEST_F(CudaDeviceTests, PIDeviceGetInfoSimple) {
6370

6471
size_t return_size = 0;
6572
pi_device_type device_type;
66-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
73+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
6774
device_, PI_DEVICE_INFO_TYPE, sizeof(pi_device_type),
6875
&device_type, &return_size)),
6976
PI_SUCCESS);
@@ -73,7 +80,7 @@ TEST_F(CudaDeviceTests, PIDeviceGetInfoSimple) {
7380
PI_DEVICE_TYPE_GPU); // backend pre-defined value, device must be a GPU
7481

7582
pi_device parent_device = nullptr;
76-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
83+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
7784
device_, PI_DEVICE_INFO_PARENT_DEVICE, sizeof(pi_device),
7885
&parent_device, &return_size)),
7986
PI_SUCCESS);
@@ -82,7 +89,7 @@ TEST_F(CudaDeviceTests, PIDeviceGetInfoSimple) {
8289
nullptr); // backend pre-set value, device cannot have a parent
8390

8491
pi_platform platform = nullptr;
85-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
92+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
8693
device_, PI_DEVICE_INFO_PLATFORM, sizeof(pi_platform),
8794
&platform, &return_size)),
8895
PI_SUCCESS);
@@ -91,7 +98,7 @@ TEST_F(CudaDeviceTests, PIDeviceGetInfoSimple) {
9198
// test fixture platform
9299

93100
cl_device_partition_property device_partition_property = -1;
94-
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
101+
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
95102
device_, PI_DEVICE_INFO_PARTITION_TYPE,
96103
sizeof(cl_device_partition_property),
97104
&device_partition_property, &return_size)),

0 commit comments

Comments
 (0)