Actual source code: ex3.c
1: static const char help[] = "Tests PetscDeviceContextDuplicate.\n\n";
3: #include "petscdevicetestcommon.h"
5: /* test duplication creates the same object type */
6: static PetscErrorCode TestPetscDeviceContextDuplicate(PetscDeviceContext dctx)
7: {
8: PetscDevice origDevice;
9: PetscStreamType origStype;
10: PetscDeviceContext ddup;
13: /* get everything we want first before any duplication */
14: PetscDeviceContextGetStreamType(dctx, &origStype);
15: PetscDeviceContextGetDevice(dctx, &origDevice);
17: /* duplicate */
18: PetscDeviceContextDuplicate(dctx, &ddup);
22: {
23: PetscDevice parDevice, dupDevice;
25: PetscDeviceContextGetDevice(dctx, &parDevice);
26: AssertPetscDevicesValidAndEqual(parDevice, origDevice, "Parent PetscDevice after duplication does not match parent original PetscDevice");
27: PetscDeviceContextGetDevice(ddup, &dupDevice);
28: AssertPetscDevicesValidAndEqual(dupDevice, origDevice, "Duplicated PetscDevice does not match parent original PetscDevice");
29: }
31: {
32: PetscStreamType parStype, dupStype;
34: PetscDeviceContextGetStreamType(dctx, &parStype);
35: AssertPetscStreamTypesValidAndEqual(parStype, origStype, "Parent PetscStreamType after duplication does not match parent original PetscStreamType");
36: PetscDeviceContextGetStreamType(ddup, &dupStype);
37: AssertPetscStreamTypesValidAndEqual(dupStype, origStype, "Duplicated PetscStreamType '%s' does not match parent original PetscStreamType '%s'");
38: }
40: PetscDeviceContextDestroy(&ddup);
41: /* duplicate should not take the original down with it */
43: return 0;
44: }
46: int main(int argc, char *argv[])
47: {
48: MPI_Comm comm;
49: PetscDeviceContext dctx;
52: PetscInitialize(&argc, &argv, NULL, help);
53: comm = PETSC_COMM_WORLD;
55: /* basic creation and destruction */
56: PetscDeviceContextCreate(&dctx);
57: PetscObjectSetOptionsPrefix((PetscObject)dctx, "local_");
58: PetscDeviceContextSetFromOptions(comm, dctx);
59: TestPetscDeviceContextDuplicate(dctx);
60: PetscDeviceContextDestroy(&dctx);
62: PetscDeviceContextGetCurrentContext(&dctx);
63: TestPetscDeviceContextDuplicate(dctx);
65: PetscPrintf(comm, "EXIT_SUCCESS\n");
66: PetscFinalize();
67: return 0;
68: }
70: /*TEST
72: build:
73: requires: defined(PETSC_HAVE_CXX)
75: testset:
76: output_file: ./output/ExitSuccess.out
77: nsize: {{1 4}}
78: args: -device_enable {{lazy eager}}
79: args: -local_device_context_stream_type {{global_blocking default_blocking global_nonblocking}}
80: test:
81: requires: !device
82: suffix: host_no_device
83: test:
84: requires: device
85: args: -default_device_type host -root_device_context_device_type host
86: suffix: host_with_device
87: test:
88: requires: cuda
89: args: -default_device_type cuda -root_device_context_device_type cuda
90: suffix: cuda
91: test:
92: requires: hip
93: args: -default_device_type hip -root_device_context_device_type hip
94: suffix: hip
96: TEST*/