Skip to content

Commit 08d11bc

Browse files
[SYCL] Remove secondary submission queue from handler (#17967)
handler's secondary queue is not used for any meaningful work.
1 parent 51ce490 commit 08d11bc

File tree

3 files changed

+28
-94
lines changed

3 files changed

+28
-94
lines changed

sycl/source/detail/handler_impl.hpp

+1-9
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ enum class HandlerSubmissionState : std::uint8_t {
3131

3232
class handler_impl {
3333
public:
34-
handler_impl(queue_impl *SubmissionPrimaryQueue,
35-
queue_impl *SubmissionSecondaryQueue, bool EventNeeded)
34+
handler_impl(queue_impl *SubmissionPrimaryQueue, bool EventNeeded)
3635
: MSubmissionPrimaryQueue(SubmissionPrimaryQueue),
37-
MSubmissionSecondaryQueue(SubmissionSecondaryQueue),
3836
MEventNeeded(EventNeeded) {};
3937

4038
handler_impl(
@@ -74,12 +72,6 @@ class handler_impl {
7472
/// a fallback from a previous submission.
7573
queue_impl *MSubmissionPrimaryQueue = nullptr;
7674

77-
/// Shared pointer to the secondary queue implementation. Nullptr if no
78-
/// secondary queue fallback was given in the associated submission. This is
79-
/// equal to the queue associated with the handler if the corresponding
80-
/// submission is a fallback from a previous submission.
81-
queue_impl *MSubmissionSecondaryQueue = nullptr;
82-
8375
/// Bool stores information about whether the event resulting from the
8476
/// corresponding work is required.
8577
bool MEventNeeded = true;

sycl/source/handler.cpp

+27-39
Original file line numberDiff line numberDiff line change
@@ -314,26 +314,28 @@ fill_copy_args(detail::handler_impl *impl,
314314

315315
handler::handler(std::shared_ptr<detail::queue_impl> Queue,
316316
bool CallerNeedsEvent)
317-
: impl(std::make_shared<detail::handler_impl>(Queue.get(), nullptr,
317+
: impl(std::make_shared<detail::handler_impl>(Queue.get(),
318318
CallerNeedsEvent)),
319319
MQueue(Queue) {}
320320

321321
#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
322322
// TODO: This function is not used anymore, remove it in the next
323323
// ABI-breaking window.
324-
handler::handler(std::shared_ptr<detail::queue_impl> Queue,
325-
std::shared_ptr<detail::queue_impl> PrimaryQueue,
326-
std::shared_ptr<detail::queue_impl> SecondaryQueue,
327-
bool CallerNeedsEvent)
328-
: impl(std::make_shared<detail::handler_impl>(
329-
PrimaryQueue.get(), SecondaryQueue.get(), CallerNeedsEvent)),
324+
handler::handler(
325+
std::shared_ptr<detail::queue_impl> Queue,
326+
std::shared_ptr<detail::queue_impl> PrimaryQueue,
327+
[[maybe_unused]] std::shared_ptr<detail::queue_impl> SecondaryQueue,
328+
bool CallerNeedsEvent)
329+
: impl(std::make_shared<detail::handler_impl>(PrimaryQueue.get(),
330+
CallerNeedsEvent)),
330331
MQueue(Queue) {}
331332
#endif
332333

333334
handler::handler(std::shared_ptr<detail::queue_impl> Queue,
334335
detail::queue_impl *PrimaryQueue,
335-
detail::queue_impl *SecondaryQueue, bool CallerNeedsEvent)
336-
: impl(std::make_shared<detail::handler_impl>(PrimaryQueue, SecondaryQueue,
336+
[[maybe_unused]] detail::queue_impl *SecondaryQueue,
337+
bool CallerNeedsEvent)
338+
: impl(std::make_shared<detail::handler_impl>(PrimaryQueue,
337339
CallerNeedsEvent)),
338340
MQueue(std::move(Queue)) {}
339341

@@ -1775,14 +1777,6 @@ void handler::use_kernel_bundle(
17751777
"Context associated with the primary queue is different from the "
17761778
"context associated with the kernel bundle");
17771779

1778-
if (impl->MSubmissionSecondaryQueue &&
1779-
impl->MSubmissionSecondaryQueue->get_context() !=
1780-
ExecBundle.get_context())
1781-
throw sycl::exception(
1782-
make_error_code(errc::invalid),
1783-
"Context associated with the secondary queue is different from the "
1784-
"context associated with the kernel bundle");
1785-
17861780
setStateExplicitKernelBundle();
17871781
setHandlerKernelBundle(detail::getSyclObjImpl(ExecBundle));
17881782
}
@@ -1928,34 +1922,28 @@ void handler::verifyDeviceHasProgressGuarantee(
19281922
}
19291923

19301924
bool handler::supportsUSMMemcpy2D() {
1931-
for (detail::queue_impl *QueueImpl :
1932-
{impl->MSubmissionPrimaryQueue, impl->MSubmissionSecondaryQueue}) {
1933-
if (QueueImpl &&
1934-
!checkContextSupports(QueueImpl->getContextImplPtr(),
1935-
UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT))
1936-
return false;
1937-
}
1938-
return true;
1925+
auto &PrimQueue = impl->MSubmissionPrimaryQueue;
1926+
if (PrimQueue)
1927+
return checkContextSupports(PrimQueue->getContextImplPtr(),
1928+
UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT);
1929+
else
1930+
// Return true when handler_impl is constructed with a graph.
1931+
return true;
19391932
}
19401933

19411934
bool handler::supportsUSMFill2D() {
1942-
for (detail::queue_impl *QueueImpl :
1943-
{impl->MSubmissionPrimaryQueue, impl->MSubmissionSecondaryQueue}) {
1944-
if (QueueImpl && !checkContextSupports(QueueImpl->getContextImplPtr(),
1945-
UR_CONTEXT_INFO_USM_FILL2D_SUPPORT))
1946-
return false;
1947-
}
1948-
return true;
1935+
auto &PrimQueue = impl->MSubmissionPrimaryQueue;
1936+
if (PrimQueue)
1937+
return checkContextSupports(PrimQueue->getContextImplPtr(),
1938+
UR_CONTEXT_INFO_USM_FILL2D_SUPPORT);
1939+
else
1940+
// Return true when handler_impl is constructed with a graph.
1941+
return true;
19491942
}
19501943

19511944
bool handler::supportsUSMMemset2D() {
1952-
for (detail::queue_impl *QueueImpl :
1953-
{impl->MSubmissionPrimaryQueue, impl->MSubmissionSecondaryQueue}) {
1954-
if (QueueImpl && !checkContextSupports(QueueImpl->getContextImplPtr(),
1955-
UR_CONTEXT_INFO_USM_FILL2D_SUPPORT))
1956-
return false;
1957-
}
1958-
return true;
1945+
// memset use the same UR check as fill2D.
1946+
return supportsUSMFill2D();
19591947
}
19601948

19611949
id<2> handler::computeFallbackKernelBounds(size_t Width, size_t Height) {

sycl/unittests/SYCL2020/KernelBundle.cpp

-46
Original file line numberDiff line numberDiff line change
@@ -308,52 +308,6 @@ TEST(KernelBundle, UseKernelBundleWrongContextPrimaryQueueValidSecondaryQueue) {
308308
}
309309
}
310310

311-
TEST(KernelBundle, UseKernelBundleValidPrimaryQueueWrongContextSecondaryQueue) {
312-
sycl::unittest::UrMock<> Mock;
313-
314-
const sycl::device Dev = sycl::platform().get_devices()[0];
315-
const sycl::context PrimaryCtx{Dev};
316-
const sycl::context SecondaryCtx{Dev};
317-
318-
ASSERT_NE(PrimaryCtx, SecondaryCtx);
319-
320-
auto KernelBundle = sycl::get_kernel_bundle<sycl::bundle_state::executable>(
321-
PrimaryCtx, {Dev});
322-
323-
sycl::queue PrimaryQueue{PrimaryCtx, Dev};
324-
sycl::queue SecondaryQueue{SecondaryCtx, Dev};
325-
326-
class UnqiueException {};
327-
328-
try {
329-
PrimaryQueue.submit(
330-
[&](sycl::handler &CGH) {
331-
try {
332-
CGH.use_kernel_bundle(KernelBundle);
333-
FAIL() << "No exception was thrown.";
334-
CGH.single_task<TestKernel>([]() {});
335-
} catch (const sycl::exception &e) {
336-
ASSERT_EQ(e.code().value(), static_cast<int>(sycl::errc::invalid))
337-
<< "sycl::exception code was not the expected "
338-
"sycl::errc::invalid.";
339-
// Throw uniquely identifiable exception to distinguish between that
340-
// the sycl::exception originates from the correct level.
341-
throw UnqiueException{};
342-
} catch (...) {
343-
FAIL() << "Unexpected exception was thrown in kernel invocation "
344-
"function.";
345-
}
346-
},
347-
SecondaryQueue);
348-
} catch (const UnqiueException &) {
349-
// Expected path
350-
} catch (const sycl::exception &) {
351-
FAIL() << "sycl::exception thrown at the wrong level.";
352-
} catch (...) {
353-
FAIL() << "Unexpected exception was thrown in submit.";
354-
}
355-
}
356-
357311
TEST(KernelBundle, UseKernelBundleWrongContextPrimaryQueueAndSecondaryQueue) {
358312
sycl::unittest::UrMock<> Mock;
359313

0 commit comments

Comments
 (0)