Extend support for matrix inversion on CUDA devices

Reference issue

Fixes #2271 (closed) .

What does this implement/fix?

Extend the use of Eigen on NVIDIA GPUs with CUDA:

  • mark over 1000 new functions as EIGEN_DEVICE_FUNC
  • use numext::swap instead of std::swap
  • implement reading approximate cache sizes on NVIDIA GPUs
  • support alloca() on recent NVIDIA GPUs and CUDA versions

Additional information

Most of these changes are in use in the fork of Eigen maintained by the CMS Collaboration, which has been developed for porting our software on NVIDIA GPUs.

We'll be happy to squash/rebase/etc. the commits as needed, and/or split this into multiple requests.

Merge request reports

Loading