Lines Matching refs:dctx
14 PetscErrorCode construct_(PetscDeviceContext dctx) const noexcept in construct_()
17 PetscCall(PetscArrayzero(dctx, 1)); in construct_()
18 …PetscCall(PetscHeaderCreate_Private((PetscObject)dctx, PETSC_DEVICE_CONTEXT_CLASSID, "PetscDeviceC… in construct_()
19 PetscCall(PetscLogObjectCreate((PetscObject)dctx)); in construct_()
21 PetscCallCXX(PetscObjectCast(dctx)->cpp = new CxxData{dctx}); in construct_()
22 PetscCall(underlying().reset(dctx, false)); in construct_()
26 static PetscErrorCode destroy_(PetscDeviceContext dctx) noexcept in destroy_() argument
29 …dctx->numChildren, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Device context still has %" PetscIn… in destroy_()
30 PetscTryTypeMethod(dctx, destroy); in destroy_()
31 PetscCall(PetscDeviceDestroy(&dctx->device)); in destroy_()
32 PetscCall(PetscFree(dctx->childIDs)); in destroy_()
33 delete CxxDataCast(dctx); in destroy_()
34 PetscCall(PetscHeaderDestroy_Private(PetscObjectCast(dctx), PETSC_FALSE)); in destroy_()
38 static PetscErrorCode reset_(PetscDeviceContext dctx, bool zero = true) noexcept in reset_() argument
43 if (Petsc::util::exchange(dctx->usersetdevice, PETSC_FALSE)) { in reset_()
44 PetscTryTypeMethod(dctx, destroy); in reset_()
45 PetscCall(PetscDeviceDestroy(&dctx->device)); in reset_()
46 PetscCall(PetscArrayzero(dctx->ops, 1)); in reset_()
47 dctx->data = nullptr; in reset_()
49 PetscCall(PetscHeaderReset_Internal(PetscObjectCast(dctx))); in reset_()
50 dctx->numChildren = 0; in reset_()
51 dctx->setup = PETSC_FALSE; in reset_()
53 PetscCall(PetscArrayzero(dctx->childIDs, dctx->maxNumChildren)); in reset_()
54 PetscCall(CxxDataCast(dctx)->clear()); in reset_()
55 PetscCall(CxxDataCast(dctx)->reset_self(dctx)); in reset_()
57 dctx->streamType = PETSC_STREAM_DEFAULT; in reset_()
61 static PetscErrorCode invalidate_(PetscDeviceContext dctx) noexcept in invalidate_() argument
64 PetscCall(CxxDataCast(dctx)->reset_self(dctx)); in invalidate_()
101 PetscErrorCode PetscDeviceContextCreate(PetscDeviceContext *dctx) in PetscDeviceContextCreate() argument
104 PetscAssertPointer(dctx, 1); in PetscDeviceContextCreate()
107 PetscCall(contextPool.allocate(dctx)); in PetscDeviceContextCreate()
146 PetscErrorCode PetscDeviceContextDestroy(PetscDeviceContext *dctx) in PetscDeviceContextDestroy() argument
149 PetscAssertPointer(dctx, 1); in PetscDeviceContextDestroy()
150 if (!*dctx) PetscFunctionReturn(PETSC_SUCCESS); in PetscDeviceContextDestroy()
152 if (--(PetscObjectCast(*dctx)->refct) <= 0) { in PetscDeviceContextDestroy()
153 PetscCall(PetscDeviceContextCheckNotOrphaned_Internal(*dctx)); in PetscDeviceContextDestroy()
154 PetscCall(contextPool.deallocate(dctx)); in PetscDeviceContextDestroy()
157 *dctx = nullptr; in PetscDeviceContextDestroy()
181 PetscErrorCode PetscDeviceContextSetStreamType(PetscDeviceContext dctx, PetscStreamType type) in PetscDeviceContextSetStreamType() argument
186 PetscValidDeviceContext(dctx, 1); in PetscDeviceContextSetStreamType()
189 if (dctx->setup && (dctx->streamType != type)) { in PetscDeviceContextSetStreamType()
190 dctx->setup = PETSC_FALSE; in PetscDeviceContextSetStreamType()
191 PetscCall(PetscLogEventBegin(DCONTEXT_ChangeStream, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSetStreamType()
192 PetscUseTypeMethod(dctx, changestreamtype, type); in PetscDeviceContextSetStreamType()
193 PetscCall(PetscLogEventEnd(DCONTEXT_ChangeStream, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSetStreamType()
195 dctx->streamType = type; in PetscDeviceContextSetStreamType()
220 PetscErrorCode PetscDeviceContextGetStreamType(PetscDeviceContext dctx, PetscStreamType *type) in PetscDeviceContextGetStreamType() argument
223 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextGetStreamType()
225 *type = dctx->streamType; in PetscDeviceContextGetStreamType()
242 static PetscErrorCode PetscDeviceContextSetDevice_Private(PetscDeviceContext dctx, PetscDevice devi… in PetscDeviceContextSetDevice_Private() argument
246 PetscValidDeviceContext(dctx, 1); in PetscDeviceContextSetDevice_Private()
248 if (dctx->device && (dctx->device->id == device->id)) PetscFunctionReturn(PETSC_SUCCESS); in PetscDeviceContextSetDevice_Private()
249 PetscCall(PetscLogEventBegin(DCONTEXT_SetDevice, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSetDevice_Private()
250 PetscTryTypeMethod(dctx, destroy); in PetscDeviceContextSetDevice_Private()
251 PetscCall(PetscDeviceDestroy(&dctx->device)); in PetscDeviceContextSetDevice_Private()
252 PetscCall(PetscMemzero(dctx->ops, sizeof(*dctx->ops))); in PetscDeviceContextSetDevice_Private()
255 dctx->device = device; in PetscDeviceContextSetDevice_Private()
256 PetscCall((*device->ops->createcontext)(dctx)); in PetscDeviceContextSetDevice_Private()
257 PetscCall(PetscLogEventEnd(DCONTEXT_SetDevice, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSetDevice_Private()
258 dctx->setup = PETSC_FALSE; in PetscDeviceContextSetDevice_Private()
259 dctx->usersetdevice = user_set; in PetscDeviceContextSetDevice_Private()
263 PetscErrorCode PetscDeviceContextSetDefaultDeviceForType_Internal(PetscDeviceContext dctx, PetscDev… in PetscDeviceContextSetDefaultDeviceForType_Internal() argument
269 PetscCall(PetscDeviceContextSetDevice_Private(dctx, device, PETSC_FALSE)); in PetscDeviceContextSetDefaultDeviceForType_Internal()
298 PetscErrorCode PetscDeviceContextSetDevice(PetscDeviceContext dctx, PetscDevice device) in PetscDeviceContextSetDevice() argument
301 PetscCall(PetscDeviceContextSetDevice_Private(dctx, device, PETSC_TRUE)); in PetscDeviceContextSetDevice()
323 PetscErrorCode PetscDeviceContextGetDevice(PetscDeviceContext dctx, PetscDevice *device) in PetscDeviceContextGetDevice() argument
326 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextGetDevice()
328 …dctx->device, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "PetscDeviceContext %" PetscInt64_FMT " h… in PetscDeviceContextGetDevice()
329 *device = dctx->device; in PetscDeviceContextGetDevice()
352 PetscErrorCode PetscDeviceContextGetDeviceType(PetscDeviceContext dctx, PetscDeviceType *type) in PetscDeviceContextGetDeviceType() argument
357 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextGetDeviceType()
359 PetscCall(PetscDeviceContextGetDevice(dctx, &device)); in PetscDeviceContextGetDeviceType()
381 PetscErrorCode PetscDeviceContextSetUp(PetscDeviceContext dctx) in PetscDeviceContextSetUp() argument
384 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextSetUp()
385 if (dctx->setup) PetscFunctionReturn(PETSC_SUCCESS); in PetscDeviceContextSetUp()
386 if (!dctx->device) { in PetscDeviceContextSetUp()
389 …fo(dctx, "PetscDeviceContext %" PetscInt64_FMT " did not have an explicitly attached PetscDevice, … in PetscDeviceContextSetUp()
390 PetscCall(PetscDeviceContextSetDefaultDeviceForType_Internal(dctx, default_dtype)); in PetscDeviceContextSetUp()
392 PetscCall(PetscLogEventBegin(DCONTEXT_SetUp, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSetUp()
393 PetscUseTypeMethod(dctx, setup); in PetscDeviceContextSetUp()
394 PetscCall(PetscLogEventEnd(DCONTEXT_SetUp, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSetUp()
395 dctx->setup = PETSC_TRUE; in PetscDeviceContextSetUp()
399 static PetscErrorCode PetscDeviceContextDuplicate_Private(PetscDeviceContext dctx, PetscStreamType … in PetscDeviceContextDuplicate_Private() argument
402 PetscCall(PetscLogEventBegin(DCONTEXT_Duplicate, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextDuplicate_Private()
405 …if (const auto device = dctx->device) PetscCall(PetscDeviceContextSetDevice_Private(*dctxdup, devi… in PetscDeviceContextDuplicate_Private()
407 PetscCall(PetscLogEventEnd(DCONTEXT_Duplicate, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextDuplicate_Private()
443 PetscErrorCode PetscDeviceContextDuplicate(PetscDeviceContext dctx, PetscDeviceContext *dctxdup) in PetscDeviceContextDuplicate() argument
448 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextDuplicate()
450 PetscCall(PetscDeviceContextGetStreamType(dctx, &stype)); in PetscDeviceContextDuplicate()
451 PetscCall(PetscDeviceContextDuplicate_Private(dctx, stype, dctxdup)); in PetscDeviceContextDuplicate()
475 PetscErrorCode PetscDeviceContextQueryIdle(PetscDeviceContext dctx, PetscBool *idle) in PetscDeviceContextQueryIdle() argument
478 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextQueryIdle()
480 PetscCall(PetscLogEventBegin(DCONTEXT_QueryIdle, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextQueryIdle()
481 PetscUseTypeMethod(dctx, query, idle); in PetscDeviceContextQueryIdle()
482 PetscCall(PetscLogEventEnd(DCONTEXT_QueryIdle, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextQueryIdle()
483 …dctx, "PetscDeviceContext ('%s', id %" PetscInt64_FMT ") %s idle\n", PetscObjectCast(dctx)->name ?… in PetscDeviceContextQueryIdle()
587 PetscErrorCode PetscDeviceContextForkWithStreamType(PetscDeviceContext dctx, PetscStreamType stype,… in PetscDeviceContextForkWithStreamType() argument
594 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextForkWithStreamType()
600 PetscCall(PetscLogEventBegin(DCONTEXT_Fork, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextForkWithStreamType()
602 dctx->numChildren += n; in PetscDeviceContextForkWithStreamType()
604 if (dctx->numChildren > dctx->maxNumChildren) { in PetscDeviceContextForkWithStreamType()
605 const auto numChildren = dctx->numChildren; in PetscDeviceContextForkWithStreamType()
606 auto &maxNumChildren = dctx->maxNumChildren; in PetscDeviceContextForkWithStreamType()
610 if (auto &childIDs = dctx->childIDs) { in PetscDeviceContextForkWithStreamType()
625 for (PetscInt i = 0; ninput && (i < dctx->numChildren); ++i) { in PetscDeviceContextForkWithStreamType()
626 auto &childID = dctx->childIDs[i]; in PetscDeviceContextForkWithStreamType()
632 PetscCall(PetscDeviceContextDuplicate_Private(dctx, stype, &childctx)); in PetscDeviceContextForkWithStreamType()
633 PetscCall(PetscDeviceContextWaitForContext(childctx, dctx)); in PetscDeviceContextForkWithStreamType()
643 PetscCall(PetscLogEventEnd(DCONTEXT_Fork, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextForkWithStreamType()
644 …Call(PetscDebugInfo(dctx, "Forked %" PetscInt_FMT " children from parent %" PetscInt64_FMT " with … in PetscDeviceContextForkWithStreamType()
678 PetscErrorCode PetscDeviceContextFork(PetscDeviceContext dctx, PetscInt n, PetscDeviceContext **dsu… in PetscDeviceContextFork() argument
683 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextFork()
684 PetscCall(PetscDeviceContextGetStreamType(dctx, &stype)); in PetscDeviceContextFork()
685 PetscCall(PetscDeviceContextForkWithStreamType(dctx, stype, n, dsub)); in PetscDeviceContextFork()
755 PetscErrorCode PetscDeviceContextJoin(PetscDeviceContext dctx, PetscInt n, PetscDeviceContextJoinMo… in PetscDeviceContextJoin() argument
761 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextJoin()
768 PetscCall(PetscLogEventBegin(DCONTEXT_Join, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextJoin()
770 PetscCheckCompatibleDeviceContexts(dctx, 1, (*dsub)[i], 4); in PetscDeviceContextJoin()
771 PetscCall(PetscDeviceContextWaitForContext(dctx, (*dsub)[i])); in PetscDeviceContextJoin()
781 const auto children = dctx->childIDs; in PetscDeviceContextJoin()
782 const auto maxchild = dctx->maxNumChildren; in PetscDeviceContextJoin()
783 auto &nchild = dctx->numChildren; in PetscDeviceContextJoin()
803 for (PetscInt i = 0; i < n; ++i) PetscCall(PetscDeviceContextWaitForContext((*dsub)[i], dctx)); in PetscDeviceContextJoin()
809 PetscCall(PetscLogEventEnd(DCONTEXT_Join, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextJoin()
811 …Call(PetscDebugInfo(dctx, "Joined %" PetscInt_FMT " ctxs to ctx %" PetscInt64_FMT ", mode %s with … in PetscDeviceContextJoin()
843 PetscErrorCode PetscDeviceContextSynchronize(PetscDeviceContext dctx) in PetscDeviceContextSynchronize() argument
846 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextSynchronize()
847 PetscCall(PetscLogEventBegin(DCONTEXT_Sync, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSynchronize()
849 if (dctx->setup) { in PetscDeviceContextSynchronize()
850 PetscUseTypeMethod(dctx, synchronize); in PetscDeviceContextSynchronize()
851 PetscCall(PetscDeviceContextSyncClearMap_Internal(dctx)); in PetscDeviceContextSynchronize()
853 PetscCall(PetscLogEventEnd(DCONTEXT_Sync, dctx, nullptr, nullptr, nullptr)); in PetscDeviceContextSynchronize()
861 …llContextForDevice_Private(PetscBool user_set_device, PetscDevice device, PetscDeviceContext *dctx) in PetscDeviceContextGetNullContextForDevice_Private() argument
868 PetscAssertPointer(dctx, 3); in PetscDeviceContextGetNullContextForDevice_Private()
874 for (auto &&dctx : dvec) PetscCall(PetscDeviceContextDestroy(&dctx)); in PetscDeviceContextGetNullContextForDevice_Private()
893 PetscCall(PetscDeviceContextCreate(dctx)); in PetscDeviceContextGetNullContextForDevice_Private()
894 …PetscCall(PetscInfo(*dctx, "Initializing null PetscDeviceContext (of type %s) for device %" PetscI… in PetscDeviceContextGetNullContextForDevice_Private()
896 const auto pobj = PetscObjectCast(*dctx); in PetscDeviceContextGetNullContextForDevice_Private()
903 PetscCall(PetscDeviceContextSetStreamType(*dctx, PETSC_STREAM_DEFAULT)); in PetscDeviceContextGetNullContextForDevice_Private()
904 PetscCall(PetscDeviceContextSetDevice_Private(*dctx, device, user_set_device)); in PetscDeviceContextGetNullContextForDevice_Private()
905 PetscCall(PetscDeviceContextSetUp(*dctx)); in PetscDeviceContextGetNullContextForDevice_Private()
907 PetscCallCXX(ctxlist.insert(std::next(ctxlist.begin(), devid), *dctx)); in PetscDeviceContextGetNullContextForDevice_Private()
908 } else *dctx = ctxlist[devid]; in PetscDeviceContextGetNullContextForDevice_Private()
917 PetscErrorCode PetscDeviceContextGetNullContext_Internal(PetscDeviceContext *dctx) in PetscDeviceContextGetNullContext_Internal() argument
923 PetscAssertPointer(dctx, 1); in PetscDeviceContextGetNullContext_Internal()
926 PetscCall(PetscDeviceContextGetNullContextForDevice_Private(gctx->usersetdevice, gdev, dctx)); in PetscDeviceContextGetNullContext_Internal()
956 PetscErrorCode PetscDeviceContextSetFromOptions(MPI_Comm comm, PetscDeviceContext dctx) in PetscDeviceContextSetFromOptions() argument
958 const auto pobj = PetscObjectCast(dctx); in PetscDeviceContextSetFromOptions()
965 PetscValidDeviceContext(dctx, 2); in PetscDeviceContextSetFromOptions()
967 if (const auto device = dctx->device) PetscCall(PetscDeviceGetType(device, &dtype.first)); in PetscDeviceContextSetFromOptions()
968 PetscCall(PetscDeviceContextGetStreamType(dctx, &stype.first)); in PetscDeviceContextSetFromOptions()
983 …if (dtype.second) PetscCall(PetscDeviceContextSetDefaultDeviceForType_Internal(dctx, dtype.first)); in PetscDeviceContextSetFromOptions()
984 if (stype.second) PetscCall(PetscDeviceContextSetStreamType(dctx, stype.first)); in PetscDeviceContextSetFromOptions()
985 PetscCall(PetscDeviceContextSetUp(dctx)); in PetscDeviceContextSetFromOptions()
1006 PetscErrorCode PetscDeviceContextView(PetscDeviceContext dctx, PetscViewer viewer) in PetscDeviceContextView() argument
1011 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextView()
1020 PetscCall(PetscObjectPrintClassNamePrefixType(PetscObjectCast(dctx), sub)); in PetscDeviceContextView()
1022 PetscCall(PetscDeviceContextGetStreamType(dctx, &stype)); in PetscDeviceContextView()
1024 PetscCall(PetscViewerASCIIPrintf(sub, "children: %" PetscInt_FMT "\n", dctx->numChildren)); in PetscDeviceContextView()
1025 if (const auto nchild = dctx->numChildren) { in PetscDeviceContextView()
1029 PetscCall(PetscViewerASCIIPrintf(sub, "%" PetscInt64_FMT, dctx->childIDs[i])); in PetscDeviceContextView()
1031 PetscCall(PetscViewerASCIIPrintf(sub, "%" PetscInt64_FMT ", ", dctx->childIDs[i])); in PetscDeviceContextView()
1039 if (const auto device = dctx->device) PetscCall(PetscDeviceView(device, viewer)); in PetscDeviceContextView()
1056 PetscErrorCode PetscDeviceContextViewFromOptions(PetscDeviceContext dctx, PetscObject obj, const ch… in PetscDeviceContextViewFromOptions() argument
1059 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextViewFromOptions()
1062 PetscCall(PetscObjectViewFromOptions(PetscObjectCast(dctx), obj, name)); in PetscDeviceContextViewFromOptions()
1123 PetscErrorCode PetscDeviceContextGetStreamHandle(PetscDeviceContext dctx, void **handle) in PetscDeviceContextGetStreamHandle() argument
1126 PetscCall(PetscDeviceContextGetOptionalNullContext_Internal(&dctx)); in PetscDeviceContextGetStreamHandle()
1128 PetscCall(PetscDeviceContextGetStreamHandle_Internal(dctx, handle)); in PetscDeviceContextGetStreamHandle()