Hi all I am very new to PETSc. I just learnt its class structure and I just understood that the interface Vec has been reimplemented with the class VecCUSP that is able to support GPU. My question is: if I have a simple code that allocates a vector and sets it with the database options, if I specify -vec_type seqcusp then this vector is allocated AND computed on the GPU? Because I compared the execution time of the same algorithm with the database options -vec_type seq and -vec_type seqcusp: these two times are very close. This is the code: I'm just trying to compute how long does it take to execute the function VecScale: #include <petscvec.h> #include <string.h> #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **argv) { Vec x; PetscInt n; PetscErrorCode ierr; PetscBool exists; PetscLogDouble t1,t2; PetscInt a=10; ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr); ierr = PetscOptionsGetInt(PETSC_NULL,"-size",&n,&exists); CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_SELF,&x);CHKERRQ(ierr); ierr = VecSetSizes(x,PETSC_DECIDE,n);CHKERRQ(ierr); ierr = VecSetFromOptions(x);CHKERRQ(ierr); ierr = VecSetRandom(x, PETSC_NULL); CHKERRQ(ierr); PetscGetTime(&t1); ierr = VecScale(x,a); CHKERRQ(ierr); PetscGetTime(&t2); ierr = PetscPrintf(PETSC_COMM_WORLD, "%2.5f\n",(t2-t1)); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; } I use a vector of about 500000 numbers. With the database option -vec_type seqcusp , the method VecScale should call the method VecScale_SeqCUSP, right? Am I wrong? Should I do it expressly? Anyway with the option -vec_type seq , the method VecScale takes 0.05681 seconds, with the option -vec_type seqcusp, the method VecScale takes 0.04242 seconds. Is this speed up sufficient and realistic? thanks Olga