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.
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
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.
sumber
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.
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
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).
sumber