differences between CPU and GPU

CPU GPU
Really fast caches (great for data reuse) Lots of math units
Fine branching granularity Fast access to onboard memory
Lots of different processes/threads Run a program on each fragment/vertex
High performance on a single thread of execution High throughput on parallel tasks
CPUs are great for task parallelism GPUs are great for data parallelism
CPU optimised for high performance on sequential codes (caches and branch prediction) GPU optimised for higher arithmetic intensity for parallel nature (Floating point operations)

Table: Comparison between CPU and GPU