If I try to run the SelfAdjointEigenSolver solver in a __device__ function, I get an "illegal memory access" error reported by cuda. The same code runs without issue as a __host__ function. Taking a quick look through the source code, I noticed there are still calls to std functions (such as std::abs) in SelfAdjointEigenSolver, even through there seem to be macros intended to be used for exactly such a scenario to get these to operate properly on the device. Could this be the issue?
Only SelfAdjointEigenSolver::directCompute with 2x2 and 3x3 real matrices is supported on CUDA.
To make SelfAdjointEigenSolver fully CUDA compatible we need to write lightweight kernels for triangular products, householder reflectors, etc. so it's not as trivial as adding __device__ to more functions.