Saya mencoba memparalelkan perhitungan FFT pada file sinyal berukuran terabyte. Saat ini FFT seperti menggunakan perpustakaan open-source membutuhkan waktu berjam-jam, bahkan berjalan melalui CUDA pada GPU tercepat yang saya miliki. Kerangka kerja saya mencoba untuk beradaptasi dengan proses ini adalah Hadoop. Dalam istilah yang sangat mendasar, Hadoop mendistribusikan masalah pada sejumlah node server dengan cara berikut:
• Anda membagi file input Anda menjadi pasangan (kunci, nilai).
• Pasangan ini dimasukkan ke dalam algoritma "Peta", yang mengubah pasangan (kunci, nilai) Anda menjadi pasangan (kunci, nilai) lainnya berdasarkan apa yang Anda masukkan ke dalam Peta.
• Kerangka kerja kemudian mengumpulkan semua output (kunci, nilai) dari Peta dan mengurutkannya berdasarkan kunci, serta mengumpulkan nilai dengan kunci yang sama untuk satu pasangan, sehingga Anda berakhir dengan (kunci, daftar (nilai1, nilai2, ..)) pasangan
• Pasangan ini kemudian dimasukkan ke dalam algoritma "Reduce", yang pada gilirannya menghasilkan lebih banyak (kunci, nilai) pasangan sebagai hasil akhir Anda (ditulis ke file).
Ada banyak aplikasi untuk model ini dalam hal-hal praktis seperti pemrosesan log server, tetapi saya mengalami kesulitan menerapkan kerangka kerja untuk memotong FFT menjadi tugas-tugas "peta" dan "mengurangi", terutama karena saya tidak terlalu mengenal DSP.
Saya tidak akan mengganggu Anda dengan pemrograman omong kosong, karena ini adalah Tanya Jawab DSP. Namun, saya bingung tentang algoritma apa yang ada untuk menghitung FFT secara paralel; Tugas-tugas Map dan Reduce tidak dapat (secara teknis) berbicara satu sama lain, sehingga FFT harus dipecah menjadi masalah-masalah independen yang hasilnya dapat digabungkan kembali pada akhirnya.
Saya telah memprogram implementasi sederhana dari Cooley-Tukey Radix 2 DIT yang bekerja pada contoh-contoh kecil, tetapi menggunakannya untuk menghitung DFT indeks ganjil / genap secara berulang untuk satu miliar byte tidak akan berfungsi. Saya telah menghabiskan beberapa minggu untuk membaca banyak makalah, termasuk satu di algoritma FFT MapReduce (ditulis oleh Tsz-Wo Sze sebagai bagian dari makalahnya tentang perkalian SSA, saya tidak dapat menghubungkan lebih dari 2 hyperlink) dan "FFT empat langkah" (di sini dan di sini), yang tampak mirip satu sama lain dan dengan apa yang saya coba capai. Namun, saya sangat buruk dalam matematika, dan menerapkan salah satu dari metode-metode itu dengan tangan ke perangkat sederhana seperti {1,2, 3, 4, 5, 6, 7, 8} (dengan semua komponen imajiner menjadi 0) memberikan saya hasil yang sangat salah. Adakah yang bisa menjelaskan algoritma FFT paralel yang efisien kepada saya dalam bahasa Inggris biasa (yang saya tautkan atau lainnya) sehingga saya dapat mencoba dan memprogramnya?
Sunting: Jim Clay dan siapa pun yang mungkin bingung dengan penjelasan saya, saya mencoba melakukan FFT tunggal dari file terabyte. Tetapi saya ingin dapat melakukannya bersamaan pada beberapa server untuk mempercepat proses.