1 /*$Id: PetscMemcpy.c,v 1.16 2000/11/28 17:32:38 bsmith Exp bsmith $*/ 2 3 #include "petsc.h" 4 5 #undef __FUNC__ 6 #define __FUNC__ "main" 7 int main(int argc,char **argv) 8 { 9 PetscLogDouble x,y,z; 10 int i,ierr; 11 Scalar *A,*B; 12 13 PetscInitialize(&argc,&argv,0,0); 14 15 ierr = PetscMalloc(8000000*sizeof(Scalar),&( A )); 16 ierr = PetscMalloc(8000000*sizeof(Scalar),&( B )); 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(Scalar)*0);CHKERRA(ierr); 24 ierr = PetscGetTime(&x);CHKERRA(ierr); 25 26 ierr = PetscGetTime(&x);CHKERRA(ierr); 27 /* 28 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 29 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 30 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 31 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 32 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 33 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 34 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 35 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 36 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 37 PetscMemcpy(A,B,sizeof(Scalar)*8000000); */ 38 { int j; 39 for (j = 0; j<10; j++) { 40 for (i=0; i<8000000; i++) { 41 B[i] = A[i]; 42 } 43 }} 44 45 ierr = PetscGetTime(&y);CHKERRA(ierr); 46 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 47 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 48 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 49 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 50 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 51 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 52 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 53 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 54 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 55 ierr = PetscMemcpy(A,B,sizeof(Scalar)*0);CHKERRA(ierr); 56 ierr = PetscGetTime(&z);CHKERRA(ierr); 57 58 fprintf(stdout,"%s : \n","PetscMemcpy"); 59 fprintf(stdout," %-11s : %e MB/s\n","Bandwidth",10.0*8*8/(y-x)); 60 fprintf(stdout," %-11s : %e sec\n","Latency",(z-y)/10.0); 61 fprintf(stdout," %-11s : %e sec\n","Per Scalar",(2*y-x-z)/8000000.0); 62 63 PetscFinalize(); 64 PetscFunctionReturn(0); 65 } 66