Bisakah FPGA melakukan PC multi-core?


20

Saya tidak mengerti bagaimana FPGA dapat digunakan untuk mempercepat suatu algoritma. Saat ini saya sedang menjalankan algoritma real time yang memakan waktu pada laptop quadcore sehingga empat perhitungan dapat dilakukan secara paralel.

Saya baru-baru ini diberitahu bahwa FPGA dapat menghasilkan kinerja yang lebih baik. Saya tidak mengerti cara kerjanya. Dapatkah seseorang menjelaskan bagaimana FPGA mempercepat suatu algoritma dan jika saya harus beralih ke Xilinx atau solusi Altera FPGA atau tetap melakukan perhitungan pada laptop quadcore saya.

Rincian Tambahan: Algoritma ini menjalankan 20 jaringan saraf tiruan menggunakan input yang dimasukkan melalui transformasi paket wavelet

Terima kasih atas jawaban yang bagus.


1
Sudahkah Anda mempertimbangkan menjalankan algoritma pada CPU desktop (atau server)? Itu biasanya lebih cepat dari CPU laptop. (Dengan faktor konstan, tetapi masih lebih cepat.)
ntoskrnl

1
Pikirkan tentang menggunakan GPU untuk pemrosesan jaringan saraf. GPU memiliki banyak unit yang dapat mengalikan angka floating point secara paralel.
Kamil

@ntoskrnl Saya berasumsi dia memiliki CPU i5 atau lebih baik (4 core) sehingga kinerja pada desktop atau server hanya akan proprotional terhadap kecepatan clock. Mungkin di Xeon ia bisa mendapatkan sedikit (20%?) Kinerja berkat cache yang besar dan bandwidth memori yang lebih baik, tapi itu tidak banyak.
Kamil

CPU apa yang Anda miliki?
Kamil

Waktu pertanyaan yang menarik, kami mendapat pertanyaan serupa tentang networkengineering.SE
Mike Pennington

Jawaban:


23

Seorang rekan saya mengacu ini dan sampai pada kesimpulan bahwa FPGA akan mengungguli PC setelah Anda memiliki lebih dari sekitar 100 independen , bilangan bulat tugas-tugas yang akan cocok di FPGA. Untuk tugas floating point, GPGPU mengalahkan seluruh FPGA. Untuk operasi multithreading atau SIMD yang sempit maka CPU sangat dioptimalkan dan berjalan pada kecepatan clock yang lebih tinggi daripada yang biasanya dicapai oleh FPGA.

Peringatan lainnya: tugas harus independen. Jika ada ketergantungan data antara tugas-tugas maka itu membatasi jalur kritis perhitungan. FPGA baik untuk evaluasi boolean dan matematika integer, serta antarmuka latensi perangkat keras, tetapi tidak untuk beban kerja atau titik apung yang bergantung pada memori.

Jika Anda harus menyimpan beban kerja dalam DRAM maka itu akan menjadi hambatan daripada prosesor.


3
Untuk memutuskan apakah DRAM adalah batasnya, Anda juga harus tahu bahwa FPGA memiliki banyak RAM kecil yang didistribusikan (mis. 500 blok RAM 9kbit independen) yang semuanya dapat membaca / menulis selama siklus clock yang sama.
maksimal

19

FPGA bekerja dengan sangat berbeda dari prosesor.

Untuk prosesor, Anda menulis perangkat lunak yang memberi tahu perangkat keras apa yang harus dilakukan. Pada FPGA Anda menggambarkan "seperti apa perangkat kerasnya" secara internal. Seolah-olah Anda membuat chip yang khusus dibuat untuk algoritme Anda.

Ini mempercepat banyak hal dan dapat menurunkan konsumsi daya. Tetapi ada kekurangannya: Pengembangannya memakan waktu lebih lama dan jauh lebih rumit. Anda perlu berpikir dengan cara yang benar-benar berbeda dan tidak dapat menggunakan algoritma yang bekerja dalam perangkat lunak secara langsung.

Untuk Jaringan Saraf Tiruan, FPGA adalah pilihan yang bagus. Ada banyak penelitian yang sedang berlangsung di bidang ini.


Sebenarnya, pengembangan FPGA sering dilakukan menggunakan bahasa seperti Verilog atau VHDL yang menggambarkan perilaku daripada implementasi - sebuah fakta yang kadang berguna tetapi kadang-kadang dapat sangat menyulitkan desain logika sekuensial asinkron. Jika seseorang menentukan implementasi, keterlambatan propagasi akan agak konsisten, tetapi dalam bahasa perilaku mereka bahkan tidak dijamin positif . Hal utama dengan desain FPGA adalah bahwa bahasa membuatnya sangat mudah untuk memiliki banyak (berpotensi ratusan atau ribuan) bagian chip yang berbeda melakukan perilaku sederhana secara bersamaan.
supercat

13

Itu sangat tergantung pada algoritma, tetapi prinsipnya dapat dijelaskan dengan cukup sederhana.

Misalkan algoritma Anda harus menjumlahkan banyak angka 8-bit. CPU Anda masih perlu mengambil setiap instruksi, mendapatkan operan dari RAM atau memori cache, menjalankan penjumlahan, menyimpan hasilnya dalam cache, dan melanjutkan dengan operasi selanjutnya. Pipa membantu, tetapi Anda hanya dapat menjalankan operasi simultan sebanyak inti yang Anda miliki.

Jika Anda menggunakan FPGA, Anda dapat menerapkan sejumlah besar adders sederhana yang bekerja secara paralel, menghasilkan ribuan jumlah secara paralel. Meskipun satu operasi mungkin membutuhkan lebih banyak waktu, Anda memiliki tingkat paralelisme yang sangat besar.

Anda juga dapat menggunakan GPGPU untuk melakukan tugas serupa, karena mereka juga dibuat dari banyak inti yang lebih sederhana.


GPGPU adalah input yang bagus untuk menggunakan jaringan saraf!
Botnic

Ada juga ASIC jaringan saraf. Intel dulu membuat satu yang menerapkan 16 neuron di tahun 80-an.
Lior Bilia

@LiorBilia baik saya tidak tahu apa-apa tentang mereka :). Saya tidak pernah bekerja dengan jaringan saraf, dan sangat sedikit dengan FPGA
clabacchio

@clabacchio Software neural network adalah program yang sebagian besar melakukan penggandaan dan membandingkan operasi pada angka floating point. Maksud saya sebagian besar ... 95% atau lebih.
Kamil

CPU konvensional dapat melakukan pekerjaan yang cukup baik dalam menjumlahkan banyak angka 8-bit; pada mesin yang cepat waktu eksekusi akan didominasi oleh biaya pengambilan data dari memori (99% dari pengambilan kode akan berasal dari tangkapan). Contoh yang lebih menarik adalah bekerja dengan data yang dikodekan menggunakan skema yang memerlukan pengaturan agak "tidak biasa" atau permutasi bit. Misalnya, jika sepotong data pengambilan sampel video mengembalikan bit interleaves menjadi merah, hijau, dan biru, sebuah FPGA dapat dengan mudah mengatur ulang bit; CPU konvensional akan memiliki lebih banyak masalah.
supercat

6

Ada sekitar 3 level spesialisasi peralatan komputasi:

CPU (seperti di laptop Anda) adalah yang paling umum dari semuanya. Itu bisa melakukan segalanya, tetapi keserbagunaan ini datang dengan harga yang lambat dan konsumsi daya yang tinggi. CPU diprogram saat bepergian, instruksi datang dari RAM. Program untuk CPU cepat, murah dan mudah ditulis dan sangat mudah diubah.

FPGA (yang berarti Field Programmable Gate Array) adalah tingkat menengah. Seperti namanya itu dapat diprogram "di lapangan", yaitu di luar pabrik. FPGA biasanya diprogram sekali, proses ini dapat digambarkan sebagai pengaturan struktur internal. Setelah proses ini berperilaku seperti komputer kecil khusus untuk satu tugas yang Anda pilih untuk itu. Inilah sebabnya mengapa itu bisa tarif lebih baik daripada CPU generik. Pemrograman FPGA sangat sulit dan mahal dan men-debug mereka sangat sulit.

ASIC (yang berarti Application Integrated Integrated Circuit) adalah spesialis utama. Ini adalah chip yang dirancang dan diproduksi untuk satu dan hanya satu tugas - tugas yang dilakukannya sangat cepat dan efisien. Tidak ada kemungkinan untuk memprogram ulang ASIC, itu meninggalkan pabrik sepenuhnya dan tidak berguna ketika pekerjaan itu tidak lagi diperlukan. Merancang ASIC adalah sesuatu yang hanya bisa dilakukan oleh perusahaan besar dan men-debug mereka dengan baik, sangat tidak mungkin.

Jika Anda berpikir dalam "core", maka lihat dengan cara ini: CPU memiliki 4, 6, mungkin 8 core besar yang dapat melakukan segalanya. ASICS sering memiliki ribuan inti, tetapi sangat kecil, hanya mampu satu hal.

Anda dapat melihat komunitas penambangan bitcoin. Mereka melakukan hash SHA256.

  • CPU core i7: 0.8-1.5 M hash / s
  • FPGA: 5-300M hash / s
  • ASIC: hash / s 12000M per satu chip kecil, 2000000M (ya, 2T) hash / s untuk satu perangkat 160 chip

Tentu saja, bayi-bayi ASIC harganya hampir $ 2000 ketika diproduksi massal, tetapi memberi Anda gambaran tentang bagaimana jack-of-semua-perdagangan dapat tarif terhadap spesialis.

Satu-satunya pertanyaan adalah: dapatkah FPGA memberi Anda lebih banyak penghematan daripada mendesain biayanya? Tentu saja, alih-alih menjalankannya di SATU laptop, Anda dapat mencoba menjalankannya di 20 PCS.


Hashing adalah kasus yang sangat istimewa; perhatikan bahwa koin berbasis scrypt (sengaja) tidak terlalu dipercepat oleh perangkat keras khusus.
pjc50

1
& ASIC debugging biasanya ditangani dalam simulasi sebelum dikirim ke pabrik. Jadi biasanya 6 bulan atau lebih dari spec untuk memproduksi. Mendiagnosis bug setelah pembuatan adalah .. mahal tetapi bukan tidak mungkin.
pjc50

Dan walaupun sulit, sebenarnya bisa sangat sangat sulit, ada hal-hal seperti pemindaian batas, uji JTAG dan teknik langsung menggunakan FIB dll. Jadi jauh dari mustahil untuk men-debug mereka, Anda hanya perlu tahu apa yang Anda lakukan . Sekarang, ASIC lebih mengacu pada aliran desain (HDL, Synthesis, P&R) yang sebenarnya mengacu pada perangkat yang sebenarnya karena sebagian besar perangkat ASIC termasuk hal-hal seperti prosesor ARM.
placeholder

@ pjc50 Ya, itu maksud saya - dalam kasus khusus, perbedaan kecepatan luar biasa. Tapi asik scrypt masih mengotori CPU dan GPU. Tidak dengan faktor juta (seperti halnya sha), tetapi masih lebih dari 100.
Agent_L

@ placeholder ya, tetapi bahkan jika Anda menemukan bug, itu tidak banyak digunakan untuk semua chip yang sudah dibuat. Maksud saya "debugging" seperti dalam "menghapus bug" bukan hanya "ini dia".
Agent_L

5

Ya, FPGA dapat mengungguli CPU modern (seperti Intel i7) dalam beberapa tugas spesifik, tetapi ada metode yang lebih mudah dan lebih murah untuk meningkatkan kinerja jaringan saraf.

Yang lebih murah - maksud saya upaya total, bukan biaya IC FPGA, tetapi juga memori yang sangat cepat untuk FPGA (Anda akan membutuhkannya untuk jaringan saraf) dan seluruh proses pengembangan.

  1. Gunakan SSE - Saya telah melihat implementasi jaringan saraf yang cukup sederhana dengan kinerja 2-3x lebih baik. Ini mungkin ide yang baik jika Anda tidak memiliki GPU khusus di laptop Anda.

    Meningkatkan kecepatan jaringan saraf pada CPU oleh Vincent Vanhoucke dan Andrew Senior

  2. Gunakan GPGPU (Komputasi serba guna pada unit pemrosesan grafik) - Saya pikir Anda dapat menyimpan peningkatan kinerja 100-200x pada GPU laptop kelas menengah seperti GeForce 730M.

    Berikut ini adalah implementasi jaringan saraf (dan kode gratis). Ini menggunakan Nvidia CUDA.

    Pendekatan GPGPU sangat scalable, jika pada titik tertentu Anda menyadari bahwa Anda membutuhkan lebih banyak daya komputasi - Anda hanya dapat menggunakan komputer desktop dengan GPU yang lebih kuat atau bahkan Nvidia Tesla K80 dengan 4992 core (itu mahal).


1
Masalahnya di sini adalah mendefinisikan kinerja. Jika kita maksud lebih cepat maka ya, FPGA bisa lebih cepat dari CPU normal. Namun, FPGA tidak begitu fleksibel seperti CPU, Mereka dirancang untuk menjalankan efisien hanya tugas yang telah ditentukan. Melaksanakan tugas lain akan berarti mengubah kabel internal yang sebenarnya mengimplementasikan FPGA lain
Gianluca Ghettini
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.