42#include "Tpetra_Details_StaticView.hpp"
54constexpr size_t minimum_initial_size =
sizeof (double) * 30 * 2;
60#ifdef KOKKOS_ENABLE_CUDA
62void* cuda_memory_ =
nullptr;
63size_t cuda_memory_size_ = 0;
65void finalize_cuda_memory ()
67 if (cuda_memory_ !=
nullptr) {
68 Kokkos::kokkos_free<Kokkos::CudaSpace> (cuda_memory_);
69 cuda_memory_ =
nullptr;
70 cuda_memory_size_ = 0;
74void* cuda_uvm_memory_ =
nullptr;
75size_t cuda_uvm_memory_size_ = 0;
77void finalize_cuda_uvm_memory ()
79 if (cuda_uvm_memory_ !=
nullptr) {
80 Kokkos::kokkos_free<Kokkos::CudaUVMSpace> (cuda_uvm_memory_);
81 cuda_uvm_memory_ =
nullptr;
82 cuda_uvm_memory_size_ = 0;
86void* cuda_host_pinned_memory_ =
nullptr;
87size_t cuda_host_pinned_memory_size_ = 0;
89void finalize_cuda_host_pinned_memory ()
91 if (cuda_host_pinned_memory_ !=
nullptr) {
92 Kokkos::kokkos_free<Kokkos::CudaHostPinnedSpace> (cuda_host_pinned_memory_);
93 cuda_host_pinned_memory_ =
nullptr;
94 cuda_host_pinned_memory_size_ = 0;
99#ifdef KOKKOS_ENABLE_HIP
101void* hip_memory_ =
nullptr;
102size_t hip_memory_size_ = 0;
104void finalize_hip_memory ()
106 if (hip_memory_ !=
nullptr) {
107 Kokkos::kokkos_free<Kokkos::Experimental::HIPSpace> (hip_memory_);
108 hip_memory_ =
nullptr;
109 hip_memory_size_ = 0;
113void* hip_host_pinned_memory_ =
nullptr;
114size_t hip_host_pinned_memory_size_ = 0;
116void finalize_hip_host_pinned_memory ()
118 if (hip_host_pinned_memory_ !=
nullptr) {
119 Kokkos::kokkos_free<Kokkos::Experimental::HIPHostPinnedSpace> (hip_host_pinned_memory_);
120 hip_host_pinned_memory_ =
nullptr;
121 hip_host_pinned_memory_size_ = 0;
126#ifdef KOKKOS_ENABLE_SYCL
128void* sycl_memory_ =
nullptr;
129size_t sycl_memory_size_ = 0;
131void finalize_sycl_memory ()
133 if (sycl_memory_ !=
nullptr) {
134 Kokkos::kokkos_free<Kokkos::Experimental::SYCLDeviceUSMSpace> (sycl_memory_);
135 sycl_memory_ =
nullptr;
136 sycl_memory_size_ = 0;
140void* sycl_shared_memory_ =
nullptr;
141size_t sycl_shared_memory_size_ = 0;
143void finalize_sycl_shared_memory ()
145 if (sycl_shared_memory_ !=
nullptr) {
146 Kokkos::kokkos_free<Kokkos::Experimental::SYCLSharedUSMSpace> (sycl_shared_memory_);
147 sycl_shared_memory_ =
nullptr;
148 sycl_shared_memory_size_ = 0;
153void* host_memory_ =
nullptr;
154size_t host_memory_size_ = 0;
156void finalize_host_memory ()
158 if (host_memory_ !=
nullptr) {
159 Kokkos::kokkos_free<Kokkos::HostSpace> (host_memory_);
160 host_memory_ =
nullptr;
161 host_memory_size_ = 0;
167#ifdef KOKKOS_ENABLE_CUDA
170StaticKokkosAllocation<Kokkos::CudaSpace>::
171resize (Kokkos::CudaSpace ,
174 using memory_space = Kokkos::CudaSpace;
175 static bool created_finalize_hook =
false;
177 if (size > cuda_memory_size_) {
178 if (cuda_memory_ !=
nullptr) {
179 Kokkos::kokkos_free<memory_space> (cuda_memory_);
181 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
182 cuda_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
183 cuda_memory_size_ = size;
185 if (! created_finalize_hook) {
186 Kokkos::push_finalize_hook (finalize_cuda_memory);
187 created_finalize_hook =
true;
194StaticKokkosAllocation<Kokkos::CudaUVMSpace>::
195resize (Kokkos::CudaUVMSpace ,
198 using memory_space = Kokkos::CudaUVMSpace;
199 static bool created_finalize_hook =
false;
201 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
202 if (req_size > cuda_uvm_memory_size_) {
203 if (cuda_uvm_memory_ !=
nullptr) {
204 Kokkos::kokkos_free<memory_space> (cuda_uvm_memory_);
206 cuda_uvm_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
207 cuda_uvm_memory_size_ = req_size;
209 if (! created_finalize_hook) {
210 Kokkos::push_finalize_hook (finalize_cuda_uvm_memory);
211 created_finalize_hook =
true;
214 return cuda_uvm_memory_;
218StaticKokkosAllocation<Kokkos::CudaHostPinnedSpace>::
219resize (Kokkos::CudaHostPinnedSpace ,
222 using memory_space = Kokkos::CudaHostPinnedSpace;
223 static bool created_finalize_hook =
false;
225 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
226 if (req_size > cuda_host_pinned_memory_size_) {
227 if (cuda_host_pinned_memory_ !=
nullptr) {
228 Kokkos::kokkos_free<memory_space> (cuda_host_pinned_memory_);
230 cuda_host_pinned_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
231 cuda_host_pinned_memory_size_ = req_size;
233 if (! created_finalize_hook) {
234 Kokkos::push_finalize_hook (finalize_cuda_host_pinned_memory);
235 created_finalize_hook =
true;
238 return cuda_host_pinned_memory_;
243#ifdef KOKKOS_ENABLE_HIP
246StaticKokkosAllocation<Kokkos::Experimental::HIPSpace>::
247resize (Kokkos::Experimental::HIPSpace ,
250 using memory_space = Kokkos::Experimental::HIPSpace;
251 static bool created_finalize_hook =
false;
253 if (size > hip_memory_size_) {
254 if (hip_memory_ !=
nullptr) {
255 Kokkos::kokkos_free<memory_space> (hip_memory_);
257 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
258 hip_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
259 hip_memory_size_ = size;
261 if (! created_finalize_hook) {
262 Kokkos::push_finalize_hook (finalize_hip_memory);
263 created_finalize_hook =
true;
270StaticKokkosAllocation<Kokkos::Experimental::HIPHostPinnedSpace>::
271resize (Kokkos::Experimental::HIPHostPinnedSpace ,
274 using memory_space = Kokkos::Experimental::HIPHostPinnedSpace;
275 static bool created_finalize_hook =
false;
277 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
278 if (req_size > hip_host_pinned_memory_size_) {
279 if (hip_host_pinned_memory_ !=
nullptr) {
280 Kokkos::kokkos_free<memory_space> (hip_host_pinned_memory_);
282 hip_host_pinned_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
283 hip_host_pinned_memory_size_ = req_size;
285 if (! created_finalize_hook) {
286 Kokkos::push_finalize_hook (finalize_hip_host_pinned_memory);
287 created_finalize_hook =
true;
290 return hip_host_pinned_memory_;
295#ifdef KOKKOS_ENABLE_SYCL
299StaticKokkosAllocation<Kokkos::Experimental::SYCLDeviceUSMSpace>::
300resize (Kokkos::Experimental::SYCLDeviceUSMSpace ,
303 using memory_space = Kokkos::Experimental::SYCLDeviceUSMSpace;
304 static bool created_finalize_hook =
false;
306 if (size > sycl_memory_size_) {
307 if (sycl_memory_ !=
nullptr) {
308 Kokkos::kokkos_free<memory_space> (sycl_memory_);
310 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
311 sycl_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
312 sycl_memory_size_ = size;
314 if (! created_finalize_hook) {
315 Kokkos::push_finalize_hook (finalize_sycl_memory);
316 created_finalize_hook =
true;
324StaticKokkosAllocation<Kokkos::Experimental::SYCLSharedUSMSpace>::
325resize (Kokkos::Experimental::SYCLSharedUSMSpace ,
328 using memory_space = Kokkos::Experimental::SYCLSharedUSMSpace;
329 static bool created_finalize_hook =
false;
331 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
332 if (req_size > sycl_shared_memory_size_) {
333 if (sycl_shared_memory_ !=
nullptr) {
334 Kokkos::kokkos_free<memory_space> (sycl_shared_memory_);
336 sycl_shared_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
337 sycl_shared_memory_size_ = req_size;
339 if (! created_finalize_hook) {
340 Kokkos::push_finalize_hook (finalize_sycl_shared_memory);
341 created_finalize_hook =
true;
344 return sycl_shared_memory_;
350StaticKokkosAllocation<Kokkos::HostSpace>::
351resize (Kokkos::HostSpace ,
354 using memory_space = Kokkos::HostSpace;
355 static bool created_finalize_hook =
false;
357 const size_t req_size = size > minimum_initial_size ? size : minimum_initial_size;
358 if (req_size > host_memory_size_) {
359 if (host_memory_ !=
nullptr) {
360 Kokkos::kokkos_free<memory_space> (host_memory_);
362 host_memory_ = Kokkos::kokkos_malloc<memory_space> (req_size);
363 host_memory_size_ = req_size;
365 if (! created_finalize_hook) {
366 Kokkos::push_finalize_hook (finalize_host_memory);
367 created_finalize_hook =
true;
Implementation details of Tpetra.
Namespace Tpetra contains the class and methods constituting the Tpetra library.