Back to home page

EIC code displayed by LXR

 
 

    


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