FPGA çıkışı çok çekirdekli bir bilgisayar yapabilir mi?


20

FPGA'nın bir algoritmayı hızlandırmak için nasıl kullanılabileceğini anlamıyorum. Şu anda dört hesaplama paralel olarak yapılabilmesi için bir quadcore dizüstü bilgisayarda zaman alıcı gerçek zamanlı algoritma çalıştırıyorum.

Kısa bir süre önce FPGA'nın daha iyi performans sağlayabileceği konusunda uyarıldım. Bunun nasıl çalıştığını anlamıyorum. Birisi FPGA'nın bir algoritmayı nasıl hızlandırdığını açıklayabilir mi ve bir Xilinx veya Altera FPGA çözümüne geçmeli miyim veya quadcore dizüstü bilgisayarımda hesaplamaları yapmaya devam edersem.

Ek Ayrıntılar: Algoritma, dalgacık paket dönüşümünden beslenen girdileri kullanarak 20 yapay sinir ağı çalıştırır

Harika cevaplar için hepinize teşekkür ederim.


1
Algoritmayı bir masaüstü (veya sunucu) CPU üzerinde çalıştırmayı düşündünüz mü? Bunlar genellikle dizüstü bilgisayar CPU'larından daha hızlıdır. (Sabit bir faktör tarafından, ancak yine de daha hızlı.)
ntoskrnl

1
Sinir ağı işleme için GPU kullanmayı düşünün. GPU'lar, kayan nokta sayılarını paralel olarak çarpabilen birçok birime sahiptir.
Kamil

@ntoskrnl Masaüstü veya sunucudaki performansın saat hızına göre daha iyi olacağı için i5 veya daha iyi işlemci (4 çekirdekli) olduğunu varsayıyorum. Belki Xeon'da büyük önbellek ve daha iyi bellek bant genişliği sayesinde çok az (% 20?) Performans kazanabilir, ancak bu çok fazla değil.
Kamil

Hangi CPU'nuz var?
Kamil

Soruların ilginç zamanlaması, networkengineering ile ilgili benzer bir soru aldık.SE
Mike Pennington

Yanıtlar:


23

Bir meslektaşım bunu karşılaştırdı ve FPGA'ya uyacak yaklaşık 100'den fazla bağımsız , tamsayı göreviniz olduğunda FPGA'ların bir PC'den daha iyi performans göstereceği sonucuna vardı . Kayan nokta görevleri için GPGPU FPGA'yı yendi. Dar çoklu kullanım veya SIMD işlemi için CPU'lar son derece optimize edilmiştir ve FPGA'ların genellikle elde ettiğinden daha yüksek bir saat hızında çalışır.

Diğer uyarılar: görevler bağımsız olmalıdır. Görevler arasında veri bağımlılıkları varsa, bu kritik hesaplama yolunu sınırlar. FPGA'lar, boole değerlendirmesi ve tamsayı matematiğinin yanı sıra donanım düşük gecikmeli arabirimleri için iyidir, ancak belleğe bağlı iş yükleri veya kayan nokta için iyi değildir.

İş yükünü DRAM'de tutmanız gerekiyorsa, bu işlemciden ziyade darboğaz olacaktır.


3
DRAM'in sınır olup olmadığına karar vermek için, FPGA'ların aynı saat döngüsü sırasında okuyabilen / yazabilen birçok küçük dağıtılmış RAM'e (örneğin 500 bağımsız 9kbit RAM bloğu) sahip olduğunu da bilmelisiniz.
maxy

19

Bir FPGA bir işlemciden tamamen farklı çalışır.

Bir işlemci için donanıma ne yapacağını söyleyen bir yazılım yazarsınız. Bir FPGA'da dahili olarak "donanımın neye benzemesi gerektiğini" açıklarsınız. Algoritmanız için özel olarak yapılmış bir yonga yapıyormuşsunuz gibi.

Bu birçok şeyi hızlandırır ve güç tüketimini azaltabilir. Ama dezavantajları var: Geliştirme çok daha uzun sürüyor ve çok daha karmaşık. Tamamen farklı bir şekilde düşünmeniz gerekiyor ve yazılımda düz bir şekilde çalışan algoritmaları kullanamazsınız.

Yapay Sinir Ağları için FPGA mükemmel bir seçimdir. Bu alanda devam eden birçok araştırma var.


Aslında, FPGA geliştirme genellikle Verilog veya VHDL gibi uygulamadan ziyade davranışı tanımlayan diller kullanılarak yapılır - bazen yararlı olan ancak bazen asenkron ardışıl mantık tasarımını büyük ölçüde karmaşıklaştıran bir gerçek. Biri uygulamaları belirtiyor olsaydı, yayılma gecikmeleri biraz tutarlı olurdu, ancak davranış dillerinde pozitif olduğu bile garanti edilmez . FPGA tasarımında kilit nokta, dillerin çipin birçok (potansiyel olarak yüzlerce veya binlerce) farklı parçasının aynı anda basit davranışlar gerçekleştirmesini çok kolay hale getirmesidir.
supercat

13

Algoritmaya çok bağlıdır, ancak prensip oldukça basit bir şekilde açıklanabilir.

Diyelim ki algoritmanızın çok sayıda 8-bit sayı toplaması gerekiyor. CPU'nuzun her komutu alması, işlenenleri RAM'den veya önbellekten alması, toplamı yürütmesi, sonucu önbellekte saklaması ve bir sonraki işleme devam etmesi gerekir. Boru hattı yardımcı olur, ancak sahip olduğunuz çekirdeklerle aynı anda çok sayıda işlemi gerçekleştirebilirsiniz.

Bir FPGA kullanıyorsanız, paralel olarak çalışan çok sayıda basit toplayıcı uygulayabilir, belki de binlerce toplamı paralel olarak kırabilirsiniz. Tek bir işlem daha fazla zaman alsa da, büyük bir paralellik dereceniz vardır.

GPGPU'yu, benzer görevleri yapmak için de kullanabilirsiniz, çünkü bunlar daha basit çekirdeklerden de yapılır.


GPGPU kullanan sinir ağları için harika bir girdi!
Botnic

Sinir ağı ASIC'leri de vardır. Intel 80'lerde 16 nöron uygulayan bir tane yapardı.
Lior Bilia

@LiorBilia iyi onlar hakkında hiçbir şey bilmiyorum :). Sinir ağları ile hiç çalışmadım ve FPGA ile çok az
çalıştım

@clabacchio Yazılım sinir ağı, kayan nokta sayıları üzerindeki işlemleri çoğaltan ve karşılaştıran bir programdır. Çoğunlukla demek istediğim ...% 95 veya daha fazla.
Kamil

Geleneksel bir CPU, 8 bitlik sayıları bir araya getirerek oldukça iyi bir iş yapabilir; hızlı bir makinede, yürütme süresine bellekten veri getirme maliyeti hakim olacaktır (kod getirilerinin% 99'u yakalamadan gelir). Daha ilginç bir örnek, oldukça "alışılmadık" düzenlemeler veya bitlerin permütasyonu gerektiren bir şema kullanılarak kodlanan verilerle çalışmak olabilir. Örneğin, bir parça video örnekleme verisi kırmızı, yeşil ve mavi için serpiştirme bitleri döndürürse, bir FPGA bitleri kolayca yeniden düzenleyebilir; geleneksel bir CPU'nun çok daha fazla sorunu olur.
supercat

6

Bilgisayar ekipmanının kabaca 3 uzmanlık seviyesi vardır:

CPU (dizüstü bilgisayarınızda olduğu gibi) en genel olanıdır. Her şeyi yapabilir, ancak bu çok yönlülük, düşük hız ve yüksek güç tüketimi pahasına gelir. CPU hareket halindeyken programlanır, talimatlar RAM'den gelir. CPU programları hızlı, ucuz ve yazması kolaydır ve değiştirilmesi çok kolaydır.

FPGA (Alan Programlanabilir Kapı Dizisi anlamına gelir) orta düzeydir. Adından da anlaşılacağı gibi, "fabrikada", yani bir fabrika dışında programlanabilir. FPGA genellikle bir kez programlanır, bu süreç iç yapısını kurmak olarak tanımlanabilir. Bu işlemden sonra, seçtiğiniz görev için uzmanlaşmış küçük bir bilgisayar gibi davranır. Bu yüzden genel CPU'dan daha iyi ücret alabilir. FPGA'nın programlanması çok zor ve pahalıdır ve hata ayıklamak çok zordur.

ASIC (Uygulamaya Özel Entegre Devre anlamına gelir) en üst düzey uzmandır. Bir ve sadece bir görev için tasarlanmış ve üretilmiş bir çip - son derece hızlı ve verimli bir görev. ASIC'i yeniden programlama imkanı yoktur, fabrikayı tamamen tanımlanmış olarak bırakır ve işine artık gerek kalmadığında işe yaramaz. ASIC tasarlamak, sadece büyük şirketlerin karşılayabileceği bir şeydir ve hata ayıklamak iyi, neredeyse imkansızdır.

Eğer "çekirdekler" düşünürseniz, şu şekilde bakın: CPU'ların her şeyi yapabilen 4, 6, belki 8 büyük çekirdeği vardır. ASICS'in genellikle binlerce çekirdeği vardır, ancak çok küçük olanlar, yalnızca bir şey yapabilir.

Bitcoin madencilik topluluğuna bakabilirsiniz. SHA256 karma yapıyorlar.

  • CPU çekirdeği i7: 0.8-1.5 M karma / s
  • FPGA: 5-300M karma / sn
  • ASIC: Bir küçük çip başına 12000M hash / s, bir 160 çipli cihaz için 2000000M (evet, bu 2T) hash / s

Tabii ki, bu ASIC bebekler kitle üretildiğinde neredeyse 2000 dolara mal oluyor, ancak size bir jack-of-trades'in bir uzmana karşı nasıl para kazanabileceği hakkında bir fikir veriyor.

Tek soru şudur: FPGA size tasarlayacağından daha fazla tasarruf sağlayabilir mi? Tabii ki, bir dizüstü bilgisayarda çalıştırmak yerine, 20 PC'de çalıştırmayı deneyebilirsiniz.


Hashing çok özel bir durum olsa da; Scrypt tabanlı paraların özel donanımlarla (kasıtlı olarak) çok hızlanamayacağını unutmayın.
pjc50

1
& ASIC hata ayıklama genellikle üretime gönderilmeden önce simülasyonda işlenir. Bu nedenle, spesifikasyondan üretime genellikle 6 ay veya daha fazla. Üretimden sonra hataları teşhis etmek .. pahalıdır, ancak imkansız değildir.
pjc50

Ve zor olsa da, aslında çok çok zor olabilir, sınır taraması, JTAG testi ve FIB kullanarak doğrudan teknikler gibi şeyler vardır. Bu nedenle, hata ayıklamak imkansız olmaktan çok, ne yaptığınızı bilmeniz yeterlidir. . Şimdi bir gün ASIC, gerçekte gerçek bir cihaza atıfta bulunduğu bir tasarım akışına (HDL, Synthesis, P&R) atıfta bulunur, çünkü çoğu cihaz ASIC'dir ve ARM işlemcileri gibi şeyleri içerir.
placeholder

@ pjc50 Evet, bu benim açımdan - özel durumlarda hız farkı muazzam. Ancak scrypt asics hala CPU'ları ve GPU'ları seçiyor.
Milyonluk

@placeholder evet, ancak hatayı bulsanız bile, zaten üretilen tüm bu cipsler için çok fazla kullanılmaz. Ben sadece "burada" değil "bug kaldırma" gibi "hata ayıklama" demekti.
Agent_L

5

Evet, FPGA bazı zorlu görevlerde modern CPU'dan (Intel i7 gibi) daha iyi performans gösterebilir, ancak sinir ağı performansını iyileştirmek için daha kolay ve daha ucuz yöntemler vardır.

Daha ucuz olarak - FPGA IC maliyeti değil, aynı zamanda FPGA (sinir ağı için ihtiyacınız olacak) ve tüm geliştirme süreci için çok hızlı bir bellek demek istiyorum.

  1. SSE kullanın - 2-3 kat daha iyi performans ile oldukça basit bir sinir ağı uygulamaları gördüm. Dizüstü bilgisayarınızda özel bir GPU yoksa bu iyi bir fikir olabilir.

    Vincent Vanhoucke ve Andrew Senior tarafından CPU'larda sinir ağlarının hızının artırılması

  2. GPGPU kullanın (Grafik işlem birimlerinde genel amaçlı bilgi işlem) - Sanırım GeForce 730M gibi orta sınıf dizüstü bilgisayar GPU'larında 100-200x performans artışı elde edebilirsiniz.

    İşte sinir ağı uygulaması (ve serbest kod). Nvidia CUDA kullanır.

    GPGPU yaklaşımı çok ölçeklenebilir, eğer bir noktada daha fazla bilgi işlem gücüne ihtiyacınız olduğunu fark ederseniz - daha güçlü GPU'lu masaüstü bilgisayarı veya hatta 4992 çekirdekli Nvidia Tesla K80'i kullanabilirsiniz (bu pahalı).


1
Buradaki sorun performansı tanımlamaktır. Evet'ten daha hızlı demek istiyorsak, fpga normal cpus'tan daha hızlı olabilir. Ancak, fpga CPU kadar esnek değil, sadece önceden tanımlanmış bir görevi etkili bir şekilde yürütmek için tasarlandı. Başka bir görevi
yürütmek,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.