Tampak bagi saya bahwa hari ini banyak perhitungan dilakukan pada GPU. Jelas grafis dilakukan di sana, tetapi menggunakan CUDA dan sejenisnya, AI, algoritma hashing (pikirkan bitcoin) dan lainnya juga dilakukan pada GPU. Mengapa kita tidak bisa begitu saja menyingkirkan CPU dan menggunakan GPU sendiri? Apa yang membuat GPU jauh lebih cepat daripada CPU?
373
Jawaban:
TL; DR answer: GPU memiliki core prosesor yang jauh lebih banyak daripada CPU, tetapi karena setiap core GPU berjalan secara signifikan lebih lambat daripada core CPU dan tidak memiliki fitur yang diperlukan untuk sistem operasi modern, mereka tidak sesuai untuk melakukan sebagian besar pemrosesan dalam sehari-hari komputasi. Mereka paling cocok untuk operasi intensif komputasi seperti pemrosesan video dan simulasi fisika.
GPGPU masih merupakan konsep yang relatif baru. GPU pada awalnya digunakan untuk rendering grafik saja; Seiring dengan kemajuan teknologi, sejumlah besar core dalam GPU relatif terhadap CPU dieksploitasi dengan mengembangkan kemampuan komputasi untuk GPU sehingga mereka dapat memproses banyak aliran data paralel secara bersamaan, tidak peduli apa pun data itu. Sementara GPU dapat memiliki ratusan atau bahkan ribuan prosesor aliran, mereka masing-masing berjalan lebih lambat dari inti CPU dan memiliki lebih sedikit fitur (bahkan jika mereka Turing lengkap dan dapat diprogram untuk menjalankan program apa pun yang dapat dijalankan CPU). Fitur yang hilang dari GPU termasuk gangguan dan memori virtual, yang diperlukan untuk menerapkan sistem operasi modern.
Dengan kata lain, CPU dan GPU memiliki arsitektur yang sangat berbeda yang membuatnya lebih cocok untuk tugas yang berbeda. GPU dapat menangani data dalam jumlah besar di banyak aliran, melakukan operasi yang relatif sederhana, tetapi tidak cocok untuk pemrosesan yang berat atau kompleks pada satu atau beberapa aliran data. CPU jauh lebih cepat berdasarkan per-inti (dalam hal instruksi per detik) dan dapat melakukan operasi yang kompleks pada satu atau beberapa aliran data dengan lebih mudah, tetapi tidak dapat secara efisien menangani banyak aliran secara bersamaan.
Akibatnya, GPU tidak cocok untuk menangani tugas-tugas yang tidak diuntungkan secara signifikan atau tidak dapat diparalelkan, termasuk banyak aplikasi konsumen umum seperti pengolah kata. Lebih jauh, GPU menggunakan arsitektur yang berbeda secara fundamental; kita harus memprogram aplikasi khusus untuk GPU agar bisa berfungsi, dan teknik yang berbeda diperlukan untuk memprogram GPU. Teknik-teknik yang berbeda ini meliputi bahasa pemrograman baru, modifikasi bahasa yang ada, dan paradigma pemrograman baru yang lebih cocok untuk mengekspresikan komputasi sebagai operasi paralel yang harus dilakukan oleh banyak pemroses arus. Untuk informasi lebih lanjut tentang teknik yang diperlukan untuk memprogram GPU, lihat artikel Wikipedia tentang pemrosesan aliran dan komputasi paralel .
GPU modern mampu melakukan operasi vektor dan aritmatika floating-point, dengan kartu terbaru yang mampu memanipulasi angka floating-point presisi ganda. Kerangka kerja seperti CUDA dan OpenCL memungkinkan program ditulis untuk GPU, dan sifat GPU membuatnya paling cocok untuk operasi yang sangat paralel, seperti dalam komputasi ilmiah, di mana serangkaian kartu komputasi khusus GPU dapat menjadi pengganti yang layak untuk kartu kecil. menghitung cluster seperti pada NVIDIA Tesla Personal Supercomputer . Konsumen dengan GPU modern yang berpengalaman dengan Folding @ home dapat menggunakannya untuk berkontribusi dengan klien GPU , yang dapat melakukan simulasi pelipatan protein dengan kecepatan yang sangat tinggi dan berkontribusi lebih banyak pekerjaan pada proyek (pastikan untuk membaca FAQspertama, terutama yang terkait dengan GPU). GPU juga dapat mengaktifkan simulasi fisika yang lebih baik dalam permainan video menggunakan PhysX, mempercepat encoding dan decoding video, dan melakukan tugas-tugas komputasi intensif lainnya. Jenis tugas inilah yang paling cocok untuk dilakukan oleh GPU.
AMD memelopori desain prosesor yang disebut Accelerated Processing Unit (APU) yang menggabungkan core CPU x86 konvensional dengan GPU. Pendekatan ini memungkinkan kinerja grafis yang jauh lebih unggul daripada solusi grafis terintegrasi motherboard (meskipun tidak cocok untuk GPU diskrit yang lebih mahal), dan memungkinkan sistem yang kompak dan berbiaya rendah dengan kinerja multimedia yang baik tanpa perlu GPU yang terpisah. Prosesor Intel terbaru juga menawarkan grafis terintegrasi on-chip, meskipun kinerja GPU terintegrasi yang kompetitif saat ini terbatas pada beberapa chip dengan Intel Iris Pro Graphics. Ketika teknologi terus berkembang, kita akan melihat peningkatan tingkat konvergensi dari bagian-bagian yang terpisah ini. Membayangkan AMDmasa depan di mana CPU dan GPU adalah satu, yang mampu bekerja sama dengan mulus pada tugas yang sama .
Meskipun demikian, banyak tugas yang dilakukan oleh sistem operasi PC dan aplikasi masih lebih cocok untuk CPU, dan banyak pekerjaan yang diperlukan untuk mempercepat program menggunakan GPU. Karena begitu banyak perangkat lunak yang ada menggunakan arsitektur x86, dan karena GPU memerlukan teknik pemrograman yang berbeda dan kehilangan beberapa fitur penting yang diperlukan untuk sistem operasi, transisi umum dari CPU ke GPU untuk komputasi sehari-hari sangat sulit.
sumber
GPU tidak lebih cepat dari CPU. CPU dan GPU dirancang dengan dua tujuan yang berbeda, dengan trade-off yang berbeda, sehingga mereka memiliki karakteristik kinerja yang berbeda . Tugas tertentu lebih cepat dalam CPU sedangkan tugas lain lebih cepat dihitung dalam GPU. CPU unggul dalam melakukan manipulasi kompleks pada sekumpulan kecil data, GPU unggul dalam melakukan manipulasi sederhana pada sekumpulan besar data.
GPU adalah CPU dengan tujuan khusus, dirancang sedemikian rupa sehingga satu instruksi dapat digunakan pada blok data yang besar (SIMD / Single Instruction Multiple Data), semuanya menerapkan operasi yang sama. Bekerja dalam blok data tentu lebih efisien daripada bekerja dengan sel tunggal pada suatu waktu karena ada overhead yang jauh berkurang dalam mendekode instruksi, namun bekerja dalam blok besar berarti ada lebih banyak unit kerja paralel, sehingga menggunakan lebih banyak transistor. untuk mengimplementasikan instruksi GPU tunggal (menyebabkan batasan ukuran fisik, menggunakan lebih banyak energi, dan menghasilkan lebih banyak panas).
CPU dirancang untuk menjalankan satu instruksi pada satu datum secepat mungkin. Karena hanya perlu bekerja dengan satu datum, jumlah transistor yang diperlukan untuk mengimplementasikan satu instruksi jauh lebih sedikit sehingga CPU mampu memiliki set instruksi yang lebih besar, ALU yang lebih kompleks, prediksi cabang yang lebih baik, prediksi cabang yang lebih baik, lebih tervirtualisasi arsitektur, dan skema caching / pipeline yang lebih canggih. Siklus instruksinya juga lebih cepat.
Alasan mengapa kita masih menggunakan CPU bukan karena x86 adalah raja arsitektur CPU dan Windows ditulis untuk x86, alasan mengapa kita masih menggunakan CPU adalah karena jenis tugas yang perlu dilakukan oleh OS, yaitu membuat keputusan, dijalankan lebih efisien pada arsitektur CPU. Suatu OS perlu melihat 100-an dari berbagai jenis data dan membuat berbagai keputusan yang semuanya tergantung satu sama lain; pekerjaan semacam ini tidak mudah diparalelkan, setidaknya tidak ke dalam arsitektur SIMD.
Di masa depan, apa yang akan kita lihat adalah konvergensi antara arsitektur CPU dan GPU karena CPU memperoleh kemampuan untuk bekerja pada blok data, misalnya SSE. Selain itu, ketika teknologi manufaktur meningkat dan chip semakin kecil, GPU mampu menerapkan instruksi yang lebih kompleks.
sumber
Kurangnya GPU:
Anda memerlukan ini untuk dapat mengimplementasikan apa pun seperti sistem operasi modern.
Mereka juga (relatif) lambat pada aritmatika presisi ganda (bila dibandingkan dengan kinerja aritmatika presisi tunggal mereka) *, dan jauh lebih besar (dalam hal ukuran silikon). Arsitektur GPU yang lebih lama tidak mendukung panggilan tidak langsung (melalui pointer fungsi) yang diperlukan untuk sebagian besar pemrograman tujuan umum, dan arsitektur yang lebih baru yang melakukannya dengan lambat. Akhirnya, (seperti jawaban lain telah dicatat), untuk tugas-tugas yang tidak dapat diparalelkan, GPU kalah dibandingkan dengan CPU yang diberi beban kerja yang sama.
EDIT : Harap dicatat bahwa respons ini ditulis pada tahun 2011 - Teknologi GPU adalah area yang terus berubah. Hal-hal bisa sangat berbeda tergantung pada saat Anda membaca ini: P
* Beberapa GPU tidak lambat pada aritmatika presisi ganda, seperti NVidia Quadro atau garis Tesla (generasi Fermi atau lebih baru), atau AMD FirePro (generasi GCN atau lebih baru). Tapi ini tidak ada di mesin kebanyakan konsumen.
sumber
CPU seperti pekerja yang bekerja sangat cepat. GPU adalah seperti sekelompok pekerja klon yang bekerja dengan cepat, tetapi yang semuanya harus melakukan hal yang sama secara bersamaan (dengan pengecualian bahwa Anda dapat membuat beberapa klon diam jika Anda mau)
Yang mana yang ingin Anda miliki sebagai sesama pengembang, satu orang super cepat, atau 100 klon cepat yang sebenarnya tidak secepat, tetapi semua harus melakukan tindakan yang sama secara bersamaan?
Untuk beberapa tindakan, klon cukup bagus misalnya menyapu lantai - mereka masing-masing dapat menyapu bagian dari itu.
Untuk beberapa tindakan, klon berbau busuk, misalnya menulis laporan mingguan - semua klon kecuali satu duduk diam sementara satu klon menulis laporan (jika tidak, Anda hanya mendapatkan 100 salinan dari laporan yang sama).
sumber
Karena GPU dirancang untuk melakukan banyak hal kecil sekaligus, dan CPU dirancang untuk melakukan satu hal sekaligus. Jika proses Anda dapat dibuat paralel secara masif, seperti hashing, GPU adalah urutan yang lebih cepat, jika tidak, maka tidak akan demikian.
CPU Anda dapat menghitung hash jauh lebih cepat daripada GPU Anda - tetapi saat CPU Anda melakukannya, GPU Anda dapat menjadi bagian dari beberapa ratus hash. GPU dirancang untuk melakukan banyak hal pada saat yang bersamaan, dan CPU dirancang untuk melakukan satu hal pada satu waktu, tetapi sangat cepat.
Masalahnya adalah bahwa CPU dan GPU adalah solusi yang sangat berbeda untuk masalah yang sangat berbeda, ada sedikit tumpang tindih tetapi umumnya apa yang ada di domain mereka tetap berada di domain mereka. Kita tidak dapat mengganti CPU dengan GPU karena CPU duduk di sana melakukan pekerjaannya jauh lebih baik daripada GPU yang pernah ada, hanya karena GPU tidak dirancang untuk melakukan pekerjaan, dan CPU adalah.
Namun, sebuah catatan kecil, jika mungkin untuk menghapus CPU dan hanya memiliki GPU, tidakkah Anda pikir kami akan mengganti namanya? :)
sumber
Apakah Anda benar-benar bertanya mengapa kami tidak menggunakan arsitektur seperti GPU di CPU?
GPU hanyalah CPU khusus kartu grafis. Kami meminjamkan perhitungan non-grafis GPU karena CPU tujuan umum tidak secara normal dalam eksekusi paralel dan floating point.
Kami sebenarnya menggunakan arsitektur CPU yang berbeda (lebih GPU-ish). Misalnya prosesor Niagara cukup multitasking. SPARC T3 akan menjalankan 512 utas bersamaan.
sumber
Saya mungkin salah di sini, dan saya berbicara dari sedikit atau tidak ada otoritas tentang masalah ini, tetapi begini:
Saya percaya setiap unit eksekusi GPU ("inti") memiliki ruang alamat yang sangat terbatas dibandingkan dengan CPU.
Unit eksekusi GPU tidak dapat menangani percabangan secara efisien.
Unit eksekusi GPU tidak mendukung gangguan perangkat keras seperti halnya CPU.
Saya selalu berpikir cara unit eksekusi GPU dimaksudkan adalah sesuatu seperti Playstation 3 "SPE", mereka ingin diberi blok data, menjalankan sejumlah operasi berurutan di atasnya, dan kemudian mengeluarkan blok lain dari data, bilas, ulangi. Mereka tidak memiliki memori addressable sebanyak "CPE" utama tetapi idenya adalah untuk mendedikasikan masing-masing "SPE" untuk tugas yang spesifik dan berurutan. Output dari satu unit mungkin memberi makan input dari unit lain.
Unit eksekusi tidak berfungsi dengan baik jika mereka mencoba untuk "menganalisis" data dan membuat banyak keputusan berdasarkan apa data itu.
"Blok data" ini dapat menjadi bagian dari aliran, seperti daftar simpul dari tabel keadaan gim, data MPEG dari disk, dll.
Jika ada sesuatu yang tidak sesuai dengan model "streaming" ini, maka Anda memiliki tugas yang tidak dapat dibatalkan secara efisien dan GPU belum tentu merupakan solusi terbaik untuk itu. Contoh yang baik adalah memproses hal-hal berbasis "peristiwa eksternal" seperti keyboard, joystick, atau input jaringan. Tidak ada banyak hal yang tidak sesuai dengan model itu, tetapi akan selalu ada beberapa.
sumber
Ini bukan tentang kecepatan atau tujuan jam. Keduanya sama-sama mampu menyelesaikan sebagian besar, jika tidak semua tugas; namun beberapa sedikit lebih cocok untuk beberapa tugas daripada yang lain.
Ada argumen yang sangat tua tentang apakah lebih baik memiliki banyak core bisu atau sekelompok kecil core yang sangat cerdas. Ini kembali dengan mudah ke 80-an.
Di dalam CPU ada banyak kemungkinan perhitungan yang bisa dilakukan. Core yang lebih pintar dapat melakukan banyak perhitungan yang berbeda pada saat yang sama (seperti multi-core tetapi tidak, itu rumit; lihat paralelisme tingkat Instruksi ). Core cerdas dapat melakukan beberapa perhitungan pada saat yang sama (menambah, mengurangi, mengalikan, membagi, operasi memori) tetapi hanya satu per satu; karena ini, mereka secara fisik lebih besar (dan karena itu jauh lebih mahal) daripada dumber core
Inti bodoh jauh lebih kecil dan karena itu lebih banyak dapat ditambahkan ke satu chip tetapi tidak mampu melakukan banyak perhitungan simultan. Ada keseimbangan yang baik antara banyak core bisu dan beberapa core pintar.
Arsitektur multi-core bekerja dengan baik dengan grafik karena kalkulasi dapat dengan mudah dipecah menjadi ratusan core, tetapi juga tergantung pada kualitas kode dan apakah kode lain bergantung pada hasil satu perhitungan.
Ini adalah pertanyaan yang jauh lebih rumit daripada yang mungkin muncul. Untuk info lebih lanjut, baca artikel ini tentang desain CPU:
sumber
Saya ingin membahas satu poin Sintaksis: Istilah CPU dan GPU adalah nama fungsional bukan nama arsitektur.
Jika sebuah komputer menggunakan GPU sebagai prosesor utamanya, maka ia akan menjadi "central processing unit" (CPU) terlepas dari arsitektur dan desainnya.
sumber
Penting untuk diingat bahwa tidak ada garis pemisah magis dalam ruang arsitektur yang membuat satu prosesor menjadi "sentral" dan satu lagi "grafis". (Ya, beberapa GPU mungkin terlalu lumpuh untuk sepenuhnya umum, tetapi itu bukan yang sedang kita bicarakan di sini.)
Perbedaannya adalah salah satu cara mereka dipasang di papan tulis dan tugas apa yang diberikan kepada mereka. Tentu saja, kami menggunakan prosesor tujuan umum (atau serangkaian prosesor tujuan umum) untuk penggerak data utama, dan unit khusus yang diparalelkan, sangat pipa untuk hal-hal (seperti grafik) agar dapat memanfaatkannya dengan sebaik-baiknya.
Sebagian besar trik rumit yang telah digunakan untuk membuat GPU melakukan hal mereka dengan sangat cepat pertama kali dikembangkan oleh orang-orang yang mencoba membuat CPU yang lebih cepat dan lebih baik. Ternyata Word dan Excel serta Netscape dan banyak hal lain yang digunakan orang-orang di komputer mereka tidak hanya tidak memanfaatkan fitur-fitur yang ditawarkan oleh chip khusus grafis tetapi bahkan berjalan lebih lambat pada arsitektur tersebut karena banyak cabang (sangat mahal) dan lambat) saluran pipa hilang.
sumber
Inti dari adanya GPU sama sekali adalah untuk melegakan CPU dari perhitungan grafik yang mahal yang dilakukannya saat itu.
Dengan menggabungkan mereka ke satu prosesor lagi akan kembali ke tempat semuanya dimulai.
sumber
Untuk alasan sederhana: sebagian besar aplikasi tidak multi-threaded / vectorized.
Kartu grafis sangat bergantung pada multi threading, setidaknya dalam konsepnya.
Bandingkan mobil dengan mesin tunggal, mobil dengan satu mesin lebih kecil per roda. Dengan mobil yang terakhir, Anda perlu memerintahkan semua mesin, sesuatu yang belum diperhitungkan untuk sudut pandang pemrograman sistem.
Dengan AMD fusion, itu akan mengubah cara kita perlu memanfaatkan kekuatan pemrosesan: baik vektor, baik cepat untuk satu utas.
sumber
Alasan kami masih menggunakan CPU adalah karena CPU dan GPU memiliki kelebihan unik. Lihat makalah saya berikut ini, yang diterima di ACM Computing Survey 2015, yang menyediakan diskusi konklusif dan komprehensif tentang beralih dari 'debat CPU vs GPU' ke 'komputasi kolaboratif CPU-GPU'.
Sebuah Survei Teknik Komputasi heterogen CPU-GPU
sumber
Jika disederhanakan GPU dapat dibandingkan dengan trailer di dalam mobil. Seperti biasanya belalai sudah cukup untuk sebagian besar orang kecuali untuk kasing jika mereka membeli sesuatu yang sangat besar. Maka mereka dapat membutuhkan trailer. Sama dengan GPU, seperti biasanya sudah cukup untuk memiliki CPU biasa yang akan menyelesaikan sebagian besar tugas. Tetapi jika Anda membutuhkan perhitungan intensif di banyak utas, maka Anda dapat membutuhkan GPU
sumber
GPU adalah pemroses arus yang baik. Anda dapat menganggap pemrosesan aliran sebagai mengalikan array panjang angka secara berurutan. CPU juga memiliki kemampuan pemrosesan aliran (ini disebut ekstensi SIMD) tetapi Anda tidak dapat menerapkan semua logika pemrograman sebagai pemrosesan aliran, dan kompiler memiliki opsi untuk membuat btyecode yang membuat penggunaan instruksi simd bila memungkinkan.
tidak semuanya adalah array angka. gambar dan video, mungkin terdengar juga (ada pembuka encencl di sana-sini). sehingga GPU dapat memproses, menyandikan dan mendekode gambar, video, dan hal serupa lainnya. satu kekurangannya adalah bahwa Anda tidak dapat membongkar semuanya ke GPU dalam game karena itu akan membuat gagap, GPU sibuk dengan grafis dan seharusnya menjadi hambatan dalam sistem saat bermain game. solusi optimal akan sepenuhnya memanfaatkan semua komponen dalam pc. jadi, misalnya, mesin Physx nvidia, secara default, melakukan perhitungan pada CPU ketika CPU sepenuhnya digunakan.
sumber