ฉันพยายามทำให้การคำนวณ FFT เป็นคู่ขนานกับไฟล์สัญญาณขนาดเทราไบต์ ตอนนี้ FFT ที่ใช้ไลบรารีโอเพ่นซอร์สนั้นใช้เวลาหลายชั่วโมงแม้แต่วิ่งผ่าน CUDA บน GPU ที่เร็วที่สุดที่ฉันมี กรอบที่ฉันพยายามปรับให้เข้ากับกระบวนการนี้คือ Hadoop ในแง่พื้นฐานมาก Hadoop กระจายปัญหาบนโหนดเซิร์ฟเวอร์จำนวนเท่าใดก็ได้ในลักษณะดังต่อไปนี้:
•คุณแบ่งไฟล์อินพุตของคุณเป็นคู่ (คีย์, ค่า)
•คู่เหล่านี้จะถูกป้อนเข้าสู่อัลกอริทึม“ แผนที่” ซึ่งจะแปลงคู่ (คีย์, ค่า) ของคุณให้เป็นคู่อื่น ๆ (คีย์, ค่า) ตามสิ่งที่คุณใส่ไว้ในแผนที่
•จากนั้นเฟรมเวิร์กจะรวบรวมเอาท์พุต (คีย์, ค่า) ทั้งหมดจากแผนที่และเรียงลำดับตามคีย์รวมถึงการรวมค่าด้วยคีย์เดียวกันให้กับคู่เดียวดังนั้นคุณจึงจบลงด้วย (คีย์รายการ (ค่า 1, ค่า 2, .. )) คู่
• คู่เหล่านี้จะถูกป้อนเข้าสู่อัลกอริธึม "ลด" ซึ่งจะส่งผลให้คู่ (คีย์, ค่า) คู่เป็นผลลัพธ์สุดท้ายของคุณ (เขียนลงไฟล์)
มีแอพพลิเคชั่นมากมายสำหรับโมเดลนี้ในทางปฏิบัติเช่นการประมวลผลบันทึกเซิร์ฟเวอร์ แต่ฉันมีเวลายากที่จะใช้เฟรมเวิร์กเพื่อตัดค่า FFT ให้เป็น "แผนที่" และ "ลด" งานโดยเฉพาะอย่างยิ่งเนื่องจากฉันไม่คุ้นเคยกับ DSP จริงๆ
ฉันจะไม่รบกวนคุณในการเขียนโปรแกรมจัมโบ้จัมโบ้เพราะนี่คือ DSP Q&A อย่างไรก็ตามฉันสับสนในอัลกอริธึมที่มีอยู่สำหรับการคำนวณ FFTs แบบขนาน จัดทำแผนที่และลดภาระงาน (ทางเทคนิค) ไม่สามารถพูดคุยกันได้ดังนั้น FFT จะต้องแบ่งออกเป็นปัญหาอิสระซึ่งผลลัพธ์จะสามารถรวมกันอีกครั้งในตอนท้าย
ฉันได้ตั้งโปรแกรมการใช้งานง่าย ๆ ของ Cooley-Tukey Radix 2 DIT ที่ใช้กับตัวอย่างเล็ก ๆ แต่ใช้สำหรับการคำนวณดัชนี DFTs แบบคี่ / คู่แบบซ้ำ ๆ สำหรับพันล้านไบต์จะไม่ทำงาน ฉันใช้เวลาสองสามสัปดาห์ในการอ่านเอกสารจำนวนมากรวมถึงหนึ่งในอัลกอริทึม MapReduce FFT (เขียนโดย Tsz-Wo Sze เป็นส่วนหนึ่งของบทความของเขาเกี่ยวกับการคูณ SSA ฉันไม่สามารถเชื่อมโยงไฮเปอร์ลิงก์มากกว่า 2 รายการ) และ "สี่ขั้นตอน FFT" ( ที่นี่และที่นี่) ซึ่งดูเหมือนกันและเป็นสิ่งที่ฉันพยายามทำให้สำเร็จ อย่างไรก็ตามฉันใช้คณิตศาสตร์อย่างสิ้นหวังและใช้วิธีการเหล่านั้นกับชุดง่ายๆของ {1,2, 3, 4, 5, 6, 7, 8} (ด้วยจินตภาพทั้งหมดเป็น 0) ฉันผลลัพธ์ที่ไม่ถูกต้องอย่างดุเดือด ทุกคนสามารถอธิบายอัลกอริทึม FFT ขนานที่มีประสิทธิภาพให้ฉันเป็นภาษาอังกฤษธรรมดา (ที่ฉันเชื่อมโยงหรืออื่น ๆ ) เพื่อที่ฉันจะได้ลองและตั้งโปรแกรมได้หรือไม่?
แก้ไข: Jim Clay และใครก็ตามที่อาจสับสนกับคำอธิบายของฉันฉันพยายามทำไฟล์ FFT เดียวของเทราไบต์ แต่ฉันต้องการที่จะทำมันพร้อมกันในเซิร์ฟเวอร์หลายเครื่องเพื่อเพิ่มความเร็วในกระบวนการ