簡體   English   中英

對大文件執行 FFT 的最快方法是什么?

[英]What is the fastest way to perform FFT on a large file?

我正在開發一個 C++ 項目,該項目需要對大型 2D 柵格數據(10 到 100 GB)執行 FFT。 特別是,當對每一列應用 FFT 時,其元素在內存中不連續(以數據寬度的步幅放置)時,性能非常糟糕。

目前,我正在這樣做。 由於數據不適合內存,我將幾列(即n列)讀入內存,並將其方向轉置(以便文件中的一列成為內存中的一行)並使用外部庫(MKL)應用 FFT )。 我讀取 ( fread ) n像素,移到下一行( fseekwidth - n一樣多),讀取n像素,跳到下一行,依此類推。 當對列塊進行操作 (FFT) 后,我以相同的方式將其寫回文件。 我寫n像素,跳到下一行,依此類推。 這種讀寫文件的方式太費時間了,所以想找點boost的方法。

我事先考慮過對整個文件進行轉置,但整個過程包括行優先和列優先的 FFT 操作,轉置不會受益。

我想聽聽有關對大數據進行此類列主要操作的任何經驗或想法。 任何特別與 FFT 或 MKL 相關的建議也會有所幫助。

為什么不同時處理轉置和非轉置數據? 這將增加內存需求 x2,但這可能是值得的。

考慮切換到 Hadamard 變換。 作為一個完整的 IPS,變換不提供乘法,因為變換中的所有系數都是正負一。 如果您需要以傅立葉為基礎的合成變換,矩陣乘法將改變基數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM