It doesn't really describe the fundamental difference between a GPU and a 4000-core CPU, which is that the GPU has a shared program counter. All the cores must execute the same instruction at each cycle.
GPU threads got even more independent in nvidia'a volta architecture - search Volta ITS for details.
I'm happy that Julia supports GPU programming for simple code, but I don't see how you can run algorithms with inter-thread communication.
https://github.com/JuliaGPU/GPUArrays.jl/blob/master/src/lin...
Or directly with cuda shfl intrinsics: https://github.com/JuliaGPU/CUDAnative.jl/blob/b249dfd145501...