1*a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests PetscDeviceContextDuplicate.\n\n"; 2*a4af0ceeSJacob Faibussowitsch 3*a4af0ceeSJacob Faibussowitsch #include <petsc/private/deviceimpl.h> 4*a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h" 5*a4af0ceeSJacob Faibussowitsch 6*a4af0ceeSJacob Faibussowitsch /* test duplication creates the same object type */ 7*a4af0ceeSJacob Faibussowitsch static PetscErrorCode TestPetscDeviceContextDuplicate(PetscDeviceContext dctx) 8*a4af0ceeSJacob Faibussowitsch { 9*a4af0ceeSJacob Faibussowitsch PetscDevice origDevice; 10*a4af0ceeSJacob Faibussowitsch PetscStreamType origStype; 11*a4af0ceeSJacob Faibussowitsch PetscDeviceContext ddup; 12*a4af0ceeSJacob Faibussowitsch PetscErrorCode ierr; 13*a4af0ceeSJacob Faibussowitsch 14*a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 15*a4af0ceeSJacob Faibussowitsch PetscValidDeviceContext(dctx,1); 16*a4af0ceeSJacob Faibussowitsch /* get everything we want first before any duplication */ 17*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetStreamType(dctx,&origStype);CHKERRQ(ierr); 18*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetDevice(dctx,&origDevice);CHKERRQ(ierr); 19*a4af0ceeSJacob Faibussowitsch 20*a4af0ceeSJacob Faibussowitsch /* duplicate */ 21*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDuplicate(dctx,&ddup);CHKERRQ(ierr); 22*a4af0ceeSJacob Faibussowitsch PetscValidDeviceContext(ddup,2); 23*a4af0ceeSJacob Faibussowitsch PetscCheckCompatibleDeviceContexts(dctx,1,ddup,2); 24*a4af0ceeSJacob Faibussowitsch 25*a4af0ceeSJacob Faibussowitsch { 26*a4af0ceeSJacob Faibussowitsch PetscDevice parDevice,dupDevice; 27*a4af0ceeSJacob Faibussowitsch 28*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetDevice(dctx,&parDevice);CHKERRQ(ierr); 29*a4af0ceeSJacob Faibussowitsch ierr = AssertPetscDevicesValidAndEqual(parDevice,origDevice,"Parent PetscDevice after duplication does not match parent original PetscDevice");CHKERRQ(ierr); 30*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetDevice(ddup,&dupDevice);CHKERRQ(ierr); 31*a4af0ceeSJacob Faibussowitsch ierr = AssertPetscDevicesValidAndEqual(dupDevice,origDevice,"Duplicated PetscDevice does not match parent original PetscDevice");CHKERRQ(ierr); 32*a4af0ceeSJacob Faibussowitsch } 33*a4af0ceeSJacob Faibussowitsch 34*a4af0ceeSJacob Faibussowitsch { 35*a4af0ceeSJacob Faibussowitsch PetscStreamType parStype,dupStype; 36*a4af0ceeSJacob Faibussowitsch 37*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetStreamType(dctx,&parStype);CHKERRQ(ierr); 38*a4af0ceeSJacob Faibussowitsch ierr = AssertPetscStreamTypesValidAndEqual(parStype,origStype,"Parent PetscStreamType after duplication does not match parent original PetscStreamType");CHKERRQ(ierr); 39*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetStreamType(ddup,&dupStype);CHKERRQ(ierr); 40*a4af0ceeSJacob Faibussowitsch ierr = AssertPetscStreamTypesValidAndEqual(dupStype,origStype,"Duplicated PetscStreamType '%s' does not match parent original PetscStreamType '%s'");CHKERRQ(ierr); 41*a4af0ceeSJacob Faibussowitsch } 42*a4af0ceeSJacob Faibussowitsch 43*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&ddup);CHKERRQ(ierr); 44*a4af0ceeSJacob Faibussowitsch /* duplicate should not take the original down with it */ 45*a4af0ceeSJacob Faibussowitsch PetscValidDeviceContext(dctx,1); 46*a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 47*a4af0ceeSJacob Faibussowitsch } 48*a4af0ceeSJacob Faibussowitsch 49*a4af0ceeSJacob Faibussowitsch int main(int argc, char *argv[]) 50*a4af0ceeSJacob Faibussowitsch { 51*a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 52*a4af0ceeSJacob Faibussowitsch PetscErrorCode ierr; 53*a4af0ceeSJacob Faibussowitsch 54*a4af0ceeSJacob Faibussowitsch ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 55*a4af0ceeSJacob Faibussowitsch 56*a4af0ceeSJacob Faibussowitsch /* basic creation and destruction */ 57*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextCreate(&dctx);CHKERRQ(ierr); 58*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextSetFromOptions(PETSC_COMM_WORLD,"local_",dctx);CHKERRQ(ierr); 59*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextSetUp(dctx);CHKERRQ(ierr); 60*a4af0ceeSJacob Faibussowitsch ierr = TestPetscDeviceContextDuplicate(dctx);CHKERRQ(ierr); 61*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&dctx);CHKERRQ(ierr); 62*a4af0ceeSJacob Faibussowitsch 63*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetCurrentContext(&dctx);CHKERRQ(ierr); 64*a4af0ceeSJacob Faibussowitsch ierr = TestPetscDeviceContextDuplicate(dctx);CHKERRQ(ierr); 65*a4af0ceeSJacob Faibussowitsch 66*a4af0ceeSJacob Faibussowitsch ierr = PetscPrintf(PETSC_COMM_WORLD,"EXIT_SUCCESS\n");CHKERRQ(ierr); 67*a4af0ceeSJacob Faibussowitsch ierr = PetscFinalize(); 68*a4af0ceeSJacob Faibussowitsch return ierr; 69*a4af0ceeSJacob Faibussowitsch } 70*a4af0ceeSJacob Faibussowitsch 71*a4af0ceeSJacob Faibussowitsch /*TEST 72*a4af0ceeSJacob Faibussowitsch 73*a4af0ceeSJacob Faibussowitsch build: 74*a4af0ceeSJacob Faibussowitsch requires: defined(PETSC_HAVE_CXX_DIALECT_CXX11) 75*a4af0ceeSJacob Faibussowitsch 76*a4af0ceeSJacob Faibussowitsch testset: 77*a4af0ceeSJacob Faibussowitsch requires: !device 78*a4af0ceeSJacob Faibussowitsch suffix: no_device 79*a4af0ceeSJacob Faibussowitsch 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]+\(\)" 80*a4af0ceeSJacob Faibussowitsch 81*a4af0ceeSJacob Faibussowitsch testset: 82*a4af0ceeSJacob Faibussowitsch output_file: ./output/ExitSuccess.out 83*a4af0ceeSJacob Faibussowitsch nsize: {{1 4 10}} 84*a4af0ceeSJacob Faibussowitsch args: -local_device_context_stream_type {{global_blocking default_blocking global_nonblocking}} 85*a4af0ceeSJacob Faibussowitsch test: 86*a4af0ceeSJacob Faibussowitsch requires: cuda 87*a4af0ceeSJacob Faibussowitsch suffix: cuda 88*a4af0ceeSJacob Faibussowitsch test: 89*a4af0ceeSJacob Faibussowitsch requires: hip 90*a4af0ceeSJacob Faibussowitsch suffix: hip 91*a4af0ceeSJacob Faibussowitsch 92*a4af0ceeSJacob Faibussowitsch TEST*/ 93