테라 바이트 크기의 신호 파일에서 FFT 계산을 병렬화하려고합니다. 현재 오픈 소스 라이브러리를 사용하는 FFT는 가장 빠른 GPU에서 CUDA를 통해 실행하는 데에도 많은 시간이 걸립니다. 이 프로세스에 적용하려는 프레임 워크는 Hadoop입니다. 기본적으로 Hadoop은 다음과 같은 방식으로 여러 서버 노드에 문제를 분배합니다.
• 입력 파일을 (키, 값) 쌍으로 분할합니다.
•이 쌍은“Map”알고리즘으로 제공되며,이 알고리즘은 맵에 넣은 내용에 따라 (키, 값) 쌍을 다른 (키, 값) 쌍으로 변환합니다.
• 그런 다음 프레임 워크는지도에서 모든 (키, 값) 출력을 수집하고 동일한 키를 사용하여 값을 단일 쌍으로 집계 할뿐만 아니라 키별로 정렬하여 (key, list (value1, value2, ..)) 쌍
•이 쌍은 "감소"알고리즘에 입력되어 최종 결과 (파일에 기록됨)로 더 많은 (키, 값) 쌍을 출력합니다.
서버 로그 처리와 같은 실제 작업에는이 모델에 대한 많은 응용 프로그램이 있지만, 특히 DSP에 익숙하지 않기 때문에 FFT를 "맵"및 "감소"작업으로 자르기 위해 프레임 워크를 적용하는 데 어려움을 겪고 있습니다.
이것이 DSP Q & A이기 때문에 프로그래밍 점보 점보를 신경 쓰지 않을 것입니다. 그러나 FFT를 병렬로 계산하기 위해 어떤 알고리즘이 존재하는지 혼란스러워합니다. 매핑 및 축소 작업은 (기술적으로) 서로 대화 할 수 없으므로 FFT는 독립적 인 문제로 분리되어 결과가 결국에는 다시 결합 될 수 있습니다.
작은 예제에서 작동하는 Cooley-Tukey Radix 2 DIT의 간단한 구현을 프로그래밍했지만 10 억 바이트의 홀수 / 짝수 인덱스 DFT를 재귀 적으로 계산하는 데는 사용할 수 없습니다. MapReduce FFT 알고리즘 (SSA 곱셈에 대한 논문의 일부로 Tsz-Wo Sze가 작성, 2 개 이상의 하이퍼 링크를 연결할 수 없음) 및 "4 단계 FFT"를 포함하여 많은 논문을 읽는 데 몇 주를 보냈습니다. ( 여기 와 여기), 서로 비슷하고 달성하려는 것과 비슷합니다. 그러나 나는 수학적으로 절망적으로 나쁘고 {1,2, 3, 4, 5, 6, 7, 8} (모든 가상의 구성 요소가 0 인)과 같은 간단한 집합에 이러한 방법 중 하나를 직접 적용하면 다음과 같습니다. 나에게 매우 잘못된 결과. 누구든지 효율적인 병렬 FFT 알고리즘을 평범한 영어 (내가 링크 한 것 또는 다른 것)로 설명하여 프로그래밍하고 시도 할 수 있습니까?
편집 : Jim Clay와 내 설명에 혼란 스러울 수있는 사람은 테라 바이트 파일의 단일 FFT를 수행하려고합니다. 그러나 프로세스 속도를 높이기 위해 여러 서버에서 동시에 수행 할 수 있기를 원합니다.