Just adding something important I realized I haven’t said explicitly:
The reason why you “tried almost every imaginable way to get the value of the cuda boolean tensor without causing the blocking but it didnt work” is that the work for computing the min and max and possibly the comparison between them hasn’t completed yet. You NEED to wait for the GPU to finish computing before you can have a useful and correct result.
Yes, with nonblocking=False you can free up your CPU to proceed before the GPU is done computing, but you can’t expect the CPU to have a correct result to use, before the GPU produces it.
In other words, it’s not that  the synchronization “wastes” time, it’s the GPU computation that takes time. The synchronization simply “cures your blindness” to this time.