File indexing completed on 2026-07-26 08:22:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "traccc/alpaka/utils/vecmem_objects.hpp"
0011
0012 #include "get_queue.hpp"
0013
0014
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
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 };
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 }