Actual source code: device.c
1: #include <petscsys.h>
2: #include <petscviewer.h>
3: #include <petsc/private/deviceimpl.h>
5: /* implementations for <include/petscdevice.h> */
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: }
14: PetscErrorCode PetscDeviceDestroy(PetscDevice *device)
15: {
16: PetscFunctionBegin;
17: PetscAssertPointer(device, 1);
18: if (*device) *device = NULL;
19: PetscFunctionReturn(PETSC_SUCCESS);
20: }
22: PetscErrorCode PetscDeviceConfigure(PETSC_UNUSED PetscDevice device)
23: {
24: PetscFunctionBegin;
25: PetscFunctionReturn(PETSC_SUCCESS);
26: }
28: PetscErrorCode PetscDeviceView(PETSC_UNUSED PetscDevice device, PetscViewer viewer)
29: {
30: PetscFunctionBegin;
32: PetscFunctionReturn(PETSC_SUCCESS);
33: }
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: }
43: PetscErrorCode PetscDeviceGetDeviceId(PETSC_UNUSED PetscDevice device, PetscInt *id)
44: {
45: PetscFunctionBegin;
46: PetscAssertPointer(id, 2);
47: *id = 0;
48: PetscFunctionReturn(PETSC_SUCCESS);
49: }
51: PetscDeviceType PETSC_DEVICE_DEFAULT(void)
52: {
53: return PETSC_DEVICE_HOST;
54: }
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: }
63: PetscErrorCode PetscDeviceInitialize(PETSC_UNUSED PetscDeviceType type)
64: {
65: PetscFunctionBegin;
66: PetscFunctionReturn(PETSC_SUCCESS);
67: }
69: PetscBool PetscDeviceInitialized(PetscDeviceType type)
70: {
71: return (type == PETSC_DEVICE_HOST) ? PETSC_TRUE : PETSC_FALSE;
72: }
74: PetscErrorCode PetscDeviceContextCreate(PetscDeviceContext *dctx)
75: {
76: PetscFunctionBegin;
77: PetscAssertPointer(dctx, 1);
78: *dctx = NULL;
79: PetscFunctionReturn(PETSC_SUCCESS);
80: }
82: PetscErrorCode PetscDeviceContextDestroy(PetscDeviceContext *dctx)
83: {
84: PetscFunctionBegin;
85: PetscAssertPointer(dctx, 1);
86: if (*dctx) *dctx = NULL;
87: PetscFunctionReturn(PETSC_SUCCESS);
88: }
90: PetscErrorCode PetscDeviceContextSetStreamType(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscStreamType type)
91: {
92: PetscFunctionBegin;
93: PetscFunctionReturn(PETSC_SUCCESS);
94: }
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: }
104: PetscErrorCode PetscDeviceContextSetDevice(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscDevice device)
105: {
106: PetscFunctionBegin;
107: PetscFunctionReturn(PETSC_SUCCESS);
108: }
110: PetscErrorCode PetscDeviceContextGetDevice(PETSC_UNUSED PetscDeviceContext dctx, PetscDevice *device)
111: {
112: PetscFunctionBegin;
113: PetscAssertPointer(device, 2);
114: *device = NULL;
115: PetscFunctionReturn(PETSC_SUCCESS);
116: }
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: }
126: PetscErrorCode PetscDeviceContextSetUp(PETSC_UNUSED PetscDeviceContext dctx)
127: {
128: PetscFunctionBegin;
129: PetscFunctionReturn(PETSC_SUCCESS);
130: }
132: PetscErrorCode PetscDeviceContextDuplicate(PETSC_UNUSED PetscDeviceContext dctx, PetscDeviceContext *dctxdup)
133: {
134: PetscFunctionBegin;
135: PetscAssertPointer(dctxdup, 2);
136: *dctxdup = NULL;
137: PetscFunctionReturn(PETSC_SUCCESS);
138: }
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: }
148: PetscErrorCode PetscDeviceContextWaitForContext(PETSC_UNUSED PetscDeviceContext dctxa, PETSC_UNUSED PetscDeviceContext dctxb)
149: {
150: PetscFunctionBegin;
151: PetscFunctionReturn(PETSC_SUCCESS);
152: }
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: }
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: }
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: }
179: PetscErrorCode PetscDeviceContextSynchronize(PETSC_UNUSED PetscDeviceContext dctx)
180: {
181: PetscFunctionBegin;
182: PetscFunctionReturn(PETSC_SUCCESS);
183: }
185: PetscErrorCode PetscDeviceContextSetFromOptions(PETSC_UNUSED MPI_Comm comm, PETSC_UNUSED PetscDeviceContext dctx)
186: {
187: PetscFunctionBegin;
188: PetscFunctionReturn(PETSC_SUCCESS);
189: }
191: PetscErrorCode PetscDeviceContextView(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscViewer viewer)
192: {
193: PetscFunctionBegin;
194: PetscFunctionReturn(PETSC_SUCCESS);
195: }
197: PetscErrorCode PetscDeviceContextViewFromOptions(PETSC_UNUSED PetscDeviceContext dctx, PetscObject obj, const char name[])
198: {
199: PetscFunctionBegin;
201: PetscAssertPointer(name, 3);
202: PetscFunctionReturn(PETSC_SUCCESS);
203: }
205: PetscErrorCode PetscDeviceContextGetCurrentContext(PetscDeviceContext *dctx)
206: {
207: PetscFunctionBegin;
208: PetscAssertPointer(dctx, 1);
209: *dctx = NULL;
210: PetscFunctionReturn(PETSC_SUCCESS);
211: }
213: PetscErrorCode PetscDeviceContextSetCurrentContext(PETSC_UNUSED PetscDeviceContext dctx)
214: {
215: PetscFunctionBegin;
216: PetscFunctionReturn(PETSC_SUCCESS);
217: }
219: PetscErrorCode PetscDeviceContextGetStreamHandle(PETSC_UNUSED PetscDeviceContext dctx, void **handle)
220: {
221: PetscFunctionBegin;
222: PetscAssertPointer(handle, 2);
223: *handle = NULL;
224: PetscFunctionReturn(PETSC_SUCCESS);
225: }
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: }
235: PetscErrorCode PetscDeviceDeallocate_Private(PETSC_UNUSED PetscDeviceContext dctx, void *PETSC_RESTRICT ptr)
236: {
237: PetscFunctionBegin;
238: PetscCall(PetscFree(ptr));
239: PetscFunctionReturn(PETSC_SUCCESS);
240: }
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: }
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: }
256: /* implementations for <include/petsc/private/deviceimpl.h> */
257: PetscErrorCode PetscDeviceInitializeFromOptions_Internal(PETSC_UNUSED MPI_Comm comm)
258: {
259: PetscFunctionBegin;
260: PetscFunctionReturn(PETSC_SUCCESS);
261: }
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: }
271: PetscErrorCode PetscDeviceContextGetNullContext_Internal(PetscDeviceContext *dctx)
272: {
273: PetscFunctionBegin;
274: PetscAssertPointer(dctx, 1);
275: *dctx = NULL;
276: PetscFunctionReturn(PETSC_SUCCESS);
277: }
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: }
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: }
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: }
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: }