Yes, the name valid_GPU_array is very confusing. I read it as valid_places. --Junchao Zhang
On Wed, Oct 2, 2019 at 1:12 AM Karl Rupp <[email protected]<mailto:[email protected]>> wrote: Hi Junchao, I recall that Jed already suggested to make this a bitmask ~7 years ago ;-) On the other hand: If we touch valid_GPU_array, then we should also use a better name or refactor completely. Code like (V->valid_GPU_array & PETSC_OFFLOAD_GPU) simply isn't intuitive (nor does it make sense) when read aloud. Best regards, Karli On 10/2/19 5:24 AM, Zhang, Junchao via petsc-dev wrote: > Stafano recently modified the following code, > > PetscErrorCode VecCreate_SeqCUDA(Vec V) > { > PetscErrorCode ierr; > > PetscFunctionBegin; > ierr = PetscLayoutSetUp(V->map);CHKERRQ(ierr); > ierr = VecCUDAAllocateCheck(V);CHKERRQ(ierr); > ierr = > VecCreate_SeqCUDA_Private(V,((Vec_CUDA*)V->spptr)->GPUarray_allocated);CHKERRQ(ierr); > ierr = VecCUDAAllocateCheckHost(V);CHKERRQ(ierr); > ierr = VecSet(V,0.0);CHKERRQ(ierr); > ierr = VecSet_Seq(V,0.0);CHKERRQ(ierr); > V->valid_GPU_array = PETSC_OFFLOAD_BOTH; > PetscFunctionReturn(0); > } > > That means if one creates an SEQCUDA vector V and then immediately tests > if (V->valid_GPU_array == PETSC_OFFLOAD_GPU), the test will fail. That > is counterintuitive. I think we should have > > enum > {PETSC_OFFLOAD_UNALLOCATED=0x0,PETSC_OFFLOAD_GPU=0x1,PETSC_OFFLOAD_CPU=0x2,PETSC_OFFLOAD_BOTH=0x3} > > > and then use if (V->valid_GPU_array & PETSC_OFFLOAD_GPU). What do you think? > > --Junchao Zhang
