E3SM-Project / HOMMEXX

Clone of ACME for CMDV-SE project to convert HOMME to C++
11 stars 0 forks source link

Remove code that is deprecated in Kokkos #342

Closed bartgol closed 6 years ago

bartgol commented 6 years ago

Right now, Kokkos enables by default deprecated code. When they will finally remove deprecated code, our builds will break. To see what code should be updated, build Kokkos with KOKKOS_ENABLE_DEPRECATED_CODE:BOOL=OFF.

oksanaguba commented 6 years ago

why would builds break then? i don't understand which code is being compiled when strict is on....

bartgol commented 6 years ago

When 'strict' is on, there is a piece of code that uses a type Kokkos::Experimental::Sum (more specifically, a piece of code in ExecSpaceDefs.hpp for parallel reduction). That type is now actually declared as Kokkos::Sum, but if KOKKOS_ENABLE_DEPRECATED_CODE is on, then, inside the Kokkos::Experiemental namespace you can see using Kokkos::Sum, which injects the Sum type also in the Kokkos::Experimental namespace. The KOKKOS_ENABLE_DEPRECATED_CODE is however OFF by default, so unless you activate it, the build now breaks. Notice that if you have an old kokkos installation, the type Sum is inside Kokkos::Experimental, so everything is fine.

It is a good practice to stay a way from deprecated code in upstream packages, since it can go away with any new release. I suggest to not enable deprecated code, and force HOMMEXX to build with non-deprecated code only, which is more stable.