| Line 25... |
Line 25... |
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
#define __FUNCT__ "main"
|
#define __FUNCT__ "main"
|
int main( int argc, char **argv )
|
int main( int argc, char **argv )
|
{
|
{
|
MatDense A,B,C,D; /* matrices */
|
MatDense A,B,C; /* matrices */
|
PetscScalar *v;
|
PetscScalar *v;
|
PetscInt n=45,m,i,j,its,M,reps=1;
|
PetscInt n=45,m,i,j,its,M,reps=1;
|
PetscBool flag;
|
PetscBool flag;
|
Vec *vecs0,*vecs1,t;
|
Vec *vecs0,*vecs1,t,*vecso;
|
PetscLogStage saxpy,smult,supdate;
|
PetscLogStage saxpy,smult,supdate,supdateo;
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
SlepcInitialize(&argc,&argv,(char*)0,help);
|
SlepcInitialize(&argc,&argv,(char*)0,help);
|
ierr = PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);CHKERRQ(ierr);
|
ierr = PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);CHKERRQ(ierr);
|
ierr = PetscOptionsGetInt(PETSC_NULL,"-m",&m,&flag);CHKERRQ(ierr);
|
ierr = PetscOptionsGetInt(PETSC_NULL,"-m",&m,&flag);CHKERRQ(ierr);
|
if(!flag) m=n;
|
if(!flag) m=n;
|
M = PetscMax(m,n);
|
M = PetscMax(m,n);
|
ierr = PetscOptionsGetInt(PETSC_NULL,"-r",&reps,&flag);CHKERRQ(ierr);
|
ierr = PetscOptionsGetInt(PETSC_NULL,"-r",&reps,&flag);CHKERRQ(ierr);
|
ierr = PetscPrintf(PETSC_COMM_WORLD,"\nDense matrices of size %Dx%D\n\n",m,n);CHKERRQ(ierr);
|
ierr = PetscPrintf(PETSC_COMM_WORLD,"\nDense matrices of size %Dx%D\n\n",m,n);CHKERRQ(ierr);
|
|
|
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
Initialize vectors
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
ierr = VecCreate(PETSC_COMM_WORLD,&t);CHKERRQ(ierr);
|
|
ierr = VecSetSizes(t,PETSC_DECIDE,m);CHKERRQ(ierr);
|
|
ierr = VecSetFromOptions(t);CHKERRQ(ierr);
|
|
ierr = VecDuplicateVecs(t,n,&vecso);CHKERRQ(ierr);
|
|
ierr = SlepcVecSetTemplate(t);CHKERRQ(ierr);
|
|
ierr = VecDuplicateVecs(t,n,&vecs0);CHKERRQ(ierr);
|
|
ierr = VecDuplicateVecs(t,n,&vecs1);CHKERRQ(ierr);
|
|
ierr = VecGetLocalSize(t,&m);CHKERRQ(ierr);
|
|
ierr = VecDestroy(&t);CHKERRQ(ierr);
|
|
for (i=0;i<n;i++) { ierr = VecSetRandom(vecs0[i],PETSC_NULL);CHKERRQ(ierr); }
|
|
for (i=0;i<n;i++) { ierr = VecSetRandom(vecs1[i],PETSC_NULL);CHKERRQ(ierr); }
|
|
for (i=0;i<n;i++) { ierr = VecSetRandom(vecso[i],PETSC_NULL);CHKERRQ(ierr); }
|
|
|
|
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
Create matrices
|
Create matrices
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
| Line 79... |
Line 96... |
for (i=0; i<m; i++) {
|
for (i=0; i<m; i++) {
|
v[m*j+i] = i & 1 ? 1.0 : -1.0;
|
v[m*j+i] = i & 1 ? 1.0 : -1.0;
|
}
|
}
|
}
|
}
|
ierr = MatDenseRestoreArray(B,&v);CHKERRQ(ierr);
|
ierr = MatDenseRestoreArray(B,&v);CHKERRQ(ierr);
|
|
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
Initialize vectors
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
ierr = VecCreate(PETSC_COMM_WORLD,&t);CHKERRQ(ierr);
|
|
ierr = VecSetSizes(t,m,PETSC_DECIDE);CHKERRQ(ierr);
|
|
ierr = VecSetFromOptions(t);CHKERRQ(ierr);
|
|
ierr = SlepcVecSetTemplate(t);CHKERRQ(ierr);
|
|
ierr = VecDuplicateVecs(t,n,&vecs0);CHKERRQ(ierr);
|
|
ierr = VecDuplicateVecs(t,n,&vecs1);CHKERRQ(ierr);
|
|
ierr = VecDestroy(&t);CHKERRQ(ierr);
|
|
for (i=0;i<n;i++) { ierr = VecSetRandom(vecs0[i],PETSC_NULL);CHKERRQ(ierr); }
|
|
for (i=0;i<n;i++) { ierr = VecSetRandom(vecs1[i],PETSC_NULL);CHKERRQ(ierr); }
|
|
|
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
Test operations
|
Test operations
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
| Line 118... |
Line 122... |
ierr = MatDenseRestoreArray(C,&v);CHKERRQ(ierr);
|
ierr = MatDenseRestoreArray(C,&v);CHKERRQ(ierr);
|
PetscLogStagePop();
|
PetscLogStagePop();
|
|
|
ierr = PetscLogStageRegister("Update",&supdate);CHKERRQ(ierr);
|
ierr = PetscLogStageRegister("Update",&supdate);CHKERRQ(ierr);
|
ierr = PetscLogStagePush(supdate);CHKERRQ(ierr);
|
ierr = PetscLogStagePush(supdate);CHKERRQ(ierr);
|
ierr = MatDenseSetSizes(A,0,0,m,n);CHKERRQ(ierr);
|
|
ierr = MatDenseDuplicate(A,MATDENSE_MAKE_SIBLING,&D);CHKERRQ(ierr);
|
|
ierr = MatDenseSetSizes(D,0,0,m,n);CHKERRQ(ierr);
|
|
ierr = MatDenseSetSizes(C,0,0,n,n);CHKERRQ(ierr);
|
ierr = MatDenseSetSizes(C,0,0,n,n);CHKERRQ(ierr);
|
for (i=0; i<reps; i++) { ierr = MatDenseMatMult(D,1.0,0.0,A,PETSC_FALSE,C,PETSC_FALSE);CHKERRQ(ierr); }
|
|
ierr = MatDenseDestroy(&D);CHKERRQ(ierr);
|
|
ierr = MatDenseGetArray(C,&v);CHKERRQ(ierr);
|
ierr = MatDenseGetArray(C,&v);CHKERRQ(ierr);
|
for (i=0; i<reps; i++) {
|
for (i=0; i<reps; i++) {
|
ierr = SlepcUpdateVectors(n,vecs0,0,n,v,m,PETSC_FALSE);CHKERRQ(ierr);
|
ierr = SlepcUpdateVectors(n,vecs0,0,n,v,m,PETSC_FALSE);CHKERRQ(ierr);
|
|
for (j=0; j<n; j++) { ierr = VecAXPY(vecs0[j],1.0,vecs1[j]);CHKERRQ(ierr); }
|
|
}
|
|
ierr = MatDenseRestoreArray(C,&v);CHKERRQ(ierr);
|
|
PetscLogStagePop();
|
|
|
|
ierr = PetscLogStageRegister("Update Orig.",&supdateo);CHKERRQ(ierr);
|
|
ierr = PetscLogStagePush(supdateo);CHKERRQ(ierr);
|
|
ierr = MatDenseSetSizes(C,0,0,n,n);CHKERRQ(ierr);
|
|
ierr = MatDenseGetArray(C,&v);CHKERRQ(ierr);
|
|
for (i=0; i<reps; i++) {
|
|
ierr = SlepcUpdateVectors(n,vecso,0,n,v,m,PETSC_FALSE);CHKERRQ(ierr);
|
|
for (j=0; j<n; j++) { ierr = VecAXPY(vecso[j],1.0,vecs1[j]);CHKERRQ(ierr); }
|
}
|
}
|
ierr = MatDenseRestoreArray(C,&v);CHKERRQ(ierr);
|
ierr = MatDenseRestoreArray(C,&v);CHKERRQ(ierr);
|
PetscLogStagePop();
|
PetscLogStagePop();
|
|
|
ierr = MatDenseDestroy(&A);CHKERRQ(ierr);
|
ierr = MatDenseDestroy(&A);CHKERRQ(ierr);
|
ierr = MatDenseDestroy(&B);CHKERRQ(ierr);
|
ierr = MatDenseDestroy(&B);CHKERRQ(ierr);
|
ierr = MatDenseDestroy(&C);CHKERRQ(ierr);
|
ierr = MatDenseDestroy(&C);CHKERRQ(ierr);
|
ierr = VecDestroyVecs(n,&vecs0);CHKERRQ(ierr);
|
ierr = VecDestroyVecs(n,&vecs0);CHKERRQ(ierr);
|
ierr = VecDestroyVecs(n,&vecs1);CHKERRQ(ierr);
|
ierr = VecDestroyVecs(n,&vecs1);CHKERRQ(ierr);
|
|
ierr = VecDestroyVecs(n,&vecso);CHKERRQ(ierr);
|
ierr = SlepcFinalize();CHKERRQ(ierr);
|
ierr = SlepcFinalize();CHKERRQ(ierr);
|
return 0;
|
return 0;
|
}
|
}
|
|
|
|
|