FPGA ürün yazılımı tasarımı: Ne kadar büyük?


13

Matlab'dan VHDL'ye taşınması gereken özellikle büyük bir sinyal işleme dönüşümüne sahibim. Kesinlikle bir çeşit kaynak paylaşımı gerektirir. Biraz hesaplama bana şunları verdi:

  • 64 noktadan 512 fft
  • 41210 çarpma-ekleme işlemleri

Virtex 6 FPGA'nın ~ 2000 DSP48E bloğuna sahip olduğu düşünüldüğünde, kaynakları birden çok kez tekrar kullanmak için kaynak paylaşımını yapabileceğimi biliyorum. Yürütme süresi gerçekten sorun değil, işlem süresi FPGA açısından nispeten uzun sürebilir.

Kaynak kullanımına baktığımda, radix-2 lite mimarisini kullanmak bana 4dsp blok / FFT işlemi = 2048 DSP blok, toplamda ~ 43k. en büyük Virtex FPGA 2k blok veya 20 işlem / mux'e sahiptir.

Açıkçası, bu kadar büyük mumu kumaşa dahil etmek de dilim alacaktır. Bu sınırın üst ucunu nerede bulabilirim? FPGA kaynaklarını sonsuza kadar paylaşamıyorum. 41210 çarpanları çok mu büyük? Çok büyük olanı nasıl hesaplayabilirim?

Ayrıca diğer kaynaklara da baktım (Slices, Brams, vs.). Radix-2 Lite ayrıca 4 x 18k bram / fft = 2048 bram verir ve en büyük Xilinx FPGA 2128 Brams içerir. çok sınırda. Tasarımımın çok büyük olduğundan endişeliyim.


GÜNCELLEME:

Tasarımın kendisi hakkında biraz daha bilgi. Detaylara giremiyorum, ama verebileceğim şey:

Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host 

                 ^------re-calculate initial conditions----|

output datarate spec: "matlab simülasyonundan daha hızlı"

akıllıca hesaplamalar, ben buradayım:

FFT aşaması: kolay. 1/2/4/8 FFT uygulayabilir, sonuçları SDRAM'da saklayabilir ve daha sonra erişebilirim. Nispeten küçük, uzun sürse bile, sorun değil. radix-2 lite kullanarak 2 DSP48E ve 2 18k BRAMS / FFT alabilirim. akış 6 DSP48E 0BRAMS / FFT verir. her iki durumda da, FPGA kaynak açısından 64 punto FFT küçüktür.

Çarpanlar : bu benim sorunum. Çarpma girdileri, arama tablolarından veya FFT verilerinden alınır. Gerçekten sadece bir sürü çarpma eklentisi. Optimize edilecek çok şey yok. Filtre değil, filtreye benzer özelliklere sahiptir.

FPGA'da kaynak paylaşımı göz önüne alındığında, matematik şu şekilde çalışır: Bir LUT-6, 4 yollu bir mux olarak kullanılabilir. N-yollu, M bit mux'in formülü aşağıdaki gibidir:

N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).

benim uygulama için sayıları crunching iyi sonuç vermez. Virtix-6 ailesinin% 90'ı, 40 bin işlem yapmak için DSP'lerini kaynak paylaşmak için yeterli dilime sahip değildir.


Kaynak paylaşımının en etkili biçimleri, belleğe hitap ederek verilere erişebileceğiniz kısmi serileştirmedir. Tabii ki, bunun uç noktasında geleneksel bir depolanmış program işlemcisine geri dönüyorsunuz - zor performans gereksinimlerinin eksikliği, belki de bir hesaplama bulutunda çalışan bir yazılım uygulamasının esnekliğine işaret etmeye başlar.
Chris Stratton

1
Bu, sorunuzun bir parçası değil, ancak kaynak hesaplamanızda hangi boyutta işlenen olduğunu belirtmediniz. 512 FFT x 64 puan x kaç bit? Bir FPGA'da işlenen boyutu tamamen size bağlıdır, bu nedenle probleminizin boyutunu çalışırken düşünmeniz gerekir.
Photon

Fark ettiniz mi bilmiyorum, ama bu büyük FPGA'lar oldukça pahalı. Bazıları 5 bin doların üzerinde olabilir. Belki de bir sorun olmadığı sürece bunu da düşünmelisiniz.
Gustavo Litovsky

1
Ne yazık ki, şimdiye kadar cevaplarda aldığınız alternatif çözüm önerilerinin ötesinde, sizin için çok daha fazlasını yapabilirsek şüpheliyim. Yani, sadece bir FFT çekirdeği yapabilir ve 512 girişinizi birbiri ardına çalıştırabilirsiniz ve bu oldukça küçük bir FPGA'ya bile sığar. Bunun arasında ve her şeyi paralel olarak yapmak, uygulamanız için kaynaklara karşı doğru hız dengesidir ... ancak sizden başka herkes için bu dengenin nerede olması gerektiğini söylemek zor.
Photon

1
Bunun için bir bütçe numaranız var mı? Gustavo'nın belirttiği gibi, üst düzey FPGA'lar pahalı ve onları oturtmak için bir PCB geliştiriyorlar. İşlemsel donanım miktarını iki katına çıkarmak (veya dört katına çıkarmak veya ...) ve mevcut, kanıtlanmış (?) Matlab kodunu kullanmaya devam etmek muhtemelen verilen hız hızını karşılayabilir.
Foton

Yanıtlar:


8

Soruna bakmanın başka bir yolu var mı acaba?

512 FFT işlemi (her biri 64 nokta) ve 42k MAC işlemi tahminlerinizi çalmak ... Sanırım algoritmadan bir geçiş için ihtiyacınız olan şey bu mu?

Şimdi 4 DSP birimi kullanan bir FFT çekirdeği buldunuz ... ancak FFT başına kaç saat döngüsü gerekiyor? (gecikme değil, verim)? Her nokta için 64 veya 1 döngü diyelim. Daha sonra bu 42k Mac işlemlerini 64 döngüde - her döngüde 1k MAC, her MAC işleminde 42 işlemle tamamlamanız gerekir.

Şimdi algoritmanın geri kalanına daha ayrıntılı bir şekilde bakmanın zamanı geldi: MAC'leri değil, tekrar kullanılabilecek daha yüksek düzeydeki işlemleri (filtreleme, korelasyon, ne olursa olsun) tanımlayın. Bu işlemlerin her biri için yeniden kullanılabilirlikli çekirdekler oluşturun (örneğin, farklı seçilebilir katsayı kümelerine sahip filtreler) ve yakında nispeten büyük çekirdekler arasında nispeten az çoklayıcı gerekli olduğunu görebilirsiniz ...

Ayrıca, herhangi bir güç azalması mümkün müdür? Kuadratik (ve daha yüksek) oluşturmak için döngülerdeki çarpmaların gerekli olduğu bazı vakalarım vardı. Onları açarken, tekrarlayarak çarpma olmadan üretebilirim: FPGA'da bir Fark Motoru oluşturduğum gün kendimden çok memnun kaldım!

Uygulamayı bilmeden daha fazla ayrıntı veremem, ancak böyle bir analizin bazı büyük basitleştirmeleri mümkün kılması muhtemeldir.

Aklınızdaki kesin bir platform yok sanki sesler beri - - Ayrıca ... Birden FPGA üzerinde bölme bakmak eğer düşünün Bu panoda veya bu bir elverişli bir platformda birden FPGA sunuyoruz. Ayrıca 100 Spartan-3 cihazlı bir tahta var ...

(ps Yazılımcılar bu diğer soruyu kapattığında hayal kırıklığına uğradım - en azından orada uygun olduğunu düşünüyorum)

Düzenleme: Düzenleme yeniden - Ben oraya başlamak için düşünüyorum. Tüm çarpan girişleri ya FFT çıkışları ya da "filtre değil" katsayılarıysa, kullanmanız gereken düzenlilik türünü görmeye başlıyorsunuz demektir. Her çarpanın bir girişi bir FFT çıkışına, diğeri bir katsayı ROM'una (sabit dizi olarak uygulanan BlockRam) bağlanır.

Farklı FFT işlemlerini aynı FFT birimi aracılığıyla sıralama, FFT çıkışlarını bu çarpandan otomatik olarak sıralar. Doğru katsayıları diğer MPY girdilerine dizmek artık doğru ROM adreslerinin doğru zamanda organize edilmesi meselesidir: MUX'ların büyük baş ağrısından ziyade organizasyonel bir problem.

Performans konusunda: Bence Dave Tweed gereksiz yere kötümserdi - FFT n * log (n) operasyonlarını alıyor, ancak O (n) kelebek birimleri ve O (logN) döngüleri veya O (logN) birimleri ve O ( n) döngüler veya kaynak ve hız hedeflerinize uygun başka bir kombinasyon. Böyle bir kombinasyon, FFT sonrası çarpma yapısını diğerlerinden daha basit hale getirebilir ...


Tek bir donanım kelebeği ile uygulanan bir FFT, NlogN saat döngülerinin tamamlanmasını gerektirecektir; 512 puan için bu 256 * 8 kelebek veya 2048 saat olacaktır. Bu, 41210 (veya 32768?) MAC'lerin aynı zamanda yapılması için yalnızca 8-10 donanım çarpanı gerektireceği anlamına gelir.
Dave Tweed

Yani, 16-20 çarpan.
Dave Tweed

Maalesef, bunu geriye doğru aldığımı fark ettim. Bireysel FFT'ler 64 puandır, bu nedenle tek kelebek uygulaması 32 * 5 = 160 saat gerektirir. MAC'ler daha sonra 200-250 donanım çarpanları ile yapılabilir.
Dave Tweed

bu beni yoruyor. Xilinx, 400k çarpma-ekleme işlemleri (NlogN) gerektiren 16k / 32k fftlar yapabilen bir çekirdek tasarlayabilir ve yine de 41k ile mücadele ediyorum? Bir yolu olmalı!
stanri

@Dave: İnanıyorum ki 160 döngü değil, 160 çarpma demek istediniz? Bir FFT'de bu kadar doğal olarak serileştirilmiş bir şey yok ...
Brian Drummond

2

Bu sorun gerçek zamanlı kısıtlamalara sahip değilse ve öyle görünmüyorsa - sadece "daha hızlı" çalışmasını istiyorsanız, bir veya daha fazla GPU'da hızlanmaya oldukça uygun görünebilir. Bunu nispeten basit bir teklif yapan birkaç yazılım kütüphanesi vardır ve bu, doğrudan özel FPGA donanımına gitmekten daha kolay bir büyüklük sırası ile ilgili olacaktır.

Sadece Google "GPU özellikli kitaplık" veya "GPU hızlandırılmış kitaplık" için.


İlginç bir şekilde, bu projeyi duyduğumda istemciye GPU'lardan bahsettim ve ilgilenmedi.
stanri

@StaceyAnneRieck: Neden olduğunu söyledi mi?
Dave Tweed

Gerçekten nedenini söylemedi, sadece bir FPGA kullanmadan önce ona baktığı daha az iş gibi görünüyordu. Tekrar gündeme getirmem gerekecek.
stanri

@stanri: Nihayetinde bir FPGA uygulamasıyla sonuçlansanız bile, bana göre GPU genel sistem mimarisini "breadboard" için iyi bir yol olabilir. Algoritma için bir çeşit üst düzey veri akışı grafiğiniz var mı (ve paylaşabiliyor musunuz?) Ve bize dahil olan veri miktarı hakkında bir fikir verebilir misiniz? Bu gibi soruların cevapları olmadan, size çok genel önerilerden başka bir şey vermek gerçekten zor olacaktır.
Dave Tweed

Aslında çok çok basit bir algoritma, sadece onu karmaşık hale getiren ölçek. Temel olarak şu şekildedir: başlangıç ​​koşulları -> 512 fft paralel -> 32768 FFT çıkışında çarpma işlemleri -> başlangıç ​​koşullarını ayarlama -> durulama ve tekrarlama
stanri

1

Belirli matematik işlemlerini büyük ölçüde hızlandırmak için özel bir donanım veya bir FPGA (hatta bir CPLD) kullanmak mümkündür. Matematik işlemlerini hızlandırmak için donanım (devre veya FPGA mantığı) tasarlamaya çalışırken akılda tutulması gereken en önemli şey, hangi sipariş verilerinin cihazınıza girip çıkması gerektiğini anlamaktır. Verimli bir G / Ç düzenine sahip bir cihaz, ikinci cihaz çok daha fazla devre gerektirse bile, verimsiz bir düzene sahip olandan çok daha iyi performans sunabilir.

Bir FFT için donanım destekli bir tasarım üzerinde çalışmayı denemedim, ancak baktığım büyük çarpma işlemleri için donanım yardımı (RSA şifrelemesi için kullanılabileceği gibi). Birçok mikro denetleyici, özel hızlı çoğalma donanımı olanlar bile, bu tür işlemlerde çok verimli değildir, çünkü çok fazla kayıt karıştırması gerektirirler. Kayıt değişimini en aza indirgemek için tasarlanmış donanım, donanımın kendisi kadar sofistike olmasa bile, çok hassas çarpma işlemleriyle çok daha iyi performans elde edebilir. Örneğin, bir kerede iki bit boru hattı 16xN çarpma gerçekleştirebilen donanım (iki alt bit multiplcand içinde kaydırma ve iki üst bit biti kaydırma), bir döngüde 8x8 çarpma gerçekleştirebilen donanıma göre daha iyi performans elde edebilir, birincisi daha az devre alabilir (ve boru hattı sayesinde daha kısa kritik veri yoluna sahip olabilir). Anahtar, gerekli kodun "iç döngüsü" nün nasıl görüneceğini anlamak ve kolayca ortadan kaldırılabilecek herhangi bir verimsizlik olup olmadığını anlamaktır.


Bu tür optimizasyon için ne tür operasyonlar özellikle uygundur? Çarpma işleminin doğası hakkında biraz daha ayrıntılı bilgi vermek için yukarıdaki soruyu düzenledim. Donanım destekli tasarım gerçekten ilginç geliyor!
stanri

0

Ne kadar az bir sorun yürütmemiz?

Bu gerçekten bir yumuşak MCU, entegre bir sabit MCU ile bir FPGA veya hatta ayrı bir MCU cihazı uygulamanız ve tüm işlemlerinizi seri hale getirmeniz gereken bir durum gibi görünüyor.

Yürütme süresine sahip olduğunuzu varsayarsak, FFT'lerinizi yazılımda yapmak hem hata ayıklamak çok daha kolay hem de tasarımı da çok daha kolay olacaktır.


1
Bir FPGA üzerinde yumuşak çekirdekli CPU'da yoğun hesaplama yapmak saçmadır; Eğer hesaplanmış bir program mimarisinde (dikkate alınması gereken bir şey) yapacaksanız, karşılaştırılabilir-fab- nesil sabit mantık.
Chris Stratton

@ChrisStratton - İyi bir nokta. Bu etkiye ek bir not eklendi.
Connor Wolf

1
Yerleşik sabit CPU'lar bile geleneksel işlemcileri / GPU'ları yazılım tabanlı görevler için bir mum tutmayacak ve çok daha pahalıya mal olacak.
Chris Stratton

@ChrisStratton - En yaygın entegre sabit CPU mimarilerinin ARM veya POWER olduğunu düşündüm? Bu durumda, bu temelde olan bir mal işlemci.
Connor Wolf

1
Diğer FPGA sorunuza göre, FPGA kartını oluşturmak muhtemelen tahmin edilenden biraz daha pahalıya mal olacak bir öğrenme deneyimi olacaktır. Bu noktada yapılacak şey, müşteriye deneme işlem bulut çalışmalarından (sonunda donanım satın alınabilir) bazı sabit fiyat / performans sayıları vermek, daha yüksek fiyat ve FPGA çabasının çok daha yüksek riski hakkında bir fikir vermek olacağını düşünüyorum. .
Chris Stratton
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.