As GPU is such similar to CPU according to what we discussed in the class, why we need to learn specifically how to do parallel programming for GPU? Why the parallel program for CPU cannot directly run on GPU?
The concepts we learn are applicable to both. But GPUs are different from CPUs, so they have their own programming languages like CUDA which you need to learn, but you can still apply shared-memory model programming concepts. It is also different because the main purpose for GPUs was for shading triangles in graphics engines which occurred by providing all the triangle data and then applying a shader kernel in parallel to all the triangles. Using GPUs for parallel data processing was something that happened later when people realized that they could be used for that, and the GPU manufacturers added this ability in to their existing hardware.
Slide 63 describes the difference between CPU and GPU in architecture. And due to the differences, in order to achieve perfect performance, I think the details in designing programs should be different although they can still share the same idea.
The spec sheet for this GPU can be found here: https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1080/