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*/