On Sep 25, 2020, at 8:09 PM, Barry Smith 
<bsm...@petsc.dev<mailto:bsm...@petsc.dev>> wrote:


  Configure by default should find out the available GPU and build for that 
sm_*  it should not require the user to set this (how the heck is the user 
going to know what to set?)  If I remember correctly there is a utility 
available that gives this information.

  For generic builds like in package distributions I don't know how it should 
work, ideally all the possibilities would be available in the library and at 
run time the correct one will be utilized.


For package distribution we should add as many possibilities as possible. To 
have maximum compatibility on CUDA 11, we can add

-gencode=arch=compute_52,code=sm_52 \
-gencode=arch=compute_60,code=sm_60 \
-gencode=arch=compute_61,code=sm_61 \
-gencode=arch=compute_70,code=sm_70 \
-gencode=arch=compute_75,code=sm_75

The downside is longer compilation time and fatter binary.

Hong (Mr.)




  Barry


On Sep 25, 2020, at 5:49 PM, Mark Adams 
<mfad...@lbl.gov<mailto:mfad...@lbl.gov>> wrote:

   '--CUDAFLAGS=-arch=sm_70',

seems to fix this.

On Fri, Sep 25, 2020 at 6:31 PM Mark Adams 
<mfad...@lbl.gov<mailto:mfad...@lbl.gov>> wrote:
I see kokkos and hyper have a sm_70 flag, but I don't see one for PETSc.

It looks like you have to specify this to get modern atomics to work in Cuda. I 
get:

/ccs/home/adams/petsc/include/petscaijdevice.h(99): error: no instance of 
overloaded function "atomicAdd" matches the argument list
            argument types are: (double *, double)

I tried using a Kokkos configuration, thinking I could get these sm_70 flags, 
but that did not work.

Any ideas?

Mark


Reply via email to