Tôi đang cố gắng song song hóa tính toán của một FFT trên các tệp tín hiệu có kích thước terabyte. Ngay bây giờ một FFT như vậy sử dụng thư viện nguồn mở mất nhiều giờ, thậm chí chạy qua CUDA trên GPU nhanh nhất tôi có. Khuôn khổ mà tôi đang cố gắng thích nghi với quy trình này là Hadoop. Theo các thuật ngữ rất cơ bản, Hadoop phân phối một vấn đề đối với bất kỳ số lượng nút máy chủ nào theo cách sau:
• Bạn chia tệp đầu vào thành các cặp (khóa, giá trị).
• Các cặp này được đưa vào thuật toán Bản đồ của Nhật Bản, biến đổi các cặp (khóa, giá trị) của bạn thành một số cặp (khóa, giá trị) khác dựa trên những gì bạn đặt trong Bản đồ.
• Khung sau đó thu thập tất cả các đầu ra (khóa, giá trị) từ Bản đồ và sắp xếp chúng theo khóa, cũng như tổng hợp các giá trị với cùng một khóa cho một cặp, do đó, bạn kết thúc bằng (khóa, danh sách (value1, value2, ..)) các cặp
• Các cặp này sau đó được đưa vào thuật toán Giảm Giảm, lần lượt đưa ra nhiều cặp (khóa, giá trị) như kết quả cuối cùng của bạn (được ghi vào một tệp).
Có nhiều ứng dụng cho mô hình này trong các công cụ thực tế như xử lý nhật ký máy chủ, nhưng tôi gặp khó khăn khi áp dụng khung để cắt một FFT vào các bản đồ và các nhiệm vụ giảm bớt, đặc biệt là vì tôi không thực sự quen thuộc với DSP.
Tôi sẽ không làm phiền bạn với mumbo jumbo lập trình, vì đây là Q & A DSP. Tuy nhiên, tôi bối rối về những thuật toán tồn tại để tính toán các FFT song song; Ánh xạ và Giảm các nhiệm vụ không thể (về mặt kỹ thuật) nói chuyện với nhau, do đó FFT phải được chia thành các vấn đề độc lập mà từ đó kết quả có thể được kết hợp lại bằng cách nào đó vào cuối.
Tôi đã lập trình một triển khai đơn giản cho Cooley-Tukey Radix 2 DIT hoạt động trên các ví dụ nhỏ, nhưng sử dụng nó để tính toán đệ quy các DFT lẻ / chẵn cho một tỷ byte sẽ không hoạt động. Tôi đã dành vài tuần để đọc nhiều bài báo, bao gồm một bài viết về thuật toán FFT MapReduce (được viết bởi Tsz-Wo Sze như một phần của bài viết về phép nhân SSA, tôi không thể liên kết nhiều hơn 2 siêu liên kết) và FFT bốn bước ( ở đây và ở đây), có vẻ giống nhau và với những gì tôi đang cố gắng thực hiện. Tuy nhiên, tôi vô cùng kém về toán học và áp dụng bất kỳ phương pháp nào trong số đó cho một tập hợp đơn giản như {1,2, 3, 4, 5, 6, 7, 8} (với tất cả các thành phần tưởng tượng là 0) mang lại Tôi cực kỳ không chính xác kết quả. Bất cứ ai cũng có thể giải thích một thuật toán FFT song song hiệu quả cho tôi bằng tiếng Anh đơn giản (một thuật toán mà tôi đã liên kết hoặc bất kỳ thuật toán nào khác) để tôi có thể thử và lập trình nó?
Chỉnh sửa: Jim Clay và bất kỳ ai khác có thể bị nhầm lẫn bởi lời giải thích của tôi, tôi đang cố gắng thực hiện một FFT duy nhất của tệp terabyte. Nhưng tôi muốn có thể làm điều đó đồng thời trên nhiều máy chủ để tăng tốc quá trình.