Warning, /acts/Traccc/extern/alpaka/alpaka-2.0.0-sycl-enqueue-forward.patch is written in an unsupported language. File is not indexed.
0001 diff --git a/include/alpaka/queue/sycl/QueueGenericSyclBase.hpp b/include/alpaka/queue/sycl/QueueGenericSyclBase.hpp
0002 index 6fe66b46f568..b3eb212a87be 100644
0003 --- a/include/alpaka/queue/sycl/QueueGenericSyclBase.hpp
0004 +++ b/include/alpaka/queue/sycl/QueueGenericSyclBase.hpp
0005 @@ -127,30 +127,31 @@ namespace alpaka
0006 }
0007
0008 template<bool TBlocking, typename TTask>
0009 - auto enqueue(TTask const& task) -> void
0010 + auto enqueue(TTask&& task) -> void
0011 {
0012 {
0013 + using TaskType = std::decay_t<TTask>;
0014 std::lock_guard<std::shared_mutex> lock{m_mutex};
0015
0016 clean_dependencies();
0017
0018 // Execute task
0019 - if constexpr(is_sycl_task<TTask> && !is_sycl_kernel<TTask>) // Copy / Fill
0020 + if constexpr(is_sycl_task<TaskType> && !is_sycl_kernel<TaskType>) // Copy / Fill
0021 {
0022 m_last_event = task(m_queue, m_dependencies); // Will call queue.{copy, fill} internally
0023 }
0024 else
0025 {
0026 m_last_event = m_queue.submit(
0027 - [this, &task](sycl::handler& cgh)
0028 + [this, captured_task = std::forward<TTask>(task)](sycl::handler& cgh) mutable
0029 {
0030 if(!m_dependencies.empty())
0031 cgh.depends_on(m_dependencies);
0032
0033 - if constexpr(is_sycl_kernel<TTask>) // Kernel
0034 - task(cgh); // Will call cgh.parallel_for internally
0035 + if constexpr(is_sycl_kernel<TaskType>) // Kernel
0036 + captured_task(cgh); // Will call cgh.parallel_for internally
0037 else // Host
0038 - cgh.host_task(task);
0039 + cgh.host_task(std::move(captured_task));
0040 });
0041 }
0042
0043 @@ -241,11 +242,11 @@ namespace alpaka
0044 template<concepts::Tag TTag, bool TBlocking, typename TTask>
0045 struct Enqueue<alpaka::detail::QueueGenericSyclBase<TTag, TBlocking>, TTask>
0046 {
0047 - static auto enqueue(alpaka::detail::QueueGenericSyclBase<TTag, TBlocking>& queue, TTask const& task)
0048 - -> void
0049 + template<typename UTask>
0050 + static auto enqueue(alpaka::detail::QueueGenericSyclBase<TTag, TBlocking>& queue, UTask&& task) -> void
0051 {
0052 ALPAKA_DEBUG_MINIMAL_LOG_SCOPE;
0053 - queue.m_spQueueImpl->template enqueue<TBlocking>(task);
0054 + queue.m_spQueueImpl->template enqueue<TBlocking>(std::forward<UTask>(task));
0055 }
0056 };
0057