Hi all! I did a little digging into the problem and what happens is during the apply(gates_even_offdiag, psi)
in the first iterations with a precision of Float32
an eigenvalue call is made on an extremely ill conditioned matrix and as a result CUDA.jl
returns an eigen spectrum of all NaN
values. In my testing I catch this problem and convert the matrix into Floa64
and compute the eigenvalue again, there are too many eigenvalues to print (1053 of them) but I can say the condition number of this matrix is 1.91e27. As Matt said there is much to learn about how and when we can use single precision numbers in ITensors/physics algorithms and how we design algorithms around their performance enhancements on GPU. Thanks for sending this interesting issue!
1 Like