Skip to content

Commit 99f9080

Browse files
author
Diptorup Deb
committed
Equivalency checking helpers.
-- Added a way to check if two DPPLSyclQueueRef and the SyclQueue wrappers point to the same sycl queue. -- Same thing for DPPLSyclContextRef and SyclContext.
1 parent 4572588 commit 99f9080

11 files changed

+171
-6
lines changed

backends/include/dppl_sycl_context_interface.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@
3535

3636
DPPL_C_EXTERN_C_BEGIN
3737

38+
/*!
39+
* @brief Checks if two DPPLSyclContextRef objects point to the same
40+
* sycl::context.
41+
*
42+
* @param CtxRef1 First opaque pointer to the sycl context.
43+
* @param CtxRef2 Second opaque pointer to the sycl context.
44+
* @return True if the underlying sycl::context are same, false otherwise.
45+
*/
46+
DPPL_API
47+
bool DPPLContext_AreEq (__dppl_keep const DPPLSyclContextRef CtxRef1,
48+
__dppl_keep const DPPLSyclContextRef CtxRef2);
49+
3850
/*!
3951
* @brief Returns true if this SYCL context is a host context.
4052
*

backends/include/dppl_sycl_queue_interface.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ DPPL_C_EXTERN_C_BEGIN
4444
DPPL_API
4545
void DPPLQueue_Delete (__dppl_take DPPLSyclQueueRef QRef);
4646

47+
/*!
48+
* @brief Checks if two DPPLSyclQueueRef objects point to the same sycl::queue.
49+
*
50+
* @param QRef1 First opaque pointer to the sycl queue.
51+
* @param QRef2 Second opaque pointer to the sycl queue.
52+
* @return True if the underlying sycl::queue are same, false otherwise.
53+
*/
54+
DPPL_API
55+
bool DPPLQueue_AreEq (__dppl_keep const DPPLSyclQueueRef QRef1,
56+
__dppl_keep const DPPLSyclQueueRef QRef2);
57+
4758
/*!
4859
* @brief Returns the Sycl backend for the provided sycl::queue.
4960
*

backends/source/dppl_sycl_context_interface.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ namespace
3636
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(context, DPPLSyclContextRef)
3737
} /* end of anonymous namespace */
3838

39+
bool DPPLContext_AreEq (__dppl_keep const DPPLSyclContextRef CtxRef1,
40+
__dppl_keep const DPPLSyclContextRef CtxRef2)
41+
{
42+
if(!(CtxRef1 && CtxRef2))
43+
// \todo handle error
44+
return false;
45+
return (*unwrap(CtxRef1) == *unwrap(CtxRef2));
46+
}
3947

4048
bool DPPLContext_IsHost (__dppl_keep const DPPLSyclContextRef CtxRef)
4149
{

backends/source/dppl_sycl_queue_interface.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ void DPPLQueue_Delete (__dppl_take DPPLSyclQueueRef QRef)
118118
delete unwrap(QRef);
119119
}
120120

121+
122+
bool DPPLQueue_AreEq (__dppl_keep const DPPLSyclQueueRef QRef1,
123+
__dppl_keep const DPPLSyclQueueRef QRef2)
124+
{
125+
if(!(QRef1 && QRef2))
126+
// \todo handle error
127+
return false;
128+
return (*unwrap(QRef1) == *unwrap(QRef2));
129+
}
130+
121131
enum DPPLSyclBEType DPPLQueue_GetBackend (__dppl_keep DPPLSyclQueueRef QRef)
122132
{
123133
auto Q = unwrap(QRef);

backends/source/dppl_sycl_queue_manager.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,7 @@ bool QMgrHelper::isCurrentQueue (__dppl_keep const DPPLSyclQueueRef QRef)
230230
}
231231
auto last = activated_q.size() - 1;
232232
auto currQ = activated_q[last];
233-
auto currCtx = currQ.get_context();
234-
auto currD = currQ.get_device();
235-
auto InD = unwrap(QRef)->get_device();
236-
auto InCtx = unwrap(QRef)->get_context();
237-
return (currCtx == InCtx && currD == InD);
233+
return (*unwrap(QRef) == currQ);
238234
}
239235

240236
/*!
@@ -472,7 +468,7 @@ DPPLQueueMgr_SetAsDefaultQueue (enum DPPLSyclBEType BETy,
472468
enum DPPLSyclDeviceType DeviceTy,
473469
size_t DNum)
474470
{
475-
QMgrHelper::setAsDefaultQueue(BETy, DeviceTy, DNum);
471+
return QMgrHelper::setAsDefaultQueue(BETy, DeviceTy, DNum);
476472
}
477473

478474
/*!

backends/tests/test_sycl_queue_interface.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,65 @@ struct TestDPPLSyclQueueInterface : public ::testing::Test
8787
{ }
8888
};
8989

90+
TEST_F (TestDPPLSyclQueueInterface, CheckAreEq)
91+
{
92+
auto Q1 = DPPLQueueMgr_GetCurrentQueue();
93+
auto Q2 = DPPLQueueMgr_GetCurrentQueue();
94+
EXPECT_TRUE(DPPLQueue_AreEq(Q1, Q2));
95+
96+
auto nOclGPU = DPPLQueueMgr_GetNumQueues(DPPLSyclBEType::DPPL_OPENCL,
97+
DPPLSyclDeviceType::DPPL_GPU);
98+
auto nOclCPU = DPPLQueueMgr_GetNumQueues(DPPLSyclBEType::DPPL_OPENCL,
99+
DPPLSyclDeviceType::DPPL_CPU);
100+
{
101+
if(!nOclGPU)
102+
GTEST_SKIP_("No OpenCL GPUs available.\n");
103+
104+
auto Def_Q = DPPLQueueMgr_SetAsDefaultQueue(
105+
DPPLSyclBEType::DPPL_OPENCL,
106+
DPPLSyclDeviceType::DPPL_GPU,
107+
0
108+
);
109+
auto OclGPU_Q0 = DPPLQueueMgr_PushQueue(
110+
DPPLSyclBEType::DPPL_OPENCL,
111+
DPPLSyclDeviceType::DPPL_GPU,
112+
0
113+
);
114+
auto OclGPU_Q1 = DPPLQueueMgr_PushQueue(
115+
DPPLSyclBEType::DPPL_OPENCL,
116+
DPPLSyclDeviceType::DPPL_GPU,
117+
0
118+
);
119+
EXPECT_TRUE(DPPLQueue_AreEq(Def_Q, OclGPU_Q0));
120+
EXPECT_TRUE(DPPLQueue_AreEq(Def_Q, OclGPU_Q1));
121+
EXPECT_TRUE(DPPLQueue_AreEq(OclGPU_Q0, OclGPU_Q1));
122+
DPPLQueue_Delete(Def_Q);
123+
DPPLQueue_Delete(OclGPU_Q0);
124+
DPPLQueue_Delete(OclGPU_Q1);
125+
DPPLQueueMgr_PopQueue();
126+
DPPLQueueMgr_PopQueue();
127+
}
128+
129+
{
130+
if(!nOclGPU || !nOclCPU)
131+
GTEST_SKIP_("OpenCL GPUs and CPU not available.\n");
132+
auto GPU_Q = DPPLQueueMgr_PushQueue(
133+
DPPLSyclBEType::DPPL_OPENCL,
134+
DPPLSyclDeviceType::DPPL_GPU,
135+
0
136+
);
137+
auto CPU_Q = DPPLQueueMgr_PushQueue(
138+
DPPLSyclBEType::DPPL_OPENCL,
139+
DPPLSyclDeviceType::DPPL_CPU,
140+
0
141+
);
142+
EXPECT_FALSE(DPPLQueue_AreEq(GPU_Q, CPU_Q));
143+
DPPLQueueMgr_PopQueue();
144+
DPPLQueueMgr_PopQueue();
145+
}
146+
147+
}
148+
90149
TEST_F (TestDPPLSyclQueueInterface, CheckGetBackend)
91150
{
92151
auto Q1 = DPPLQueueMgr_GetCurrentQueue();
@@ -101,16 +160,19 @@ TEST_F (TestDPPLSyclQueueInterface, CheckGetBackend)
101160
auto Q = DPPLQueueMgr_PushQueue(DPPL_OPENCL, DPPL_GPU, 0);
102161
EXPECT_TRUE(DPPLQueue_GetBackend(Q) == DPPL_OPENCL);
103162
DPPLQueue_Delete(Q);
163+
DPPLQueueMgr_PopQueue();
104164
}
105165
if(DPPLQueueMgr_GetNumQueues(DPPL_OPENCL, DPPL_CPU)) {
106166
auto Q = DPPLQueueMgr_PushQueue(DPPL_OPENCL, DPPL_CPU, 0);
107167
EXPECT_TRUE(DPPLQueue_GetBackend(Q) == DPPL_OPENCL);
108168
DPPLQueue_Delete(Q);
169+
DPPLQueueMgr_PopQueue();
109170
}
110171
if(DPPLQueueMgr_GetNumQueues(DPPL_LEVEL_ZERO, DPPL_GPU)) {
111172
auto Q = DPPLQueueMgr_PushQueue(DPPL_LEVEL_ZERO, DPPL_GPU, 0);
112173
EXPECT_TRUE(DPPLQueue_GetBackend(Q) == DPPL_LEVEL_ZERO);
113174
DPPLQueue_Delete(Q);
175+
DPPLQueueMgr_PopQueue();
114176
}
115177
}
116178

@@ -128,20 +190,23 @@ TEST_F (TestDPPLSyclQueueInterface, CheckGetContext)
128190
ASSERT_TRUE(OclGpuCtx != nullptr);
129191
DPPLQueue_Delete(Q);
130192
DPPLContext_Delete(OclGpuCtx);
193+
DPPLQueueMgr_PopQueue();
131194
}
132195
if(DPPLQueueMgr_GetNumQueues(DPPL_OPENCL, DPPL_CPU)) {
133196
auto Q = DPPLQueueMgr_PushQueue(DPPL_OPENCL, DPPL_CPU, 0);
134197
auto OclCpuCtx = DPPLQueue_GetContext(Q);
135198
ASSERT_TRUE(OclCpuCtx != nullptr);
136199
DPPLQueue_Delete(Q);
137200
DPPLContext_Delete(OclCpuCtx);
201+
DPPLQueueMgr_PopQueue();
138202
}
139203
if(DPPLQueueMgr_GetNumQueues(DPPL_LEVEL_ZERO, DPPL_GPU)) {
140204
auto Q = DPPLQueueMgr_PushQueue(DPPL_LEVEL_ZERO, DPPL_GPU, 0);
141205
auto L0Ctx = DPPLQueue_GetContext(Q);
142206
ASSERT_TRUE(Ctx != nullptr);
143207
DPPLQueue_Delete(Q);
144208
DPPLContext_Delete(L0Ctx);
209+
DPPLQueueMgr_PopQueue();
145210
}
146211
}
147212

@@ -160,6 +225,7 @@ TEST_F (TestDPPLSyclQueueInterface, CheckGetDevice)
160225
EXPECT_TRUE(DPPLDevice_IsGPU(OCLGPU_D));
161226
DPPLQueue_Delete(Q);
162227
DPPLDevice_Delete(OCLGPU_D);
228+
DPPLQueueMgr_PopQueue();
163229
}
164230
if(DPPLQueueMgr_GetNumQueues(DPPL_OPENCL, DPPL_CPU)) {
165231
auto Q = DPPLQueueMgr_PushQueue(DPPL_OPENCL, DPPL_CPU, 0);
@@ -168,6 +234,7 @@ TEST_F (TestDPPLSyclQueueInterface, CheckGetDevice)
168234
EXPECT_TRUE(DPPLDevice_IsCPU(OCLCPU_D));
169235
DPPLQueue_Delete(Q);
170236
DPPLDevice_Delete(OCLCPU_D);
237+
DPPLQueueMgr_PopQueue();
171238
}
172239
if(DPPLQueueMgr_GetNumQueues(DPPL_LEVEL_ZERO, DPPL_GPU)) {
173240
auto Q = DPPLQueueMgr_PushQueue(DPPL_LEVEL_ZERO, DPPL_GPU, 0);
@@ -176,6 +243,7 @@ TEST_F (TestDPPLSyclQueueInterface, CheckGetDevice)
176243
EXPECT_TRUE(DPPLDevice_IsGPU(L0GPU_D));
177244
DPPLQueue_Delete(Q);
178245
DPPLDevice_Delete(L0GPU_D);
246+
DPPLQueueMgr_PopQueue();
179247
}
180248
}
181249

dpctl/_sycl_core.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ cdef class SyclContext:
3737

3838
@staticmethod
3939
cdef SyclContext _create (DPPLSyclContextRef ctxt)
40+
cpdef bool equals (self, SyclContext ctxt)
4041
cdef DPPLSyclContextRef get_context_ref (self)
4142

4243

@@ -108,6 +109,7 @@ cdef class SyclQueue:
108109

109110
@staticmethod
110111
cdef SyclQueue _create (DPPLSyclQueueRef qref)
112+
cpdef bool equals (self, SyclQueue q)
111113
cpdef SyclContext get_sycl_context (self)
112114
cpdef SyclDevice get_sycl_device (self)
113115
cdef DPPLSyclQueueRef get_queue_ref (self)

dpctl/backend.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ cdef extern from "dppl_sycl_platform_interface.h":
125125

126126

127127
cdef extern from "dppl_sycl_context_interface.h":
128+
cdef bool DPPLContext_AreEq (const DPPLSyclContextRef CtxRef1,
129+
const DPPLSyclContextRef CtxRef2)
128130
cdef DPPLSyclBEType DPPLContext_GetBackend (const DPPLSyclContextRef CtxRef)
129131
cdef void DPPLContext_Delete (DPPLSyclContextRef CtxRef)
130132

@@ -146,6 +148,8 @@ cdef extern from "dppl_sycl_program_interface.h":
146148

147149

148150
cdef extern from "dppl_sycl_queue_interface.h":
151+
cdef bool DPPLQueue_AreEq (const DPPLSyclQueueRef QRef1,
152+
const DPPLSyclQueueRef QRef2)
149153
cdef void DPPLQueue_Delete (DPPLSyclQueueRef QRef)
150154
cdef DPPLSyclBEType DPPLQueue_GetBackend (const DPPLSyclQueueRef Q)
151155
cdef DPPLSyclContextRef DPPLQueue_GetContext (const DPPLSyclQueueRef Q)

dpctl/sycl_core.pyx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ cdef class SyclContext:
9696
def __dealloc__ (self):
9797
DPPLContext_Delete(self._ctxt_ref)
9898

99+
cpdef bool equals (self, SyclContext ctxt):
100+
""" Returns true if the SyclContext argument has the same _context_ref
101+
as this SyclContext.
102+
"""
103+
return DPPLContext_AreEq(self._ctxt_ref, ctxt.get_context_ref())
104+
99105
cdef DPPLSyclContextRef get_context_ref (self):
100106
return self._ctxt_ref
101107

@@ -338,6 +344,12 @@ cdef class SyclQueue:
338344

339345
return ret
340346

347+
cpdef bool equals (self, SyclQueue q):
348+
""" Returns true if the SyclQueue argument has the same _queue_ref
349+
as this SycleQueue.
350+
"""
351+
return DPPLQueue_AreEq(self._queue_ref, q.get_queue_ref())
352+
341353
def get_sycl_backend (self):
342354
""" Returns the Sycl bakend associated with the queue.
343355
"""

dpctl/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from .test_dump_functions import *
2626
from .test_sycl_kernel_submit import *
2727
from .test_sycl_program import *
28+
from .test_sycl_queue import *
2829
from .test_sycl_queue_manager import *
2930
from .test_sycl_queue_memcpy import *
3031
from .test_sycl_usm import *

0 commit comments

Comments
 (0)