[petsc-dev] sor smoothers

Barry Smith bsmith at mcs.anl.gov
Sun Sep 8 15:40:23 CDT 2013


#if (PETSC_SIZEOF_LONG_LONG == 8)
typedef long long Petsc64bitInt;
#elif defined(PETSC_HAVE___INT64)
typedef __int64 Petsc64bitInt;
#else
typedef unknown64bit Petsc64bitInt
#endif

  I assume all machines support one or the other of these ?

  Should we introduce an unsigned version of this Petsc64bitUInt, for these type of things?

   Barry


On Sep 8, 2013, at 1:44 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote:

> Barry Smith <bsmith at mcs.anl.gov> writes:
> 
>>> An alternative would be to add a scalar parameter to MatMultAdd.
>> 
>>   MatResidual() is an important enough case to merit its own
>>   method. The odd ball scalar parameter that is not 1 or -1 is so
>>   extremely rare as to lead to confusion instead of useful
>>   generality.
> 
> Fine, but implementations might want to unify the add and subtract
> kernels because it's half the code.
> 
>>> Perhaps PetscObjects should get a 64-bit unique ID assigned by a global
>> 
>>   Why 64 bit? Surely we will never have more than 2 billion objects created?
> 
> It's not the number of objects in scope, but the cumulative number of
> objects.  Some simulations take billions of time steps.  You might say
> they should ensure that everything is reused over that period, but it's
> hard to guarantee and this failure mode is just not worth allowing into
> the realm of possibility.  If it were up to me, I would also make the
> State integer 64-bit.  (You don't want to hand a Vec off to a stochastic
> optimizer that does a million forward and adjoint simulations, each with
> 1000 time steps, and have a possibility of reusing some stale cache
> once you get the solution vector back.)
> 
>>> counter, or even a slightly longer hash of information that should never
>>> repeat.  Caching the pointer leaves the ABA problem.
>> 
>>  We currently have 
>>  h->id                    = idcnt++;
>>  in PetscHeaderCreate_Private(). 
>> 
>>   The id is not consistent across processes for a given object but I
>>   don't think that matters. Why can't we just stash this value? I
>>   think this value plus the Vec/Mat state uniquely define the values
>>   in the Vec/Mat.
> 
> I forgot about that, but I think we should make it 64-bit.
> 
>> There is a possibility of some processes having the same state and
>> others different ones and thus errors due to different functions being
>> used; for example if one process called VecGetArrayWrite() but another
>> one didn't. This is perverse so ….?
> 
> VecGetArray is documented to be logically collective.  There are some,
> ahem, C++ libraries downstream that are dedicated to abusing the
> interface with unstructured operator overloading.




More information about the petsc-dev mailing list