Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:22:04

0001 /**
0002  * traccc library, part of the ACTS project (R&D line)
0003  *
0004  * (c) 2025 CERN for the benefit of the ACTS project
0005  *
0006  * Mozilla Public License Version 2.0
0007  */
0008 
0009 // Local include(s).
0010 #include "traccc/alpaka/utils/vecmem_objects.hpp"
0011 
0012 #include "get_queue.hpp"
0013 
0014 // VecMem include(s).
0015 #if defined(ALPAKA_ACC_GPU_CUDA_ENABLED)
0016 #include <vecmem/memory/cuda/device_memory_resource.hpp>
0017 #include <vecmem/memory/cuda/host_memory_resource.hpp>
0018 #include <vecmem/memory/cuda/managed_memory_resource.hpp>
0019 #include <vecmem/utils/cuda/async_copy.hpp>
0020 #include <vecmem/utils/cuda/copy.hpp>
0021 #elif defined(ALPAKA_ACC_GPU_HIP_ENABLED)
0022 #include <vecmem/memory/hip/device_memory_resource.hpp>
0023 #include <vecmem/memory/hip/host_memory_resource.hpp>
0024 #include <vecmem/memory/hip/managed_memory_resource.hpp>
0025 #include <vecmem/utils/hip/async_copy.hpp>
0026 #include <vecmem/utils/hip/copy.hpp>
0027 #elif defined(ALPAKA_ACC_SYCL_ENABLED)
0028 #include <vecmem/memory/sycl/device_memory_resource.hpp>
0029 #include <vecmem/memory/sycl/host_memory_resource.hpp>
0030 #include <vecmem/memory/sycl/shared_memory_resource.hpp>
0031 #include <vecmem/utils/sycl/async_copy.hpp>
0032 #include <vecmem/utils/sycl/copy.hpp>
0033 #else
0034 #include <vecmem/memory/host_memory_resource.hpp>
0035 #include <vecmem/utils/copy.hpp>
0036 #endif
0037 
0038 namespace traccc::alpaka {
0039 
0040 struct vecmem_objects::impl {
0041   /// Constructor
0042   explicit impl([[maybe_unused]] queue& q)
0043       :
0044 #if defined(ALPAKA_ACC_GPU_CUDA_ENABLED) || defined(ALPAKA_ACC_GPU_HIP_ENABLED)
0045         m_host_mr(),
0046         m_device_mr(
0047             ::alpaka::getNativeHandle(::alpaka::getDev(details::get_queue(q)))),
0048         m_shared_mr(),
0049         m_copy(),
0050         m_async_copy(::alpaka::getNativeHandle(details::get_queue(q)))
0051 #elif defined(ALPAKA_ACC_SYCL_ENABLED)
0052         m_queue(::alpaka::getNativeHandle(details::get_queue(q))),
0053         m_host_mr(&m_queue),
0054         m_device_mr(&m_queue),
0055         m_shared_mr(&m_queue),
0056         m_copy(&m_queue),
0057         m_async_copy(&m_queue)
0058 #else
0059         m_host_mr(),
0060         m_device_mr(),
0061         m_shared_mr(),
0062         m_copy(),
0063         m_async_copy()
0064 #endif
0065   {
0066   }
0067 
0068 #if defined(ALPAKA_ACC_GPU_CUDA_ENABLED)
0069   vecmem::cuda::host_memory_resource m_host_mr;
0070   vecmem::cuda::device_memory_resource m_device_mr;
0071   vecmem::cuda::managed_memory_resource m_shared_mr;
0072   vecmem::cuda::copy m_copy;
0073   vecmem::cuda::async_copy m_async_copy;
0074 #elif defined(ALPAKA_ACC_GPU_HIP_ENABLED)
0075   vecmem::hip::host_memory_resource m_host_mr;
0076   vecmem::hip::device_memory_resource m_device_mr;
0077   vecmem::hip::managed_memory_resource m_shared_mr;
0078   vecmem::hip::copy m_copy;
0079   vecmem::hip::async_copy m_async_copy;
0080 #elif defined(ALPAKA_ACC_SYCL_ENABLED)
0081   ::sycl::queue m_queue;
0082   vecmem::sycl::host_memory_resource m_host_mr;
0083   vecmem::sycl::device_memory_resource m_device_mr;
0084   vecmem::sycl::shared_memory_resource m_shared_mr;
0085   vecmem::sycl::copy m_copy;
0086   vecmem::sycl::async_copy m_async_copy;
0087 #else
0088   vecmem::host_memory_resource m_host_mr;
0089   vecmem::host_memory_resource m_device_mr;
0090   vecmem::host_memory_resource m_shared_mr;
0091   vecmem::copy m_copy;
0092   vecmem::copy m_async_copy;
0093 #endif
0094 
0095 };  // struct vecmem_objects::impl
0096 
0097 vecmem_objects::vecmem_objects(queue& q) : m_impl{std::make_unique<impl>(q)} {}
0098 
0099 vecmem_objects::vecmem_objects(vecmem_objects&&) noexcept = default;
0100 
0101 vecmem_objects::~vecmem_objects() = default;
0102 
0103 vecmem_objects& vecmem_objects::operator=(vecmem_objects&&) noexcept = default;
0104 
0105 vecmem::memory_resource& vecmem_objects::host_mr() const {
0106   return m_impl->m_host_mr;
0107 }
0108 
0109 vecmem::memory_resource& vecmem_objects::device_mr() const {
0110   return m_impl->m_device_mr;
0111 }
0112 
0113 vecmem::memory_resource& vecmem_objects::shared_mr() const {
0114   return m_impl->m_shared_mr;
0115 }
0116 
0117 vecmem::copy& vecmem_objects::copy() const {
0118   return m_impl->m_copy;
0119 }
0120 
0121 vecmem::copy& vecmem_objects::async_copy() const {
0122   return m_impl->m_async_copy;
0123 }
0124 
0125 }  // namespace traccc::alpaka