Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
memoryHandle.cpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
23#include "shamcomm/logs.hpp"
26
27namespace sham::details {
28
29 template<USMKindTarget target>
31 size_t size, std::shared_ptr<DeviceScheduler> dev_sched, std::optional<size_t> alignment) {
32
33 StackEntry __st{};
34
35 auto create = [&]() {
36 if (size > 0) {
37 return USMPtrHolder<target>::create(size, dev_sched, alignment);
38 } else {
40 }
41 };
42
43 return create();
44 }
45
46 template<USMKindTarget target>
48 USMPtrHolder<target> &&usm_ptr_hold, details::BufferEventHandler &&events) {
49
50 StackEntry __st{};
51
52 shamcomm::logs::debug_alloc_ln("memoryHandle", "waiting event completion ...");
53 events.wait_all();
54 shamcomm::logs::debug_alloc_ln("memoryHandle", "done, freeing memory");
55 usm_ptr_hold.free_ptr();
56 }
57
58#ifndef DOXYGEN
59 template USMPtrHolder<device> create_usm_ptr<device>(
60 size_t size, std::shared_ptr<DeviceScheduler> dev_sched, std::optional<size_t> alignment);
61 template USMPtrHolder<shared> create_usm_ptr<shared>(
62 size_t size, std::shared_ptr<DeviceScheduler> dev_sched, std::optional<size_t> alignment);
63 template USMPtrHolder<host> create_usm_ptr<host>(
64 size_t size, std::shared_ptr<DeviceScheduler> dev_sched, std::optional<size_t> alignment);
65
66 template void release_usm_ptr<device>(
67 USMPtrHolder<device> &&usm_ptr_hold, details::BufferEventHandler &&events);
68 template void release_usm_ptr<shared>(
69 USMPtrHolder<shared> &&usm_ptr_hold, details::BufferEventHandler &&events);
70 template void release_usm_ptr<host>(
71 USMPtrHolder<host> &&usm_ptr_hold, details::BufferEventHandler &&events);
72
73#endif
74
75} // namespace sham::details
This file contains the declaration of the USMPtrHolder class.
Class for holding a USM pointer.
static USMPtrHolder create(size_t sz, std::shared_ptr< DeviceScheduler > dev_sched, std::optional< size_t > alignment=std::nullopt)
Create a USM pointer holder.
Class that manages the event state of a SYCL USM buffer.
This file contains the declaration of the memory handling and its methods.
void release_usm_ptr(USMPtrHolder< target > &&usm_ptr_hold, details::BufferEventHandler &&events)
Release a USM pointer.
USMPtrHolder< target > create_usm_ptr(size_t size, std::shared_ptr< DeviceScheduler > dev_sched, std::optional< size_t > alignment=std::nullopt)
Create a USM pointer with at least the given size in bytes.
This file contains the definition for the stacktrace related functionality.
Functions related to the MPI communicator.