Actual source code: ex3.c

  1: static const char help[] = "Tests PetscDeviceContextDuplicate.\n\n";

  3: #include <petsc/private/deviceimpl.h>
  4: #include "petscdevicetestcommon.h"

  6: /* test duplication creates the same object type */
  7: static PetscErrorCode TestPetscDeviceContextDuplicate(PetscDeviceContext dctx)
  8: {
  9:   PetscDevice        origDevice;
 10:   PetscStreamType    origStype;
 11:   PetscDeviceContext ddup;

 14:   /* get everything we want first before any duplication */
 15:   PetscDeviceContextGetStreamType(dctx,&origStype);
 16:   PetscDeviceContextGetDevice(dctx,&origDevice);

 18:   /* duplicate */
 19:   PetscDeviceContextDuplicate(dctx,&ddup);

 23:   {
 24:     PetscDevice parDevice,dupDevice;

 26:     PetscDeviceContextGetDevice(dctx,&parDevice);
 27:     AssertPetscDevicesValidAndEqual(parDevice,origDevice,"Parent PetscDevice after duplication does not match parent original PetscDevice");
 28:     PetscDeviceContextGetDevice(ddup,&dupDevice);
 29:     AssertPetscDevicesValidAndEqual(dupDevice,origDevice,"Duplicated PetscDevice does not match parent original PetscDevice");
 30:   }

 32:   {
 33:     PetscStreamType parStype,dupStype;

 35:     PetscDeviceContextGetStreamType(dctx,&parStype);
 36:     AssertPetscStreamTypesValidAndEqual(parStype,origStype,"Parent PetscStreamType after duplication does not match parent original PetscStreamType");
 37:     PetscDeviceContextGetStreamType(ddup,&dupStype);
 38:     AssertPetscStreamTypesValidAndEqual(dupStype,origStype,"Duplicated PetscStreamType '%s' does not match parent original PetscStreamType '%s'");
 39:   }

 41:   PetscDeviceContextDestroy(&ddup);
 42:   /* duplicate should not take the original down with it */
 44:   return 0;
 45: }

 47: int main(int argc, char *argv[])
 48: {
 49:   PetscDeviceContext dctx;

 51:   PetscInitialize(&argc,&argv,NULL,help);

 53:   /* basic creation and destruction */
 54:   PetscDeviceContextCreate(&dctx);
 55:   PetscDeviceContextSetFromOptions(PETSC_COMM_WORLD,"local_",dctx);
 56:   PetscDeviceContextSetUp(dctx);
 57:   TestPetscDeviceContextDuplicate(dctx);
 58:   PetscDeviceContextDestroy(&dctx);

 60:   PetscDeviceContextGetCurrentContext(&dctx);
 61:   TestPetscDeviceContextDuplicate(dctx);

 63:   PetscPrintf(PETSC_COMM_WORLD,"EXIT_SUCCESS\n");
 64:   PetscFinalize();
 65:   return 0;
 66: }

 68: /*TEST

 70:  build:
 71:    requires: defined(PETSC_HAVE_CXX)

 73:  testset:
 74:    TODO: broken in ci
 75:    requires: !device
 76:    suffix: no_device
 77:    filter: Error: grep -E -o -e ".*No support for this operation for this object type" -e ".*PETSc is not configured with device support.*" -e "^\[0\]PETSC ERROR:.*[0-9]{1} [A-z]+\(\)"

 79:  testset:
 80:    output_file: ./output/ExitSuccess.out
 81:    nsize: {{1 4}}
 82:    args: -local_device_context_stream_type {{global_blocking default_blocking global_nonblocking}}
 83:    test:
 84:      requires: cuda
 85:      suffix: cuda
 86:    test:
 87:      requires: hip
 88:      suffix: hip

 90: TEST*/