Terabayt büyüklüğündeki sinyal dosyaları üzerinde bir FFT hesaplamasını paralelleştirmeye çalışıyorum. Şu anda açık kaynak kodlu bir kitaplık kullanan böyle bir FFT, CUDA üzerinden bile sahip olduğum en hızlı GPU'da bile saatler sürüyor. Bu sürece uyum sağlamaya çalıştığım çerçeve Hadoop. Çok temel bir ifadeyle, Hadoop bir sorunu herhangi bir sayıdaki sunucu düğümü üzerinde aşağıdaki şekilde dağıtır:
• Giriş dosyanızı (anahtar, değer) çiftlerine böldünüz.
• Bu çiftler, (anahtar, değer) çiftlerinizi Haritanın içine koyduğunuza göre diğer (anahtar, değer) çiftlerine dönüştüren bir “Harita” algoritmasına beslenir.
• Daha sonra çerçeve, Haritalar'daki tüm (anahtar, değer) çıktılarını toplar ve bunları anahtarla sıralar ve aynı anahtarla değerleri tek bir çiftte toplar, böylece (anahtar, liste (değer1, değer2, ..)) çiftleri
• Bu çiftler daha sonra bir sonuç olarak (bir dosyaya yazılır) daha fazla (anahtar, değer) çifti çıktısı veren bir "Azalt" algoritmasına beslenir.
Sunucu günlüklerini işlemek gibi pratik şeylerde bu model için birçok uygulama var, ancak özellikle DSP'ye gerçekten aşina olmadığımdan, bir FFT'yi “harita” ve “azaltmak” için parçalamak için çerçeve uygulamakta zorlanıyorum.
Programlama mumbo jumbo ile sizi rahatsız etmeyeceğim, çünkü bu bir DSP Q&A. Bununla birlikte, FFT'leri paralel olarak hesaplamak için hangi algoritmaların mevcut olduğu konusunda kafam karıştı; Harita ve Küçült görevleri birbiriyle (teknik olarak) konuşamaz, bu nedenle FFT sonuçların bir şekilde yeniden birleştirilebileceği bağımsız sorunlara bölünmelidir.
Cooley-Tukey Radix 2 DIT'in küçük örnekler üzerinde çalışan basit bir uygulamasını programladım, ancak bir milyar bayt için tek / çift dizin DFT'lerini tekrar tekrar hesaplamak için kullanmayın. Bir MapReduce FFT algoritması (Tsz-Wo Sze tarafından SSA çarpımı hakkındaki yazısının bir parçası olarak yazılmıştır, 2'den fazla köprü bağlayamıyorum) ve “dört adımlı FFT” de dahil olmak üzere birçok makale okumak için birkaç hafta geçirdim. ( burada ve burada), birbirimize ve yapmaya çalıştığım şeye benziyor. Bununla birlikte, matematikte umutsuzca kötüyüm ve bu yöntemlerden herhangi birini elle (1,2, 3, 4, 5, 6, 7, 8} (tüm hayali bileşenler 0 olan) verir. beni çılgınca yanlış sonuçlar. Herkes bana verimli bir paralel FFT algoritması açık İngilizce (ben bağladım ya da başka bir) açıklayabilir böylece denemek ve programlamak için?
Edit: Jim Clay ve benim açıklama ile şaşkın olabilir herkes, terabayt dosya tek bir FFT yapmaya çalışıyorum. Ancak süreci hızlandırmak için aynı anda birden fazla sunucuda yapmak istiyorum.