對於大學講座,我正在尋找具有已知漸近運行時的浮點算法,但是可能會進行低級(微)優化。這意味着優化,如最大限度地減少高速緩存未命中和寄存溢出,最大化指令級並行性並利用新CPU上的SIMD(向量)指令。優化將是CPU特定的,並將使用適用的指令集擴展。具有潛在性能優化的浮點算法
經典教科書中的例子是矩陣乘法,其中可以通過重新排序內存訪問序列(以及其他技巧)來實現很好的加速。另一個例子是FFT。不幸的是,我不能選擇其中任何一個。
任何人有任何想法,或者可以使用提升的算法/方法?
我只對可以設想每線程加速的算法感興趣。通過多線程並行處理問題很好,但不是本講座的範圍。
編輯1:我是以爲課程,沒有教它。在過去的幾年中,有不少項目在性能方面超越了當前的最佳實施。
編輯2:這paper列出(從第11頁開始)七類重要的數值方法和一些使用它們的相關算法。至少有一些提到的算法是候選人,但是很難看出哪些算法是候選人。
編輯3:謝謝大家對你很好的建議!我們提出實施曝光融合算法(paper from 2007),我們的建議被接受。該算法創建類似HDR的圖像,主要由小內核卷積組成,其次是源圖像的加權多分辨率混合(在拉普拉斯金字塔上)。我們感興趣的是該算法已經在廣泛使用的Enfuse工具中實現,該工具現在在4.1版本中。因此,我們將能夠驗證並比較我們的結果與原始結果,並且可能有助於工具本身的開發。如果可以,我會在未來更新這篇文章。
消除矩陣乘法和FFT使得這非常困難。你能否考慮將其中一個問題視爲優化? –
具體是否排除了FFT?快速沃爾什變換具有基本相同的結構。變換的原始矩陣形式可以被分解爲log(N)稀疏矩陣的乘積以產生加速。 – pjs
原諒我。我確信這就是你致力於展示的東西,但是當我看在線課件時,我看到了很多這種材料。我曾經也是一位教授,我的同事和我從未見過任何非常現實的軟件。硬件工程師和編譯器設計者試圖最大化吞吐量是非常好的。如果您在教授程序員,他們就在管道的另一端,實際上沒有人教他們如何最小化要執行的指令。作爲一個例子,[*我嘗試*](http://stackoverflow.com/a/927773/23771)。 –