Note that you should be careful when developing in emulation because it’s possible to write code that works fine in emulation but fails on the GPU hardware.
Emulation does not simulate the GPU exactly, it simply runs the CUDA code in CPU threads. For example, since the CPU can’t run as many threads in parallel as on the GPU, if you forget a necessary __syncthreads() call, it’s possible that code won’t work correctly on the GPU even though it does on the CPU.
Also, since in emulation all the different types of device memory (shared, global, local) are actually in the same memory space (host memory), it’s possible to access device pointers from host code, and vice versa. This is of course not possible on the GPU, and so code that does so might work on in emulation and fail in the device.
So yes, emulation is very handy for development on machines that don’t have the hardware, and for debugging your algorithms and implementation, but you should test your code on G8X hardware often to make it easier to find bugs like those described above.