First, yes, mining is running the nonce from 0 to uint32_max, to find the value that the resulted block hash is less than the target.
It's not random because it won't help anything, you still have to "randomly" try every possible nonce value.
For multiple GPU, it's just like multithreaded processing, the miner software will divide the work to smaller tasks and distribute to each gpu.
Thanks Hushan!
Agree, as the nonce is like randomly located between 0 to unit32_max.
when miner divide the work to each gpu,
does it divide in a way that they won't overlap?