1 #ifdef PETSC_RCS_HEADER 2 static char vcid[] = "$Id: PetscMemcpy.c,v 1.11 1998/11/20 15:31:19 bsmith Exp bsmith $"; 3 #endif 4 5 #include "petsc.h" 6 7 #undef __FUNC__ 8 #define __FUNC__ "main" 9 int main( int argc, char **argv) 10 { 11 PLogDouble x, y, z; 12 int i,ierr; 13 Scalar *A, *B; 14 15 PetscInitialize(&argc, &argv,0,0); 16 17 A = (Scalar *) PetscMalloc(8000000*sizeof(Scalar)); 18 B = (Scalar *) PetscMalloc(8000000*sizeof(Scalar)); 19 20 for (i=0; i<8000000; i++) { 21 A[i] = i%61897; 22 B[i] = i%61897; 23 } 24 /* To take care of paging effects */ 25 PetscMemcpy(A,B,sizeof(Scalar)*0); 26 ierr = PetscGetTime(&x); CHKERRA(ierr); 27 28 ierr = PetscGetTime(&x); CHKERRA(ierr); 29 /* 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 PetscMemcpy(A,B,sizeof(Scalar)*8000000); 39 PetscMemcpy(A,B,sizeof(Scalar)*8000000); */ 40 { int j; 41 for (j = 0; j<10; j++ ) { 42 for ( i=0; i<8000000; i++) { 43 B[i] = A[i]; 44 } 45 }} 46 47 ierr = PetscGetTime(&y); CHKERRA(ierr); 48 PetscMemcpy(A,B,sizeof(Scalar)*0); 49 PetscMemcpy(A,B,sizeof(Scalar)*0); 50 PetscMemcpy(A,B,sizeof(Scalar)*0); 51 PetscMemcpy(A,B,sizeof(Scalar)*0); 52 PetscMemcpy(A,B,sizeof(Scalar)*0); 53 PetscMemcpy(A,B,sizeof(Scalar)*0); 54 PetscMemcpy(A,B,sizeof(Scalar)*0); 55 PetscMemcpy(A,B,sizeof(Scalar)*0); 56 PetscMemcpy(A,B,sizeof(Scalar)*0); 57 PetscMemcpy(A,B,sizeof(Scalar)*0); 58 ierr = PetscGetTime(&z); CHKERRA(ierr); 59 60 fprintf(stderr,"%s : \n","PetscMemcpy"); 61 fprintf(stderr," %-11s : %e MB/s\n","Bandwidth",10.0*8*8/(y-x)); 62 fprintf(stderr," %-11s : %e sec\n","Latency",(z-y)/10.0); 63 fprintf(stderr," %-11s : %e sec\n","Per Scalar",(2*y-x-z)/8000000.0); 64 65 PetscFinalize(); 66 PetscFunctionReturn(0); 67 } 68