[petsc-dev] Should v->valid_GPU_array be a bitmask?

Zhang, Junchao jczhang at mcs.anl.gov
Wed Oct 2 07:55:40 CDT 2019


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 <rupp at iue.tuwien.ac.at<mailto:rupp at iue.tuwien.ac.at>> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20191002/07d50002/attachment-0001.html>


More information about the petsc-dev mailing list