1*c4762a1bSJed Brown static char help[] = "Test scalability of PetscHSetIJ hash set.\n\n"; 2*c4762a1bSJed Brown 3*c4762a1bSJed Brown #include <petscsys.h> 4*c4762a1bSJed Brown #include <petsctime.h> 5*c4762a1bSJed Brown #include <petsc/private/hashsetij.h> 6*c4762a1bSJed Brown 7*c4762a1bSJed Brown int main(int argc, char **argv) 8*c4762a1bSJed Brown { 9*c4762a1bSJed Brown PetscHSetIJ table; 10*c4762a1bSJed Brown PetscInt N = 0, i, j, n; 11*c4762a1bSJed Brown PetscHashIJKey key; 12*c4762a1bSJed Brown PetscBool flag; 13*c4762a1bSJed Brown PetscLogDouble t_add = 0; 14*c4762a1bSJed Brown PetscLogDouble t_has = 0; 15*c4762a1bSJed Brown PetscLogDouble t_del = 0; 16*c4762a1bSJed Brown PetscErrorCode ierr; 17*c4762a1bSJed Brown 18*c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 19*c4762a1bSJed Brown ierr = PetscOptionsGetInt(NULL,NULL,"-N",&N,NULL);CHKERRQ(ierr); 20*c4762a1bSJed Brown ierr = PetscHSetIJCreate(&table);CHKERRQ(ierr); 21*c4762a1bSJed Brown 22*c4762a1bSJed Brown /* The following line silences warnings from Clang Static Analyzer */ 23*c4762a1bSJed Brown ierr = PetscHSetIJResize(table,0);CHKERRQ(ierr); 24*c4762a1bSJed Brown 25*c4762a1bSJed Brown ierr = PetscTimeSubtract(&t_add);CHKERRQ(ierr); 26*c4762a1bSJed Brown for (i = 0; i < N; ++i) { 27*c4762a1bSJed Brown for (j = 0; j < N; ++j) { 28*c4762a1bSJed Brown key.i = PetscMin(i, j); 29*c4762a1bSJed Brown key.j = PetscMax(i, j); 30*c4762a1bSJed Brown ierr = PetscHSetIJQueryAdd(table, key, &flag);CHKERRQ(ierr); 31*c4762a1bSJed Brown } 32*c4762a1bSJed Brown } 33*c4762a1bSJed Brown ierr = PetscTimeAdd(&t_add);CHKERRQ(ierr); 34*c4762a1bSJed Brown 35*c4762a1bSJed Brown ierr = PetscHSetIJGetSize(table,&n);CHKERRQ(ierr); 36*c4762a1bSJed Brown 37*c4762a1bSJed Brown ierr = PetscTimeSubtract(&t_has);CHKERRQ(ierr); 38*c4762a1bSJed Brown for (i = 0; i < N; ++i) { 39*c4762a1bSJed Brown for (j = 0; j < N; ++j) { 40*c4762a1bSJed Brown key.i = i; 41*c4762a1bSJed Brown key.j = j; 42*c4762a1bSJed Brown ierr = PetscHSetIJHas(table, key, &flag);CHKERRQ(ierr); 43*c4762a1bSJed Brown } 44*c4762a1bSJed Brown } 45*c4762a1bSJed Brown ierr = PetscTimeAdd(&t_has);CHKERRQ(ierr); 46*c4762a1bSJed Brown 47*c4762a1bSJed Brown ierr = PetscTimeSubtract(&t_del);CHKERRQ(ierr); 48*c4762a1bSJed Brown for (i = 0; i < N; ++i) { 49*c4762a1bSJed Brown for (j = 0; j < N; ++j) { 50*c4762a1bSJed Brown key.i = i; 51*c4762a1bSJed Brown key.j = j; 52*c4762a1bSJed Brown ierr = PetscHSetIJQueryDel(table, key, &flag);CHKERRQ(ierr); 53*c4762a1bSJed Brown } 54*c4762a1bSJed Brown } 55*c4762a1bSJed Brown ierr = PetscTimeAdd(&t_del);CHKERRQ(ierr); 56*c4762a1bSJed Brown 57*c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_WORLD,"N = %D - table size: %D, add: %g, has: %g, del: %g\n",N,n,t_add,t_has,t_del);CHKERRQ(ierr); 58*c4762a1bSJed Brown 59*c4762a1bSJed Brown ierr = PetscHSetIJDestroy(&table);CHKERRQ(ierr); 60*c4762a1bSJed Brown ierr = PetscFinalize(); 61*c4762a1bSJed Brown return ierr; 62*c4762a1bSJed Brown } 63*c4762a1bSJed Brown 64*c4762a1bSJed Brown /*TEST 65*c4762a1bSJed Brown 66*c4762a1bSJed Brown test: 67*c4762a1bSJed Brown args: -N 32 68*c4762a1bSJed Brown 69*c4762a1bSJed Brown TEST*/ 70