[英]What is the fastest way to perform FFT on a large file?
我正在開發一個 C++ 項目,該項目需要對大型 2D 柵格數據(10 到 100 GB)執行 FFT。 特別是,當對每一列應用 FFT 時,其元素在內存中不連續(以數據寬度的步幅放置)時,性能非常糟糕。
目前,我正在這樣做。 由於數據不適合內存,我將幾列(即n
列)讀入內存,並將其方向轉置(以便文件中的一列成為內存中的一行)並使用外部庫(MKL)應用 FFT )。 我讀取 ( fread
) n
像素,移到下一行( fseek
與width - n
一樣多),讀取n
像素,跳到下一行,依此類推。 當對列塊進行操作 (FFT) 后,我以相同的方式將其寫回文件。 我寫n
像素,跳到下一行,依此類推。 這種讀寫文件的方式太費時間了,所以想找點boost的方法。
我事先考慮過對整個文件進行轉置,但整個過程包括行優先和列優先的 FFT 操作,轉置不會受益。
我想聽聽有關對大數據進行此類列主要操作的任何經驗或想法。 任何特別與 FFT 或 MKL 相關的建議也會有所幫助。
為什么不同時處理轉置和非轉置數據? 這將增加內存需求 x2,但這可能是值得的。
考慮切換到 Hadamard 變換。 作為一個完整的 IPS,變換不提供乘法,因為變換中的所有系數都是正負一。 如果您需要以傅立葉為基礎的合成變換,矩陣乘法將改變基數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.