標籤:des style class blog http tar
http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl-can-be-used
摘要:當使用加速器和OpenCL時,哪種類型的演算法更加快速?來自維吉尼亞理工大學的Wu Feng教授和他的團隊例舉了一份演算法列表,分享了OpenCL常被用於電腦領域的13個經典案例。
哪種演算法可以最好的映射GPU及向量處理器呢?換句話說,當使用加速器和OpenCL時,哪種類型的演算法更加快速?
來自維吉尼亞理工大學的Wu Feng教授和他的團隊例舉了一份演算法列表,分享了OpenCL常被用於電腦領域的13個經典案例。有人將其稱之為OpenCL計算領域的13個“小巨人”。
一、Dense Linear Algebra(稠密線性代數)
經典的向量和矩陣運算,傳統上可分為1級(向量/向量vector/vector),2級(矩陣/向量),3級(矩陣/矩陣),應用範圍極其廣泛。
應用範圍:
- 線性代數:LAPACK, ATLAS。
- Clustering algorithms (聚類演算法)/ Data-mining(資料採礦):StreamCluster, K-均值演算法。
正常情況下執行迴圈,但大多數情況下可輕易在OpenCL進行並行計算。
二、Sparse Linear Algebra(稀疏線性代數)
乘法運算主要是由零矩陣組成。通過移動對角矩陣周圍的非零元素,使計算更加高效。
應用範圍:
使用OpenCL有兩種方法:通過一些列的操作行為解決該問題,這將導致很大一部分開銷;第二種方法是使用一些列連續的逐次逼近法,將函數誤差最小化。
三、Spectral Methods(光譜法)
各種結構的物質都具有自己的特徵光譜,光譜分析法就是利用特徵光譜研究物質結構或測定化學成分的方法。
光譜方法可用來解決常微分方程(ODEs),偏微分方程(PDEs)以及包含微分方程增值問題。
應用範圍:
利用OpenCL針對每個硬體架構有各種FFT實施方法。訣竅是調優。
四、N-Body Methods
N-Body法是類比粒子的動力學系統,通常在物理學的影響下如重力,計算方法有兩種(A影響B,同樣B也影響A),整個系統在每一輪之後都會再次更新。
基本演算法是O(N^2)。對於大型系統的最佳化,可以通過neighbour-administration(相鄰管理)和遠離粒子計算,這裡運行時方法是可取的。
應用範圍:
- 天文學:宇宙學(比如,星系的形成)。
- 計算化學:分子動力學(比如蛋白質摺疊),分子類比。
- 物理:流體動力學,電漿體物理學。
OpenCL可以實現每秒數以萬計的粒子。
五、Structured Grids(結構化網格)
結構化網格是指網格地區內所有的內部點都具有相同的毗鄰單元。在一個結構化或規則的網格中所有的元素具有相同的尺寸,比如方形模組。計算方法依賴於相鄰的不規則網格。
應用範圍:
- 圖形處理:Gaussian image blurring 高斯映像模糊。
- Physics Simulations:transient thermal differential equation solver。
- Finite Element Method(有限元素法)。
利用OpenCL,網格有規則,因此映射也相當容易。要解決的問題是如何做到相鄰網格之間的連通性。
六、Unstructured Grids(非結構化網格)
所有的網格都無規則性,不同的元素有著不同的相鄰數量。這一組有很多的重疊與回溯。網格中的每個元素都可以是二維的多邊形或者三維多面體。每個元素之間沒有隱含的連通性。
應用範圍:
- 計算流體動力學。
- Belief propagation(置信傳播)。
痛點是在硬體上映射不規則網格。
七、Map-Reduce & Monte Carlo
每個進程可獨立於其他進程運行,因此,在相鄰的進程之間沒有連通性。在龐大的資料集和計算密集型演算法中,GPU可結合大資料解決方案,比如Hadoop。
應用範圍:
- Monte-Carlo(蒙特卡洛法):PI(圓周率)計演算法,碰撞模擬,序列對比。
- 分布式搜尋。
由於節點之間的通訊是最小的,這也是使用GPU最快的方法之一。
八、Combinational Logic(組合邏輯)
組合邏輯電路是一種邏輯電路,它的任一時刻的穩態輸出,僅僅與該時刻的輸入變數的取值有關,而與該時刻以前的輸入變數取值無關。該演算法中涉及大量的資料,可利用位級操作( bit-level )執行簡單的操作。
應用範圍:
- Computing checksums。
- 計算校正法,CRCs。
- 加密和解密。
- 散列。
- Hamming weight。
並不是所有的硬體都適合這種類型的操作,因此,裝置的選擇是至關重要的。
九、Graph Traversal(圖形追蹤)
圖形追蹤是以特定的方式訪問所有節點,更新/檢查值。樹形追蹤是屬於圖形追蹤一種特殊情況,有間接尋找和微計算。
應用範圍:
- 搜尋:深度優先搜尋,廣度優先搜尋,找到所有節點中某個串連組件。
- 排序:快速排序。
- 序列化/還原序列化。
- Maze產生。
- 碰撞檢測。
使用OpenCL,最關鍵的是要保持核心程式處於繁忙狀態。
十、Dynamic Programming(動態規劃)
它是一種在數學、電腦科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。
動態規劃常適用於解決簡單的重疊子問題和最優子結構性質的問題。許多動態編程問題操作通過在網格中填寫具有代表性的問題領域,這個領域在網格中保留著最終答案。
應用範圍:
- 圖形問題:Floyd’s AllPairs,最短路徑, Bellman-Ford演算法。
- 序列對比:Needleman-Wunsch, Smith-Waterman。
“動態”應用,在運行時進行調優以達到最佳效能。
十一、Backtracking(回溯法)
回溯法(探索與回溯法)是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。
這組通用的解決方案是分支定界(分而治之)。
應用範圍:
- 智力遊戲:N-queens,填字遊戲,九宮格遊戲,Peg接龍。
- Travelling salesman(旅行推銷員)。
- Knapsack,子集和問題以及分區問題。
- 整數線性規劃。
- Boolean Satisfiability(布爾運算)。
- Combinatorial Optimisation(組合最佳化)。
在OpenCL中最重要的就是避免大的分支。
十二、Probabilistic Graphical Models(機率圖模型)
這個圖形結合了不確定性(機率)和邏輯結構(獨立約束)表示複雜的、現實世界的現象。
應用範圍:
- Bayesian(貝葉斯)網路:信念網路,概念網路,因果網路,知識地圖。
- Hidden Markov models(隱馬爾可夫模型)。
- Neural networks。
隨著越來越多的進程需要更新相同的節點(原子學就是典型的案例),因此,需消耗大量的時間。
十三、Finite State Machines(有限狀態機器)
有限狀態機器是指有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。
其具有三個特徵:狀態總數(state)是有限的;任一時刻,只處在一種狀態之中;某種條件下,會從一種狀態轉變(transition)到另一種狀態。
數學計算模型常用於設計串連電腦程式和時序邏輯電路。它常被看作是一個抽象性的機器,可用在有限的數量狀態下。
應用範圍:
- 視頻解碼,解析,壓縮。
- 資料採礦。
- 尋找迴圈模式。
英文出自:Streamcomputing
本文為CSDN編譯整理,未經允許不得轉載,如需轉載請聯絡market#csdn.net(#換成@)