Skip to content

[SYCL][CUDA] Skip PiCudaTests when running other plugins #4103

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions sycl/unittests/pi/TestGetPlugin.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <functional>

namespace pi {
inline cl::sycl::detail::plugin initializeAndGet(cl::sycl::backend backend) {
inline cl::sycl::detail::plugin *initializeAndGet(cl::sycl::backend backend) {
auto plugins = cl::sycl::detail::pi::initialize();
auto it = std::find_if(plugins.begin(), plugins.end(),
[=](cl::sycl::detail::plugin p) -> bool {
Expand All @@ -19,9 +19,10 @@ inline cl::sycl::detail::plugin initializeAndGet(cl::sycl::backend backend) {
if (it == plugins.end()) {
std::string msg = GetBackendString(backend);
msg += " PI plugin not found!";
throw std::runtime_error(msg);
std::cerr << "Warning: " << msg << " Tests using it will be skipped.\n";
return nullptr;
}
return *it;
return &*it;
}

inline std::vector<cl::sycl::detail::plugin> initializeAndRemoveInvalid() {
Expand Down
49 changes: 28 additions & 21 deletions sycl/unittests/pi/cuda/test_base_objects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,14 @@ using namespace cl::sycl;

class CudaBaseObjectsTest : public ::testing::Test {
protected:
detail::plugin plugin = pi::initializeAndGet(backend::cuda);
detail::plugin *plugin = pi::initializeAndGet(backend::cuda);

void SetUp() override {
// skip the tests if the CUDA backend is not available
if (!plugin) {
GTEST_SKIP();
}
}

CudaBaseObjectsTest() = default;

Expand All @@ -35,28 +42,28 @@ TEST_F(CudaBaseObjectsTest, piContextCreate) {
pi_uint32 numPlatforms = 0;
pi_platform platform = nullptr;
pi_device device;
ASSERT_EQ(plugin.getBackend(), backend::cuda);
ASSERT_EQ(plugin->getBackend(), backend::cuda);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
0, nullptr, &numPlatforms)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
numPlatforms, &platform, nullptr)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_GE(numPlatforms, 1u);
ASSERT_NE(platform, nullptr);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
platform, PI_DEVICE_TYPE_GPU, 1, &device, nullptr)),
PI_SUCCESS)
<< "piDevicesGet failed.\n";

pi_context ctxt = nullptr;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
nullptr, 1, &device, nullptr, nullptr, &ctxt)),
PI_SUCCESS)
<< "piContextCreate failed.\n";
Expand All @@ -79,24 +86,24 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryTrue) {
pi_platform platform;
pi_device device;

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
0, nullptr, &numPlatforms)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
numPlatforms, &platform, nullptr)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

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

pi_context ctxt;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
properties, 1, &device, nullptr, nullptr, &ctxt)),
PI_SUCCESS);
EXPECT_NE(ctxt, nullptr);
Expand All @@ -115,7 +122,7 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryTrue) {
cuErr = cuCtxGetCurrent(&current);
ASSERT_EQ(cuErr, CUDA_SUCCESS);
ASSERT_EQ(current, cudaContext);
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
PI_SUCCESS);
}

Expand All @@ -124,24 +131,24 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryFalse) {
pi_platform platform;
pi_device device;

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
0, nullptr, &numPlatforms)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
numPlatforms, &platform, nullptr)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

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

pi_context ctxt;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
properties, 1, &device, nullptr, nullptr, &ctxt)),
PI_SUCCESS);
EXPECT_NE(ctxt, nullptr);
Expand All @@ -160,7 +167,7 @@ TEST_F(CudaBaseObjectsTest, piContextCreatePrimaryFalse) {
cuErr = cuCtxGetCurrent(&current);
ASSERT_EQ(cuErr, CUDA_SUCCESS);
ASSERT_EQ(current, cudaContext);
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
PI_SUCCESS);
}

Expand All @@ -169,22 +176,22 @@ TEST_F(CudaBaseObjectsTest, piContextCreateChildThread) {
pi_platform platform;
pi_device device;

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
0, nullptr, &numPlatforms)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
numPlatforms, &platform, nullptr)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
platform, PI_DEVICE_TYPE_GPU, 1, &device, nullptr)),
PI_SUCCESS);

pi_context ctxt;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
nullptr, 1, &device, nullptr, nullptr, &ctxt)),
PI_SUCCESS);
EXPECT_NE(ctxt, nullptr);
Expand Down Expand Up @@ -215,6 +222,6 @@ TEST_F(CudaBaseObjectsTest, piContextCreateChildThread) {

callContextFromOtherThread.join();

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextRelease>(ctxt)),
PI_SUCCESS);
}
39 changes: 23 additions & 16 deletions sycl/unittests/pi/cuda/test_commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,37 +21,42 @@ using namespace cl::sycl;
struct CudaCommandsTest : public ::testing::Test {

protected:
detail::plugin plugin = pi::initializeAndGet(backend::cuda);
detail::plugin *plugin = pi::initializeAndGet(backend::cuda);

pi_platform platform_;
pi_device device_;
pi_context context_;
pi_queue queue_;

void SetUp() override {
// skip the tests if the CUDA backend is not available
if (!plugin) {
GTEST_SKIP();
}

cuCtxSetCurrent(nullptr);
pi_uint32 numPlatforms = 0;
ASSERT_EQ(plugin.getBackend(), backend::cuda);
ASSERT_EQ(plugin->getBackend(), backend::cuda);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
0, nullptr, &numPlatforms)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
numPlatforms, &platform_, nullptr)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
platform_, PI_DEVICE_TYPE_GPU, 1, &device_, nullptr)),
PI_SUCCESS);
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
nullptr, 1, &device_, nullptr, nullptr, &context_)),
PI_SUCCESS);
ASSERT_NE(context_, nullptr);

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

void TearDown() override {
plugin.call<detail::PiApiKind::piQueueRelease>(queue_);
plugin.call<detail::PiApiKind::piContextRelease>(context_);
if (plugin) {
plugin->call<detail::PiApiKind::piQueueRelease>(queue_);
plugin->call<detail::PiApiKind::piContextRelease>(context_);
}
}

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

pi_mem memObj;
ASSERT_EQ(
(plugin.call_nocheck<detail::PiApiKind::piMemBufferCreate>(
(plugin->call_nocheck<detail::PiApiKind::piMemBufferCreate>(
context_, PI_MEM_FLAGS_ACCESS_RW, bytes, nullptr, &memObj, nullptr)),
PI_SUCCESS);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
queue_, memObj, true, 0, bytes, data, 0, nullptr, nullptr)),
PI_SUCCESS);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
queue_, memObj, true, 0, bytes, output, 0, nullptr, nullptr)),
PI_SUCCESS);

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

pi_mem memObj;
ASSERT_EQ(
(plugin.call_nocheck<detail::PiApiKind::piMemBufferCreate>(
(plugin->call_nocheck<detail::PiApiKind::piMemBufferCreate>(
context_, PI_MEM_FLAGS_ACCESS_RW, bytes, nullptr, &memObj, nullptr)),
PI_SUCCESS);

pi_event cpIn, cpOut;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferWrite>(
queue_, memObj, false, 0, bytes, data, 0, nullptr, &cpIn)),
PI_SUCCESS);
ASSERT_NE(cpIn, nullptr);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEnqueueMemBufferRead>(
queue_, memObj, false, 0, bytes, output, 0, nullptr, &cpOut)),
PI_SUCCESS);
ASSERT_NE(cpOut, nullptr);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piEventsWait>(1, &cpOut)),
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piEventsWait>(1, &cpOut)),
PI_SUCCESS);

bool isSame =
Expand Down
31 changes: 19 additions & 12 deletions sycl/unittests/pi/cuda/test_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,45 @@ using namespace cl::sycl;
struct CudaDeviceTests : public ::testing::Test {

protected:
detail::plugin plugin = pi::initializeAndGet(backend::cuda);
detail::plugin *plugin = pi::initializeAndGet(backend::cuda);

pi_platform platform_;
pi_device device_;
pi_context context_;

void SetUp() override {
// skip the tests if the CUDA backend is not available
if (!plugin) {
GTEST_SKIP();
}

pi_uint32 numPlatforms = 0;
ASSERT_EQ(plugin.getBackend(), backend::cuda);
ASSERT_EQ(plugin->getBackend(), backend::cuda);

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
0, nullptr, &numPlatforms)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piPlatformsGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piPlatformsGet>(
numPlatforms, &platform_, nullptr)),
PI_SUCCESS)
<< "piPlatformsGet failed.\n";

ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDevicesGet>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDevicesGet>(
platform_, PI_DEVICE_TYPE_GPU, 1, &device_, nullptr)),
PI_SUCCESS);
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piContextCreate>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piContextCreate>(
nullptr, 1, &device_, nullptr, nullptr, &context_)),
PI_SUCCESS);
EXPECT_NE(context_, nullptr);
}

void TearDown() override {
plugin.call<detail::PiApiKind::piDeviceRelease>(device_);
plugin.call<detail::PiApiKind::piContextRelease>(context_);
if (plugin) {
plugin->call<detail::PiApiKind::piDeviceRelease>(device_);
plugin->call<detail::PiApiKind::piContextRelease>(context_);
}
}

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

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

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

pi_platform platform = nullptr;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
device_, PI_DEVICE_INFO_PLATFORM, sizeof(pi_platform),
&platform, &return_size)),
PI_SUCCESS);
Expand All @@ -91,7 +98,7 @@ TEST_F(CudaDeviceTests, PIDeviceGetInfoSimple) {
// test fixture platform

cl_device_partition_property device_partition_property = -1;
ASSERT_EQ((plugin.call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
ASSERT_EQ((plugin->call_nocheck<detail::PiApiKind::piDeviceGetInfo>(
device_, PI_DEVICE_INFO_PARTITION_TYPE,
sizeof(cl_device_partition_property),
&device_partition_property, &return_size)),
Expand Down
Loading