Lines Matching full:-
1 // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors.
2 // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
4 // SPDX-License-Identifier: BSD-2-Clause
16 #include "ceed-memcheck.h"
18 //------------------------------------------------------------------------------
20 //------------------------------------------------------------------------------
25 *has_valid_array = !!impl->array_allocated; in CeedVectorHasValidArray_Memcheck()
29 //------------------------------------------------------------------------------
31 //------------------------------------------------------------------------------
38 *has_borrowed_array_of_type = !!impl->array_borrowed; in CeedVectorHasBorrowedArrayOfType_Memcheck()
42 //------------------------------------------------------------------------------
44 //------------------------------------------------------------------------------
55 if (impl->array_allocated) { in CeedVectorSetArray_Memcheck()
56 for (CeedSize i = 0; i < length; i++) impl->array_allocated[i] = NAN; in CeedVectorSetArray_Memcheck()
57 VALGRIND_DISCARD(impl->allocated_block_id); in CeedVectorSetArray_Memcheck()
59 CeedCallBackend(CeedFree(&impl->array_allocated)); in CeedVectorSetArray_Memcheck()
61 if (impl->array_owned) { in CeedVectorSetArray_Memcheck()
62 for (CeedSize i = 0; i < length; i++) impl->array_owned[i] = NAN; in CeedVectorSetArray_Memcheck()
63 VALGRIND_DISCARD(impl->owned_block_id); in CeedVectorSetArray_Memcheck()
65 CeedCallBackend(CeedFree(&impl->array_owned)); in CeedVectorSetArray_Memcheck()
69 if (impl->array_borrowed) VALGRIND_DISCARD(impl->borrowed_block_id); in CeedVectorSetArray_Memcheck()
77 impl->array_owned = array; in CeedVectorSetArray_Memcheck()
78 impl->array_borrowed = NULL; in CeedVectorSetArray_Memcheck()
79 …impl->owned_block_id = VALGRIND_CREATE_BLOCK(impl->array_owned, length * sizeof(CeedScalar), "Owne… in CeedVectorSetArray_Memcheck()
82 impl->array_owned = NULL; in CeedVectorSetArray_Memcheck()
83 impl->array_borrowed = array; in CeedVectorSetArray_Memcheck()
84 …impl->borrowed_block_id = VALGRIND_CREATE_BLOCK(impl->array_borrowed, length * sizeof(CeedScalar),… in CeedVectorSetArray_Memcheck()
89 CeedCallBackend(CeedCalloc(length, &impl->array_allocated)); in CeedVectorSetArray_Memcheck()
90 …impl->allocated_block_id = VALGRIND_CREATE_BLOCK(impl->array_allocated, length * sizeof(CeedScalar… in CeedVectorSetArray_Memcheck()
92 memcpy(impl->array_allocated, array, length * sizeof(CeedScalar)); in CeedVectorSetArray_Memcheck()
94 for (CeedInt i = 0; i < length; i++) impl->array_allocated[i] = NAN; in CeedVectorSetArray_Memcheck()
99 //------------------------------------------------------------------------------
101 //------------------------------------------------------------------------------
109 …if (!impl->array_allocated) CeedCallBackend(CeedVectorSetArray_Memcheck(vec, CEED_MEM_HOST, CEED_C… in CeedVectorSetValue_Memcheck()
110 assert(impl->array_allocated); in CeedVectorSetValue_Memcheck()
111 for (CeedSize i = 0; i < length; i++) impl->array_allocated[i] = value; in CeedVectorSetValue_Memcheck()
115 //------------------------------------------------------------------------------
117 //------------------------------------------------------------------------------
125 …if (!impl->array_allocated) CeedCallBackend(CeedVectorSetArray_Memcheck(vec, CEED_MEM_HOST, CEED_C… in CeedVectorSetValueStrided_Memcheck()
126 assert(impl->array_allocated); in CeedVectorSetValueStrided_Memcheck()
127 if (stop == -1) stop = length; in CeedVectorSetValueStrided_Memcheck()
128 for (CeedSize i = start; i < stop; i += step) impl->array_allocated[i] = val; in CeedVectorSetValueStrided_Memcheck()
132 //------------------------------------------------------------------------------
134 //------------------------------------------------------------------------------
145 if (impl->array_owned) { in CeedVectorSyncArray_Memcheck()
146 memcpy(impl->array_owned, impl->array_allocated, length * sizeof(CeedScalar)); in CeedVectorSyncArray_Memcheck()
148 if (impl->array_borrowed) { in CeedVectorSyncArray_Memcheck()
149 memcpy(impl->array_borrowed, impl->array_allocated, length * sizeof(CeedScalar)); in CeedVectorSyncArray_Memcheck()
154 //------------------------------------------------------------------------------
156 //------------------------------------------------------------------------------
170 (*array) = impl->array_borrowed; in CeedVectorTakeArray_Memcheck()
171 impl->array_borrowed = NULL; in CeedVectorTakeArray_Memcheck()
172 VALGRIND_DISCARD(impl->borrowed_block_id); in CeedVectorTakeArray_Memcheck()
174 // De-allocate internal memory in CeedVectorTakeArray_Memcheck()
175 if (impl->array_allocated) { in CeedVectorTakeArray_Memcheck()
176 for (CeedSize i = 0; i < length; i++) impl->array_allocated[i] = NAN; in CeedVectorTakeArray_Memcheck()
177 VALGRIND_DISCARD(impl->allocated_block_id); in CeedVectorTakeArray_Memcheck()
179 CeedCallBackend(CeedFree(&impl->array_allocated)); in CeedVectorTakeArray_Memcheck()
183 //------------------------------------------------------------------------------
185 //------------------------------------------------------------------------------
196 CeedCallBackend(CeedCalloc(length, &impl->array_writable_copy)); in CeedVectorGetArray_Memcheck()
197 …impl->writable_block_id = VALGRIND_CREATE_BLOCK(impl->array_writable_copy, length * sizeof(CeedSca… in CeedVectorGetArray_Memcheck()
198 memcpy(impl->array_writable_copy, impl->array_allocated, length * sizeof(CeedScalar)); in CeedVectorGetArray_Memcheck()
199 *array = impl->array_writable_copy; in CeedVectorGetArray_Memcheck()
203 //------------------------------------------------------------------------------
205 //------------------------------------------------------------------------------
215 // Create and return read-only buffer in CeedVectorGetArrayRead_Memcheck()
216 if (!impl->array_read_only_copy) { in CeedVectorGetArrayRead_Memcheck()
217 CeedCallBackend(CeedCalloc(length, &impl->array_read_only_copy)); in CeedVectorGetArrayRead_Memcheck()
218 …impl->writable_block_id = VALGRIND_CREATE_BLOCK(impl->array_read_only_copy, length * sizeof(CeedSc… in CeedVectorGetArrayRead_Memcheck()
219 memcpy(impl->array_read_only_copy, impl->array_allocated, length * sizeof(CeedScalar)); in CeedVectorGetArrayRead_Memcheck()
221 *array = impl->array_read_only_copy; in CeedVectorGetArrayRead_Memcheck()
225 //------------------------------------------------------------------------------
227 //------------------------------------------------------------------------------
238 …if (!impl->array_allocated) CeedCallBackend(CeedVectorSetArray_Memcheck(vec, mem_type, CEED_COPY_V… in CeedVectorGetArrayWrite_Memcheck()
245 impl->is_write_only_access = true; in CeedVectorGetArrayWrite_Memcheck()
249 //------------------------------------------------------------------------------
251 //------------------------------------------------------------------------------
259 // Check for unset entries after write-only access in CeedVectorRestoreArray_Memcheck()
260 if (impl->is_write_only_access) { in CeedVectorRestoreArray_Memcheck()
262 if (isnan(impl->array_writable_copy[i])) { in CeedVectorRestoreArray_Memcheck()
264 … "WARNING: Vec entry %" CeedSize_FMT " is NaN after restoring write-only access", i); in CeedVectorRestoreArray_Memcheck()
267 impl->is_write_only_access = false; in CeedVectorRestoreArray_Memcheck()
271 memcpy(impl->array_allocated, impl->array_writable_copy, length * sizeof(CeedScalar)); in CeedVectorRestoreArray_Memcheck()
275 for (CeedSize i = 0; i < length; i++) impl->array_writable_copy[i] = NAN; in CeedVectorRestoreArray_Memcheck()
276 CeedCallBackend(CeedFree(&impl->array_writable_copy)); in CeedVectorRestoreArray_Memcheck()
277 VALGRIND_DISCARD(impl->writable_block_id); in CeedVectorRestoreArray_Memcheck()
281 //------------------------------------------------------------------------------
282 // Vector Restore Array Read-Only
283 //------------------------------------------------------------------------------
291 // Verify no changes made during read-only access in CeedVectorRestoreArrayRead_Memcheck()
292 …bool is_changed = memcmp(impl->array_allocated, impl->array_read_only_copy, length * sizeof(CeedSc… in CeedVectorRestoreArrayRead_Memcheck()
294 …dVectorReturnCeed(vec), CEED_ERROR_BACKEND, "Array data changed while accessed in read-only mode"); in CeedVectorRestoreArrayRead_Memcheck()
296 // Invalidate read-only buffer in CeedVectorRestoreArrayRead_Memcheck()
297 for (CeedSize i = 0; i < length; i++) impl->array_read_only_copy[i] = NAN; in CeedVectorRestoreArrayRead_Memcheck()
298 CeedCallBackend(CeedFree(&impl->array_read_only_copy)); in CeedVectorRestoreArrayRead_Memcheck()
299 VALGRIND_DISCARD(impl->read_only_block_id); in CeedVectorRestoreArrayRead_Memcheck()
303 //------------------------------------------------------------------------------
305 //------------------------------------------------------------------------------
314 …if (fabs(impl->array_allocated[i]) > CEED_EPSILON) impl->array_allocated[i] = 1. / impl->array_all… in CeedVectorReciprocal_Memcheck()
319 //------------------------------------------------------------------------------
321 //------------------------------------------------------------------------------
329 for (CeedSize i = 0; i < length; i++) impl->array_allocated[i] *= alpha; in CeedVectorScale_Memcheck()
333 //------------------------------------------------------------------------------
335 //------------------------------------------------------------------------------
344 …for (CeedSize i = 0; i < length; i++) impl_y->array_allocated[i] += alpha * impl_x->array_allocate… in CeedVectorAXPY_Memcheck()
348 //------------------------------------------------------------------------------
350 //------------------------------------------------------------------------------
359 …CeedSize i = 0; i < length; i++) impl_y->array_allocated[i] = alpha * impl_x->array_allocated[i] +… in CeedVectorAXPBY_Memcheck()
363 //------------------------------------------------------------------------------
365 //------------------------------------------------------------------------------
375 …if (!impl_w->array_allocated) CeedCallBackend(CeedVectorSetArray_Memcheck(w, CEED_MEM_HOST, CEED_C… in CeedVectorPointwiseMult_Memcheck()
376 assert(impl_w->array_allocated); in CeedVectorPointwiseMult_Memcheck()
377 …for (CeedSize i = 0; i < length; i++) impl_w->array_allocated[i] = impl_x->array_allocated[i] * im… in CeedVectorPointwiseMult_Memcheck()
381 //------------------------------------------------------------------------------
383 //------------------------------------------------------------------------------
389 if (impl->array_allocated) { in CeedVectorDestroy_Memcheck()
390 CeedCallBackend(CeedFree(&impl->array_allocated)); in CeedVectorDestroy_Memcheck()
391 VALGRIND_DISCARD(impl->allocated_block_id); in CeedVectorDestroy_Memcheck()
393 if (impl->array_owned) { in CeedVectorDestroy_Memcheck()
394 CeedCallBackend(CeedFree(&impl->array_owned)); in CeedVectorDestroy_Memcheck()
395 VALGRIND_DISCARD(impl->owned_block_id); in CeedVectorDestroy_Memcheck()
397 if (impl->array_borrowed) { in CeedVectorDestroy_Memcheck()
398 VALGRIND_DISCARD(impl->borrowed_block_id); in CeedVectorDestroy_Memcheck()
404 //------------------------------------------------------------------------------
406 //------------------------------------------------------------------------------
436 //------------------------------------------------------------------------------