Jawaban sederhananya adalah bahwa GPU berfungsi paling baik ketika Anda perlu melakukan perhitungan yang cukup kecil, cukup sederhana untuk masing-masing item yang sangat besar. Untuk mencapai banyak hal seperti ini, perhitungan untuk setiap item harus independen dari perhitungan untuk item lainnya. Jika ada (biasanya) beberapa ketergantungan antara satu item dengan item lainnya, Anda biasanya perlu mencari cara untuk memecahkannya sebelum Anda akan mendapatkan banyak manfaat dari mengeksekusi kode itu pada GPU. Jika dependensi tidak dapat dipatahkan sama sekali, atau membutuhkan terlalu banyak pekerjaan untuk dipecahkan, kode mungkin mengeksekusi lebih cepat pada CPU.
Sebagian besar CPU saat ini juga mendukung beberapa jenis operasi yang tidak didukung oleh GPU saat ini sama sekali (misalnya, perlindungan memori untuk multitasking).
Melihatnya dari arah yang sedikit berbeda, CPU telah (sebagian besar) dirancang agar cukup nyaman bagi programmer, dan orang-orang perangkat keras telah melakukan yang terbaik (dan yang terbaik yang sangat buruk itu!) Untuk membuat perangkat keras yang mempertahankan model yang nyaman untuk programmer, tetapi masih mengeksekusi secepat mungkin.
GPU datang pada hal-hal dari arah yang berlawanan: mereka dirancang sebagian besar agar nyaman bagi perancang perangkat keras, dan hal-hal seperti OpenCL telah berusaha untuk menyediakan model pemrograman yang masuk akal mungkin karena kendala perangkat keras.
Menulis kode untuk dijalankan pada GPU biasanya akan membutuhkan lebih banyak waktu dan upaya (sehingga akan lebih mahal) daripada melakukan hal yang sama pada CPU. Dengan demikian, melakukannya terutama masuk akal ketika / jika salah satu dari:
- Masalahnya sangat paralel sehingga Anda dapat mengharapkan keuntungan besar dari usaha minimal, atau
- Peningkatan kecepatan sangat penting sehingga membenarkan banyak pekerjaan ekstra.
Ada beberapa kemungkinan yang jelas untuk masing-masing - tetapi sejumlah besar aplikasi jelas bahkan tidak dekat dengan keduanya. Saya akan sangat terkejut melihat (misalnya) aplikasi CRUD berjalan pada GPU dalam waktu dekat (dan jika itu terjadi, itu mungkin akan terjadi karena seseorang menetapkan dengan tujuan yang tepat dalam pikiran, belum tentu apa pun mendekati optimal rasio biaya / manfaat).
Kenyataannya adalah bahwa untuk banyak (saya tergoda untuk mengatakan "sebagian besar") aplikasi, CPU yang khas jauh lebih cepat, dan kenyamanan pemrograman (mengarah pada hal-hal seperti pengembangan fitur baru yang lebih mudah) jauh lebih penting daripada kecepatan eksekusi.