Saya mendengar orang menggunakan FPGA untuk meningkatkan kinerja sistem yang melakukan hal-hal seperti penambangan bit-koin, perdagangan elektronik, dan pelipatan protein.
Bagaimana FPGA dapat bersaing dengan CPU pada kinerja ketika CPU biasanya menjalankan setidaknya urutan besarnya lebih cepat (dalam hal kecepatan clock)?
Jawaban:
CPU adalah perangkat pemrosesan berurutan. Mereka memecah algoritma menjadi urutan operasi dan menjalankannya satu per satu.
FPGA adalah (atau, dapat dikonfigurasi sebagai) perangkat pemrosesan paralel. Seluruh algoritme dapat dieksekusi dalam satu tick tunggal jam, atau, kasus terburuk, tick tick clock jauh lebih sedikit daripada yang dibutuhkan prosesor berurutan. Salah satu biaya untuk kompleksitas logika yang meningkat biasanya batas bawah di mana perangkat dapat clock.
Mengingat hal di atas, FPGA dapat mengungguli CPU dalam melakukan tugas-tugas tertentu karena mereka dapat melakukan tugas yang sama dalam waktu yang lebih singkat, meskipun pada laju jam keseluruhan yang lebih rendah. Keuntungan yang dapat dicapai sangat tergantung pada algoritma, tetapi setidaknya urutan besarnya tidak sama untuk sesuatu seperti FFT.
Lebih lanjut, karena Anda dapat membangun beberapa unit eksekusi paralel menjadi FPGA, jika Anda memiliki volume data yang besar yang ingin Anda lewati algoritma yang sama, Anda dapat mendistribusikan data di seluruh unit eksekusi paralel dan mendapatkan pesanan lebih lanjut dengan throughput yang lebih tinggi daripada yang bisa dicapai bahkan dengan CPU multi-core.
Harga yang Anda bayar untuk keuntungannya adalah konsumsi daya dan $$$.
sumber
Markt memiliki ini sebagian besar benar, tetapi saya akan membuang 2 sen saya di sini:
Bayangkan saya mengatakan kepada Anda bahwa saya ingin menulis sebuah program yang membalik urutan bit di dalam integer 32-bit. Sesuatu seperti ini:
Sekarang implementasi saya tidak elegan, tapi saya yakin Anda setuju bahwa akan ada sejumlah operasi yang terlibat dalam melakukan ini, dan mungkin semacam loop. Ini berarti bahwa dalam CPU, Anda telah menghabiskan lebih dari 1 siklus untuk mengimplementasikan operasi ini.
Dalam FPGA, Anda bisa memasang ini sebagai sepasang kait. Anda memasukkan data Anda ke dalam register, lalu Anda mengirimkannya ke register berbeda dalam urutan bit terbalik. Ini berarti bahwa operasi akan selesai dalam satu siklus clock tunggal dalam FPGA. Dengan demikian, dalam satu siklus, FPGS telah menyelesaikan operasi yang mengambil CPU tujuan umum Anda ribuan siklus untuk menyelesaikan! Selain itu, Anda dapat memasang mungkin beberapa ratus register ini secara paralel. Jadi jika Anda dapat memindahkan beberapa ratus angka ke FPGA, dalam satu siklus akan menyelesaikan ribuan operasi itu ratusan kali lipat, semua dalam 1 siklus clock FPGA.
Ada banyak hal yang dapat dilakukan oleh CPU dengan tujuan umum, tetapi sebagai batasan, kami membuat instruksi umum dan sederhana yang perlu diperluas ke daftar instruksi sederhana untuk menyelesaikan beberapa tugas. Jadi saya dapat membuat CPU tujuan umum memiliki instruksi seperti "urutan bit terbalik untuk register 32 bit" dan memberikan CPU kemampuan yang sama dengan FPGA yang baru saja kami buat, tetapi ada jumlah tak terbatas dari instruksi berguna yang mungkin, dan kami hanya memasukkan yang membutuhkan biaya dalam CPU populer.
FPGA, CPLD, dan ASIC semuanya memberi Anda akses ke perangkat keras mentah, yang memungkinkan Anda untuk menentukan operasi gila seperti "mendekripsi byte terenkripsi AES256 dengan kunci" atau "bingkai decode video h.264". Ini memiliki latensi lebih dari satu siklus clock dalam FPGA, tetapi mereka dapat diimplementasikan dalam cara yang jauh lebih efisien daripada menuliskan operasi dalam jutaan baris kode perakitan tujuan umum. Ini juga memiliki manfaat menjadikan FPGA / ASIC tujuan-tetap untuk banyak operasi ini lebih hemat daya karena mereka tidak harus melakukan banyak pekerjaan asing!
Paralelisme adalah bagian lain yang menunjukkan, dan sementara itu penting juga, hal utama adalah ketika FPGA memparalelkan sesuatu yang sudah mahal dalam CPU dalam hal siklus yang diperlukan untuk melakukan operasi. Setelah Anda mulai mengatakan "Saya dapat melakukan dalam 10 siklus FPGA tugas yang membutuhkan CPU 100.000 siklus saya, dan saya dapat melakukan tugas ini secara paralel 4 item sekaligus," Anda dapat dengan mudah melihat mengapa FPGA bisa menjadi hal yang banyak. lebih cepat dari CPU!
Jadi mengapa kita tidak menggunakan FPGA, CPLD, dan ASIC untuk semuanya? Karena secara umum itu adalah seluruh chip yang tidak melakukan apa pun kecuali satu operasi. Ini berarti bahwa meskipun Anda bisa mendapatkan proses untuk menjalankan banyak pesanan lebih besar di FPGA / ASIC Anda, Anda tidak dapat mengubahnya nanti ketika operasi itu tidak lagi berguna. Alasan Anda tidak dapat (secara umum) mengubah FPGA setelah berada dalam suatu rangkaian adalah karena kabel untuk antarmuka telah diperbaiki, dan biasanya rangkaian tersebut tidak menyertakan komponen yang memungkinkan Anda memprogram ulang FPGA menjadi konfigurasi yang lebih bermanfaat. Ada beberapa peneliti yang mencoba membangun modul hybrid FPGA-CPU, di mana ada bagian dari CPU yang mampu dirancang ulang / diprogram ulang seperti FPGA, memungkinkan Anda untuk "memuat" bagian efektif dari CPU,
sumber
Semua jawaban populer lainnya yang disajikan di sini berbicara tentang perbedaan literal antara FPGA dan CPU. Mereka menunjukkan sifat paralel dari FPGA vs sifat berurutan dari sebuah CPU, atau memberikan contoh mengapa algoritma tertentu mungkin bekerja dengan baik pada FPGA. Semua itu bagus dan benar, tetapi saya menyarankan bahwa ada perbedaan yang lebih mendasar antara CPU dan FPGA.
Apa persamaan umum antara FPGA dan CPU? Keduanya dibuat di atas silikon. Dan dalam beberapa kasus secara harfiah proses silikon yang sama.
Perbedaan mendasar adalah abstraksi yang kita susun di atas silikon itu. Tidak mungkin bagi satu manusia untuk memahami detail lengkap dari desain CPU modern tunggal dari silikon ke IC yang dikemas. Jadi sebagai bagian dari proses rekayasa kami membagi masalah kompleks menjadi masalah yang lebih kecil yang dapat dikelola manusia sehingga dapat membungkus kepala mereka.
Pertimbangkan apa yang diperlukan untuk mengubah silikon itu menjadi CPU yang berfungsi. Inilah pandangan yang agak disederhanakan dari lapisan abstraksi yang diperlukan untuk tujuan itu:
Pertama, kami memiliki insinyur yang tahu cara membuat transistor dari silikon. Mereka tahu bagaimana merancang transistor kecil yang menyedot daya dan beralih pada tingkat 10 atau bahkan 100-an gigahertz, dan mereka tahu bagaimana merancang transistor gemuk yang dapat menggerakkan sinyal dengan daya yang cukup untuk mengirim mereka keluar dari paket IC dan melintasi PCB ke chip lain.
Kemudian kami memiliki perancang logika digital yang tahu bagaimana menempatkan transistor-transistor itu ke perpustakaan dengan ratusan sel logika yang berbeda. Gerbang logika, sandal jepit, muxes, dan adders, untuk beberapa nama. Semua dalam berbagai konfigurasi.
Selanjutnya kita memiliki berbagai kelompok insinyur yang tahu bagaimana menempatkan blok-blok digital (dan kadang-kadang analog) untuk membentuk blok fungsional tingkat tinggi seperti transceiver kecepatan tinggi, pengontrol memori, prediktor cabang, ALU, dll.
Kemudian kami memiliki perancang CPU untuk merancang desain CPU kelas atas dengan menyatukan unit-unit fungsional tersebut ke dalam sistem yang lengkap.
Dan itu tidak berhenti di situ. Pada titik ini kami memiliki CPU yang berfungsi yang menjalankan kode assembly tetapi itu bukan bahasa yang kebanyakan programmer tulis hingga saat ini.
Dan lapisan abstraksi dapat melanjutkan dari sana. Poin penting di sini adalah bahwa lapisan-lapisan abstraksi bergabung untuk menghasilkan sistem berbasis CPU yang skala besar-besaran dan biaya sebagian kecil dari desain silikon kustom.
NAMUN, poin penting yang harus dibuat di sini adalah bahwa setiap abstraksi juga membawa biaya itu sendiri. Perancang transistor tidak membangun transistor yang sempurna untuk setiap kasus penggunaan. Dia membangun perpustakaan yang masuk akal, dan kadang-kadang sebuah transistor digunakan yang menghabiskan daya lebih sedikit atau sedikit lebih banyak silikon daripada yang benar-benar dibutuhkan untuk pekerjaan yang sedang dilakukan. Dan demikian pula para perancang logika tidak membangun setiap sel logika yang mungkin. Mereka mungkin membangun gerbang NAND 4 input dan gerbang NAND 8 input tetapi apa yang terjadi ketika insinyur lain membutuhkan 6 input NAND? Dia menggunakan 8 input gerbang NAND dan mengikat 2 input yang tidak digunakan yang menghasilkan sumber daya silikon yang hilang dan tenaga yang terpotong. Dan begitulah seterusnya rantai abstraksi. Setiap lapisan memberi kita cara untuk menangani kompleksitas,
Sekarang bandingkan abstraksi itu dengan apa yang dibutuhkan untuk FPGA. Pada dasarnya, abstraksi FPGA berhenti di # 2 dalam daftar di atas. FPGA memungkinkan pengembang untuk bekerja di lapisan logika digital. Ini agak lebih canggih daripada itu karena CPU 'hard coded' pada layer ini dan FPGA harus dikonfigurasi pada waktu berjalan (yang, BTW, itulah mengapa CPU biasanya menjalankan frekuensi yang jauh lebih tinggi), tetapi kebenaran penting yang penting adalah bahwa itu jauh beberapa abstraksi untuk FPGA daripada untuk CPU.
Jadi, Mengapa FPGA bisa lebih cepat dari CPU? Pada dasarnya itu karena FPGA menggunakan abstraksi yang jauh lebih sedikit daripada CPU, yang berarti perancang bekerja lebih dekat dengan silikon. Dia tidak membayar biaya dari semua lapisan abstraksi yang diperlukan untuk CPU. Dia kode pada tingkat yang lebih rendah dan harus bekerja lebih keras untuk mencapai sedikit fungsionalitas yang diberikan tetapi hadiah dia mendapatkan kinerja yang lebih tinggi.
Tapi tentu saja ada sisi buruk untuk abstraksi yang lebih sedikit juga. Semua abstraksi CPU itu ada karena alasan yang bagus. Mereka memberi kita paradigma pengkodean yang lebih sederhana yang berarti lebih banyak orang dapat dengan mudah mengembangkannya. Yang pada gilirannya berarti ada lebih banyak desain CPU yang ada dan dengan demikian kami memiliki manfaat harga / skala / waktu-ke-pasar yang besar dari CPU.
Jadi begitulah. FPGA memiliki abstraksi yang lebih sedikit sehingga dapat lebih cepat dan lebih hemat daya tetapi sulit diprogram. CPU memiliki banyak desain abstraksi untuk membuatnya mudah dikembangkan, terukur, dan murah. Tetapi mereka melepaskan kecepatan dan kekuatan dalam perdagangan untuk keuntungan itu.
sumber
Sementara jawaban lainnya semuanya benar, belum ada satupun yang membahas contoh penambangan bitcoin dari pertanyaan Anda, yang memang merupakan contoh yang layak. Penambangan Bitcoin berulang kali melibatkan penghitungan fungsi hash kriptografis, SHA-256 dari hasil perhitungan SHA-256 lain, dari data di mana hanya satu bilangan bulat 32-bit berubah, hingga hash yang dihasilkan memiliki sifat tertentu. Setiap SHA-256 terdiri dari 64 pengulangan dari algoritma yang sama yang melibatkan penambahan 32-bit, bithift, dan beberapa operasi bit-mangling lainnya.
Jika Anda memprogram loop ini pada CPU 32-bit (atau lebih), Anda akan menemukan set instruksi yang sangat cocok untuk tugas --- SHA-256 dirancang untuk berjalan secara efisien pada CPU. Tetap saja Anda hanya akan menggunakan sekitar 2% dari area silikon CPU modern, dengan fungsi intensif seperti caching, perkalian, pembagian, operasi floating point, percabangan dan prediksi brach, dll., Baik tidak digunakan sama sekali atau tidak dapat memberikan signifikan peningkatan kinerja untuk tugas khusus ini.
Dalam perangkat keras yang dapat dikonfigurasi seperti FPGA, Anda hanya mengimplementasikan 2% itu, dan mengoptimalkan lebih lanjut dengan melupakan semua tentang eksekusi kode, alih-alih merancang gerbang untuk secara langsung menghitung masing-masing subfungsi yang sering diulang. Pipelined sedemikian rupa sehingga masing-masing dari mereka melewati hasil ke dalam setiap clock clock berikutnya, dan diulang 128 kali (dan dengan beberapa logika tambahan khusus di mana setiap SHA-256 dimulai dan berakhir), Anda akhirnya mendapatkan hasil setiap siklus clock (untuk mungkin 100 juta hash per detik pada FPGA yang diiklankan untuk mendukung 300 MHz pada logika yang lebih sederhana daripada ini) sementara pada CPU modern, Anda dapat mengharapkan satu hasil setiap beberapa ribu clock clock per core, katakanlah 10 juta hash per detik pada multi-core multi CPU -GHz.
Jika contoh khusus ini menarik bagi Anda, Anda mungkin ingin melihat jawaban terkait saya tentang internal ASIC penambang di bitcoin.stackexchange, karena banyak penambang FPGA bekerja dengan cara yang sama menggunakan perangkat keras yang dapat dikonfigurasi daripada yang dibuat khusus. Demi kelengkapannya saja: Ada kemungkinan lain, seperti membatasi atau menghindari perpipaan yang saya jelaskan demi paralelisasi yang lebih sepele dengan menggunakan beberapa hashers SHA-256 yang independen. Bergantung pada kendala yang diberikan oleh internal FPGA Anda dan ukuran totalnya, yang bahkan dapat memberikan kinerja yang lebih baik walaupun akan lebih efisien dalam hal jumlah gerbang dan perutean overhead jika Anda memiliki kebebasan sempurna dalam merancang seluruh chip, bukan hanya konfigurasi FPGA. .
sumber
Jawaban di atas, meskipun benar, kehilangan poin tentang mengapa FPGA (dan ASIC khusus) sangat baik untuk perhitungan bitcoin.
Keuntungan sebenarnya adalah bahwa sebagian besar perhitungan SHA-256 adalah operasi logis (misalnya, bit shift) yang dapat dilakukan dalam perkabelan. Ketika dilakukan dengan cara ini, mereka membutuhkan 0 siklus clock.
Keuntungan penting lainnya adalah FPGA jauh lebih hemat daya (yaitu MIPS per Watt) daripada CPU, sehingga jumlah energi yang dibutuhkan untuk perhitungan jauh lebih sedikit. Ini penting karena biaya penambangan bitcoin tergantung pada berapa banyak listrik yang Anda gunakan untuk membuatnya.
Chip ASIC lebih hemat energi daripada FPGA, sehingga mereka dapat mengeksekusi kode yang sama jauh lebih murah. Anda juga dapat menjejalkan lebih banyak unit eksekusi di papan untuk membuatnya lebih cepat. Kerugiannya adalah biaya pembuatan ASIC khusus sangat tinggi sehingga Anda perlu menjual beberapa chip untuk menutupi biaya pembuatan.
GPU, juga digunakan untuk membuat bitcoin, tetapi karena mereka jauh lebih hemat energi, mereka telah kehilangan landasan bagi FPGA dan ASIC khusus.
sumber