Because this update potentially involves concurrent reads and writes at the same memory location, we use an atomic max operation (defined as atomicMax on the NVIDIA toolkit).
atomicMax is not defined for floating-point values.