1 2 #include <petscsys.h> 3 #include <petsctime.h> 4 5 #undef __FUNCT__ 6 #define __FUNCT__ "main" 7 int main(int argc,char **argv) 8 { 9 PetscLogDouble x,y,z; 10 int i,ierr; 11 PetscScalar *A,*B; 12 13 PetscInitialize(&argc,&argv,0,0); 14 15 ierr = PetscMalloc1(8000000,&A);CHKERRQ(ierr); 16 ierr = PetscMalloc1(8000000,&B);CHKERRQ(ierr); 17 18 for (i=0; i<8000000; i++) { 19 A[i] = i%61897; 20 B[i] = i%61897; 21 } 22 /* To take care of paging effects */ 23 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 24 ierr = PetscTime(&x);CHKERRQ(ierr); 25 26 ierr = PetscTime(&x);CHKERRQ(ierr); 27 /* 28 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 29 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 30 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 31 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 32 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 33 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 34 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 35 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 36 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); 37 PetscMemcpy(A,B,sizeof(PetscScalar)*8000000); */ 38 { int j; 39 for (j = 0; j<10; j++) 40 for (i=0; i<8000000; i++) B[i] = A[i];} 41 42 ierr = PetscTime(&y);CHKERRQ(ierr); 43 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 44 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 45 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 46 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 47 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 48 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 49 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 50 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 51 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 52 ierr = PetscMemcpy(A,B,sizeof(PetscScalar)*0);CHKERRQ(ierr); 53 ierr = PetscTime(&z);CHKERRQ(ierr); 54 55 fprintf(stdout,"%s : \n","PetscMemcpy"); 56 fprintf(stdout," %-15s : %e MB/s\n","Bandwidth",10.0*8*8/(y-x)); 57 fprintf(stdout," %-15s : %e sec\n","Latency",(z-y)/10.0); 58 fprintf(stdout," %-15s : %e sec\n","Per PetscScalar",(2*y-x-z)/8000000.0); 59 60 ierr = PetscFree(A);CHKERRQ(ierr); 61 ierr = PetscFree(B);CHKERRQ(ierr); 62 ierr = PetscFinalize(); 63 PetscFunctionReturn(0); 64 } 65