1 #include <petscsys.h>
2 #include <petscviewer.h>
3 #include <petsc/private/deviceimpl.h>
4
5 /* implementations for <include/petscdevice.h> */
PetscDeviceCreate(PETSC_UNUSED PetscDeviceType type,PETSC_UNUSED PetscInt devid,PetscDevice * device)6 PetscErrorCode PetscDeviceCreate(PETSC_UNUSED PetscDeviceType type, PETSC_UNUSED PetscInt devid, PetscDevice *device)
7 {
8 PetscFunctionBegin;
9 PetscAssertPointer(device, 3);
10 *device = NULL;
11 PetscFunctionReturn(PETSC_SUCCESS);
12 }
13
PetscDeviceDestroy(PetscDevice * device)14 PetscErrorCode PetscDeviceDestroy(PetscDevice *device)
15 {
16 PetscFunctionBegin;
17 PetscAssertPointer(device, 1);
18 if (*device) *device = NULL;
19 PetscFunctionReturn(PETSC_SUCCESS);
20 }
21
PetscDeviceConfigure(PETSC_UNUSED PetscDevice device)22 PetscErrorCode PetscDeviceConfigure(PETSC_UNUSED PetscDevice device)
23 {
24 PetscFunctionBegin;
25 PetscFunctionReturn(PETSC_SUCCESS);
26 }
27
PetscDeviceView(PETSC_UNUSED PetscDevice device,PetscViewer viewer)28 PetscErrorCode PetscDeviceView(PETSC_UNUSED PetscDevice device, PetscViewer viewer)
29 {
30 PetscFunctionBegin;
31 if (viewer) PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2);
32 PetscFunctionReturn(PETSC_SUCCESS);
33 }
34
PetscDeviceGetType(PETSC_UNUSED PetscDevice device,PetscDeviceType * type)35 PetscErrorCode PetscDeviceGetType(PETSC_UNUSED PetscDevice device, PetscDeviceType *type)
36 {
37 PetscFunctionBegin;
38 PetscAssertPointer(type, 2);
39 *type = PETSC_DEVICE_DEFAULT();
40 PetscFunctionReturn(PETSC_SUCCESS);
41 }
42
PetscDeviceGetDeviceId(PETSC_UNUSED PetscDevice device,PetscInt * id)43 PetscErrorCode PetscDeviceGetDeviceId(PETSC_UNUSED PetscDevice device, PetscInt *id)
44 {
45 PetscFunctionBegin;
46 PetscAssertPointer(id, 2);
47 *id = 0;
48 PetscFunctionReturn(PETSC_SUCCESS);
49 }
50
PETSC_DEVICE_DEFAULT(void)51 PetscDeviceType PETSC_DEVICE_DEFAULT(void)
52 {
53 return PETSC_DEVICE_HOST;
54 }
55
PetscDeviceSetDefaultDeviceType(PetscDeviceType type)56 PetscErrorCode PetscDeviceSetDefaultDeviceType(PetscDeviceType type)
57 {
58 PetscFunctionBegin;
59 PetscCheck(type == PETSC_DEVICE_HOST, PETSC_COMM_SELF, PETSC_ERR_USER_INPUT, "PetscDevice is disabled but specified PetscDeviceType %s is different than %s", PetscDeviceTypes[type], PetscDeviceTypes[PETSC_DEVICE_HOST]);
60 PetscFunctionReturn(PETSC_SUCCESS);
61 }
62
PetscDeviceInitialize(PETSC_UNUSED PetscDeviceType type)63 PetscErrorCode PetscDeviceInitialize(PETSC_UNUSED PetscDeviceType type)
64 {
65 PetscFunctionBegin;
66 PetscFunctionReturn(PETSC_SUCCESS);
67 }
68
PetscDeviceInitialized(PetscDeviceType type)69 PetscBool PetscDeviceInitialized(PetscDeviceType type)
70 {
71 return (type == PETSC_DEVICE_HOST) ? PETSC_TRUE : PETSC_FALSE;
72 }
73
PetscDeviceContextCreate(PetscDeviceContext * dctx)74 PetscErrorCode PetscDeviceContextCreate(PetscDeviceContext *dctx)
75 {
76 PetscFunctionBegin;
77 PetscAssertPointer(dctx, 1);
78 *dctx = NULL;
79 PetscFunctionReturn(PETSC_SUCCESS);
80 }
81
PetscDeviceContextDestroy(PetscDeviceContext * dctx)82 PetscErrorCode PetscDeviceContextDestroy(PetscDeviceContext *dctx)
83 {
84 PetscFunctionBegin;
85 PetscAssertPointer(dctx, 1);
86 if (*dctx) *dctx = NULL;
87 PetscFunctionReturn(PETSC_SUCCESS);
88 }
89
PetscDeviceContextSetStreamType(PETSC_UNUSED PetscDeviceContext dctx,PETSC_UNUSED PetscStreamType type)90 PetscErrorCode PetscDeviceContextSetStreamType(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscStreamType type)
91 {
92 PetscFunctionBegin;
93 PetscFunctionReturn(PETSC_SUCCESS);
94 }
95
PetscDeviceContextGetStreamType(PETSC_UNUSED PetscDeviceContext dctx,PetscStreamType * type)96 PetscErrorCode PetscDeviceContextGetStreamType(PETSC_UNUSED PetscDeviceContext dctx, PetscStreamType *type)
97 {
98 PetscFunctionBegin;
99 PetscAssertPointer(type, 2);
100 *type = PETSC_STREAM_DEFAULT;
101 PetscFunctionReturn(PETSC_SUCCESS);
102 }
103
PetscDeviceContextSetDevice(PETSC_UNUSED PetscDeviceContext dctx,PETSC_UNUSED PetscDevice device)104 PetscErrorCode PetscDeviceContextSetDevice(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscDevice device)
105 {
106 PetscFunctionBegin;
107 PetscFunctionReturn(PETSC_SUCCESS);
108 }
109
PetscDeviceContextGetDevice(PETSC_UNUSED PetscDeviceContext dctx,PetscDevice * device)110 PetscErrorCode PetscDeviceContextGetDevice(PETSC_UNUSED PetscDeviceContext dctx, PetscDevice *device)
111 {
112 PetscFunctionBegin;
113 PetscAssertPointer(device, 2);
114 *device = NULL;
115 PetscFunctionReturn(PETSC_SUCCESS);
116 }
117
PetscDeviceContextGetDeviceType(PETSC_UNUSED PetscDeviceContext dctx,PetscDeviceType * type)118 PetscErrorCode PetscDeviceContextGetDeviceType(PETSC_UNUSED PetscDeviceContext dctx, PetscDeviceType *type)
119 {
120 PetscFunctionBegin;
121 PetscAssertPointer(type, 2);
122 *type = PETSC_DEVICE_DEFAULT();
123 PetscFunctionReturn(PETSC_SUCCESS);
124 }
125
PetscDeviceContextSetUp(PETSC_UNUSED PetscDeviceContext dctx)126 PetscErrorCode PetscDeviceContextSetUp(PETSC_UNUSED PetscDeviceContext dctx)
127 {
128 PetscFunctionBegin;
129 PetscFunctionReturn(PETSC_SUCCESS);
130 }
131
PetscDeviceContextDuplicate(PETSC_UNUSED PetscDeviceContext dctx,PetscDeviceContext * dctxdup)132 PetscErrorCode PetscDeviceContextDuplicate(PETSC_UNUSED PetscDeviceContext dctx, PetscDeviceContext *dctxdup)
133 {
134 PetscFunctionBegin;
135 PetscAssertPointer(dctxdup, 2);
136 *dctxdup = NULL;
137 PetscFunctionReturn(PETSC_SUCCESS);
138 }
139
PetscDeviceContextQueryIdle(PETSC_UNUSED PetscDeviceContext dctx,PetscBool * idle)140 PetscErrorCode PetscDeviceContextQueryIdle(PETSC_UNUSED PetscDeviceContext dctx, PetscBool *idle)
141 {
142 PetscFunctionBegin;
143 PetscAssertPointer(idle, 2);
144 *idle = PETSC_TRUE;
145 PetscFunctionReturn(PETSC_SUCCESS);
146 }
147
PetscDeviceContextWaitForContext(PETSC_UNUSED PetscDeviceContext dctxa,PETSC_UNUSED PetscDeviceContext dctxb)148 PetscErrorCode PetscDeviceContextWaitForContext(PETSC_UNUSED PetscDeviceContext dctxa, PETSC_UNUSED PetscDeviceContext dctxb)
149 {
150 PetscFunctionBegin;
151 PetscFunctionReturn(PETSC_SUCCESS);
152 }
153
PetscDeviceContextForkWithStreamType(PETSC_UNUSED PetscDeviceContext dctx,PETSC_UNUSED PetscStreamType stype,PetscInt n,PetscDeviceContext ** dsub)154 PetscErrorCode PetscDeviceContextForkWithStreamType(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscStreamType stype, PetscInt n, PetscDeviceContext **dsub)
155 {
156 PetscFunctionBegin;
157 PetscAssertPointer(dsub, 4);
158 PetscAssert(n >= 0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Number of contexts merged %" PetscInt_FMT " < 0", n);
159 PetscCall(PetscMalloc1(n, dsub));
160 PetscFunctionReturn(PETSC_SUCCESS);
161 }
162
PetscDeviceContextFork(PetscDeviceContext dctx,PetscInt n,PetscDeviceContext ** dsub)163 PetscErrorCode PetscDeviceContextFork(PetscDeviceContext dctx, PetscInt n, PetscDeviceContext **dsub)
164 {
165 PetscFunctionBegin;
166 PetscCall(PetscDeviceContextForkWithStreamType(dctx, PETSC_STREAM_DEFAULT, n, dsub));
167 PetscFunctionReturn(PETSC_SUCCESS);
168 }
169
PetscDeviceContextJoin(PETSC_UNUSED PetscDeviceContext dctx,PetscInt n,PetscDeviceContextJoinMode joinMode,PetscDeviceContext ** dsub)170 PetscErrorCode PetscDeviceContextJoin(PETSC_UNUSED PetscDeviceContext dctx, PetscInt n, PetscDeviceContextJoinMode joinMode, PetscDeviceContext **dsub)
171 {
172 PetscFunctionBegin;
173 PetscAssertPointer(dsub, 4);
174 PetscAssert(n >= 0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Number of contexts merged %" PetscInt_FMT " < 0", n);
175 if (joinMode == PETSC_DEVICE_CONTEXT_JOIN_DESTROY) PetscCall(PetscFree(*dsub));
176 PetscFunctionReturn(PETSC_SUCCESS);
177 }
178
PetscDeviceContextSynchronize(PETSC_UNUSED PetscDeviceContext dctx)179 PetscErrorCode PetscDeviceContextSynchronize(PETSC_UNUSED PetscDeviceContext dctx)
180 {
181 PetscFunctionBegin;
182 PetscFunctionReturn(PETSC_SUCCESS);
183 }
184
PetscDeviceContextSetFromOptions(PETSC_UNUSED MPI_Comm comm,PETSC_UNUSED PetscDeviceContext dctx)185 PetscErrorCode PetscDeviceContextSetFromOptions(PETSC_UNUSED MPI_Comm comm, PETSC_UNUSED PetscDeviceContext dctx)
186 {
187 PetscFunctionBegin;
188 PetscFunctionReturn(PETSC_SUCCESS);
189 }
190
PetscDeviceContextView(PETSC_UNUSED PetscDeviceContext dctx,PETSC_UNUSED PetscViewer viewer)191 PetscErrorCode PetscDeviceContextView(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscViewer viewer)
192 {
193 PetscFunctionBegin;
194 PetscFunctionReturn(PETSC_SUCCESS);
195 }
196
PetscDeviceContextViewFromOptions(PETSC_UNUSED PetscDeviceContext dctx,PetscObject obj,const char name[])197 PetscErrorCode PetscDeviceContextViewFromOptions(PETSC_UNUSED PetscDeviceContext dctx, PetscObject obj, const char name[])
198 {
199 PetscFunctionBegin;
200 if (obj) PetscValidHeader(obj, 2);
201 PetscAssertPointer(name, 3);
202 PetscFunctionReturn(PETSC_SUCCESS);
203 }
204
PetscDeviceContextGetCurrentContext(PetscDeviceContext * dctx)205 PetscErrorCode PetscDeviceContextGetCurrentContext(PetscDeviceContext *dctx)
206 {
207 PetscFunctionBegin;
208 PetscAssertPointer(dctx, 1);
209 *dctx = NULL;
210 PetscFunctionReturn(PETSC_SUCCESS);
211 }
212
PetscDeviceContextSetCurrentContext(PETSC_UNUSED PetscDeviceContext dctx)213 PetscErrorCode PetscDeviceContextSetCurrentContext(PETSC_UNUSED PetscDeviceContext dctx)
214 {
215 PetscFunctionBegin;
216 PetscFunctionReturn(PETSC_SUCCESS);
217 }
218
PetscDeviceContextGetStreamHandle(PETSC_UNUSED PetscDeviceContext dctx,void ** handle)219 PetscErrorCode PetscDeviceContextGetStreamHandle(PETSC_UNUSED PetscDeviceContext dctx, void **handle)
220 {
221 PetscFunctionBegin;
222 PetscAssertPointer(handle, 2);
223 *handle = NULL;
224 PetscFunctionReturn(PETSC_SUCCESS);
225 }
226
PetscDeviceAllocate_Private(PETSC_UNUSED PetscDeviceContext dctx,PetscBool clear,PETSC_UNUSED PetscMemType mtype,size_t n,PETSC_UNUSED size_t alignment,void ** PETSC_RESTRICT ptr)227 PetscErrorCode PetscDeviceAllocate_Private(PETSC_UNUSED PetscDeviceContext dctx, PetscBool clear, PETSC_UNUSED PetscMemType mtype, size_t n, PETSC_UNUSED size_t alignment, void **PETSC_RESTRICT ptr)
228 {
229 PetscFunctionBegin;
230 PetscAssertPointer(ptr, 6);
231 PetscCall(PetscMallocA(1, clear, __LINE__, PETSC_FUNCTION_NAME, __FILE__, n, ptr));
232 PetscFunctionReturn(PETSC_SUCCESS);
233 }
234
PetscDeviceDeallocate_Private(PETSC_UNUSED PetscDeviceContext dctx,void * PETSC_RESTRICT ptr)235 PetscErrorCode PetscDeviceDeallocate_Private(PETSC_UNUSED PetscDeviceContext dctx, void *PETSC_RESTRICT ptr)
236 {
237 PetscFunctionBegin;
238 PetscCall(PetscFree(ptr));
239 PetscFunctionReturn(PETSC_SUCCESS);
240 }
241
PetscDeviceMemcpy(PETSC_UNUSED PetscDeviceContext dctx,void * PETSC_RESTRICT dest,const void * PETSC_RESTRICT src,size_t n)242 PetscErrorCode PetscDeviceMemcpy(PETSC_UNUSED PetscDeviceContext dctx, void *PETSC_RESTRICT dest, const void *PETSC_RESTRICT src, size_t n)
243 {
244 PetscFunctionBegin;
245 PetscCall(PetscMemcpy(dest, src, n));
246 PetscFunctionReturn(PETSC_SUCCESS);
247 }
248
PetscDeviceMemset(PETSC_UNUSED PetscDeviceContext dctx,PETSC_UNUSED void * ptr,PetscInt v,size_t n)249 PetscErrorCode PetscDeviceMemset(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED void *ptr, PetscInt v, size_t n)
250 {
251 PetscFunctionBegin;
252 memset(ptr, (unsigned char)v, n);
253 PetscFunctionReturn(PETSC_SUCCESS);
254 }
255
256 /* implementations for <include/petsc/private/deviceimpl.h> */
PetscDeviceInitializeFromOptions_Internal(PETSC_UNUSED MPI_Comm comm)257 PetscErrorCode PetscDeviceInitializeFromOptions_Internal(PETSC_UNUSED MPI_Comm comm)
258 {
259 PetscFunctionBegin;
260 PetscFunctionReturn(PETSC_SUCCESS);
261 }
262
PetscDeviceGetDefaultForType_Internal(PETSC_UNUSED PetscDeviceType type,PetscDevice * device)263 PetscErrorCode PetscDeviceGetDefaultForType_Internal(PETSC_UNUSED PetscDeviceType type, PetscDevice *device)
264 {
265 PetscFunctionBegin;
266 PetscAssertPointer(device, 2);
267 *device = NULL;
268 PetscFunctionReturn(PETSC_SUCCESS);
269 }
270
PetscDeviceContextGetNullContext_Internal(PetscDeviceContext * dctx)271 PetscErrorCode PetscDeviceContextGetNullContext_Internal(PetscDeviceContext *dctx)
272 {
273 PetscFunctionBegin;
274 PetscAssertPointer(dctx, 1);
275 *dctx = NULL;
276 PetscFunctionReturn(PETSC_SUCCESS);
277 }
278
PetscDeviceRegisterMemory(const void * PETSC_RESTRICT ptr,PetscMemType mtype,PETSC_UNUSED size_t size)279 PetscErrorCode PetscDeviceRegisterMemory(const void *PETSC_RESTRICT ptr, PetscMemType mtype, PETSC_UNUSED size_t size)
280 {
281 PetscFunctionBegin;
282 if (PetscMemTypeHost(mtype)) PetscAssertPointer(ptr, 1);
283 PetscFunctionReturn(PETSC_SUCCESS);
284 }
285
PetscDeviceGetAttribute(PETSC_UNUSED PetscDevice device,PETSC_UNUSED PetscDeviceAttribute attr,void * value)286 PetscErrorCode PetscDeviceGetAttribute(PETSC_UNUSED PetscDevice device, PETSC_UNUSED PetscDeviceAttribute attr, void *value)
287 {
288 PetscFunctionBegin;
289 PetscAssertPointer(value, 3);
290 *(int *)value = 0;
291 PetscFunctionReturn(PETSC_SUCCESS);
292 }
293
PetscGetMarkedObjectMap_Internal(size_t * nkeys,PetscObjectId ** keys,PetscMemoryAccessMode ** modes,size_t ** ndeps,PetscEvent *** dependencies)294 PetscErrorCode PetscGetMarkedObjectMap_Internal(size_t *nkeys, PetscObjectId **keys, PetscMemoryAccessMode **modes, size_t **ndeps, PetscEvent ***dependencies)
295 {
296 PetscFunctionBegin;
297 PetscAssertPointer(nkeys, 1);
298 PetscAssertPointer(keys, 2);
299 PetscAssertPointer(modes, 3);
300 PetscAssertPointer(ndeps, 4);
301 PetscAssertPointer(dependencies, 5);
302 *nkeys = 0;
303 *keys = NULL;
304 *modes = NULL;
305 *ndeps = NULL;
306 *dependencies = NULL;
307 PetscFunctionReturn(PETSC_SUCCESS);
308 }
309
PetscRestoreMarkedObjectMap_Internal(size_t nkeys,PETSC_UNUSED PetscObjectId ** keys,PETSC_UNUSED PetscMemoryAccessMode ** modes,PETSC_UNUSED size_t ** ndeps,PETSC_UNUSED PetscEvent *** dependencies)310 PetscErrorCode PetscRestoreMarkedObjectMap_Internal(size_t nkeys, PETSC_UNUSED PetscObjectId **keys, PETSC_UNUSED PetscMemoryAccessMode **modes, PETSC_UNUSED size_t **ndeps, PETSC_UNUSED PetscEvent ***dependencies)
311 {
312 PetscFunctionBegin;
313 PetscAssertPointer(keys, 2);
314 PetscAssertPointer(modes, 3);
315 PetscAssertPointer(ndeps, 4);
316 PetscAssertPointer(dependencies, 5);
317 if (*keys) *keys = NULL;
318 if (*modes) *modes = NULL;
319 if (*ndeps) *ndeps = NULL;
320 if (*dependencies) *dependencies = NULL;
321 PetscFunctionReturn(PETSC_SUCCESS);
322 }
323