OpenCL用于计算机领域的13个经典案例
哪種算法可以最好的映射GPU及矢量處理器呢?換句話說,當使用加速器和OpenCL時,哪種類型的算法更加快速?
來自弗吉尼亞理工大學的Wu Feng教授和他的團隊例舉了一份算法列表,分享了OpenCL常被用于計算機領域的13個經(jīng)典案例。有人將其稱之為OpenCL計算領域的13個“小巨人”。
一、Dense Linear Algebra(稠密線性代數(shù))
經(jīng)典的向量和矩陣運算,傳統(tǒng)上可分為1級(矢量/矢量vector/vector),2級(矩陣/矢量),3級(矩陣/矩陣),應用范圍極其廣泛。
應用范圍:
- 線性代數(shù):LAPACK, ATLAS。
- Clustering algorithms (聚類算法)/ Data-mining(數(shù)據(jù)挖掘):StreamCluster, K-均值算法。
二、Sparse Linear Algebra(稀疏線性代數(shù))
乘法運算主要是由零矩陣組成。通過移動對角矩陣周圍的非零元素,使計算更加高效。
應用范圍:
- 有限元素分析。
- 偏微分方程式。
使用OpenCL有兩種方法:通過一些列的操作行為解決該問題,這將導致很大一部分開銷;第二種方法是使用一些列連續(xù)的逐次逼近法,將函數(shù)誤差最小化。
三、Spectral Methods(光譜法)
各種結構的物質(zhì)都具有自己的特征光譜,光譜分析法就是利用特征光譜研究物質(zhì)結構或測定化學成分的方法。
光譜方法可用來解決常微分方程(ODEs),偏微分方程(PDEs)以及包含微分方程增值問題。
應用范圍:
- 流體動力學。
- 量子力學。
- 天氣預測。
利用OpenCL針對每個硬件架構有各種FFT實施方法。訣竅是調(diào)優(yōu)。
四、N-Body Methods
N-Body法是模擬粒子的動力學系統(tǒng),通常在物理學的影響下如重力,計算方法有兩種(A影響B(tài),同樣B也影響A),整個系統(tǒng)在每一輪之后都會再次更新。
基本算法是O(N^2)。對于大型系統(tǒng)的優(yōu)化,可以通過neighbour-administration(相鄰管理)和遠離粒子計算,這里運行時方法是可取的。
應用范圍:
- 天文學:宇宙學(比如,星系的形成)。
- 計算化學:分子動力學(比如蛋白質(zhì)折疊),分子模擬。
- 物理:流體動力學,等離子體物理學。
OpenCL可以實現(xiàn)每秒數(shù)以萬計的粒子。
五、Structured Grids(結構化網(wǎng)格)
結構化網(wǎng)格是指網(wǎng)格區(qū)域內(nèi)所有的內(nèi)部點都具有相同的毗鄰單元。在一個結構化或規(guī)則的網(wǎng)格中所有的元素具有相同的尺寸,比如方形模塊。計算方法依賴于相鄰的不規(guī)則網(wǎng)格。
應用范圍:
- 圖形處理:Gaussian image blurring 高斯圖像模糊。
- Physics Simulations:transient thermal differential equation solver。
- Finite Element Method(有限元素法)。
利用OpenCL,網(wǎng)格有規(guī)則,因此映射也相當容易。要解決的問題是如何做到相鄰網(wǎng)格之間的連通性。
六、Unstructured Grids(非結構化網(wǎng)格)
所有的網(wǎng)格都無規(guī)則性,不同的元素有著不同的相鄰數(shù)量。這一組有很多的重疊與回溯。網(wǎng)格中的每個元素都可以是二維的多邊形或者三維多面體。每個元素之間沒有隱含的連通性。
應用范圍:
- 計算流體動力學。
- Belief propagation(置信傳播)。
難點是在硬件上映射不規(guī)則網(wǎng)格。
七、Map-Reduce & Monte Carlo
每個進程可獨立于其他進程運行,因此,在相鄰的進程之間沒有連通性。在龐大的數(shù)據(jù)集和計算密集型算法中,GPU可結合大數(shù)據(jù)解決方法,比如Hadoop。
應用范圍:
- Monte-Carlo(蒙特卡洛法):PI(圓周率)計算法,碰撞仿真,序列對比。
- 分布式搜索。
由于節(jié)點之間的通信是最小的,這也是使用GPU最快的方法之一。
八、Combinational Logic(組合邏輯)
組合邏輯電路是一種邏輯電路,它的任一時刻的穩(wěn)態(tài)輸出,僅僅與該時刻的輸入變量的取值有關,而與該時刻以前的輸入變量取值無關。該算法中涉及大量的數(shù)據(jù),可利用位級操作( bit-level )執(zhí)行簡單的操作。
應用范圍:
- Computing checksums。
- 計算校驗法,CRCs。
- 加密和解密。
- 散列。
- Hamming weight。
并不是所有的硬件都適合這種類型的操作,因此,設備的選擇是至關重要的。
九、Graph Traversal(圖形追蹤)
圖形追蹤是以特定的方式訪問所有節(jié)點,更新/檢查值。樹形追蹤是屬于圖形追蹤一種特殊情況,有間接查找和微計算。
應用范圍:
- 搜索:深度優(yōu)先搜索,廣度優(yōu)先搜索,找到所有節(jié)點中某個連接組件。
- 排序:快速排序。
- 序列化/反序列化。
- Maze生成。
- 碰撞檢測。
使用OpenCL,最關鍵的是要保持核心程序處于繁忙狀態(tài)。
十、Dynamic Programming(動態(tài)規(guī)劃)
它是一種在數(shù)學、計算機科學和經(jīng)濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。
動態(tài)規(guī)劃常適用于解決簡單的重疊子問題和最優(yōu)子結構性質(zhì)的問題。許多動態(tài)編程問題操作通過在網(wǎng)格中填寫具有代表性的問題領域,這個領域在網(wǎng)格中保留著最終答案。
應用范圍:
- 圖形問題:Floyd’s AllPairs,最短路徑, Bellman-Ford算法。
- 序列對比:Needleman-Wunsch, Smith-Waterman。
十一、Backtracking(回溯法)
回溯法(探索與回溯法)是一種選優(yōu)搜索法,按選優(yōu)條件向前搜索,以達到目標。但當探索到某一步時,發(fā)現(xiàn)原先選擇并不優(yōu)或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態(tài)的點稱為“回溯點”。
這組通用的解決方法是分支定界(分而治之)。
應用范圍:
- 智力游戲:N-queens,填字游戲,九宮格游戲,Peg接龍。
- Travelling salesman(旅行推銷員)。
- Knapsack,子集和問題以及分區(qū)問題。
- 整數(shù)線性規(guī)劃。
- Boolean Satisfiability(布爾運算)。
- Combinatorial Optimisation(組合優(yōu)化)。
在OpenCL中最重要的就是避免大的分支。
十二、Probabilistic Graphical Models(概率圖模型)
這個圖形結合了不確定性(概率)和邏輯結構(獨立約束)表示復雜的、現(xiàn)實世界的現(xiàn)象。
應用范圍:
- Bayesian(貝葉斯)網(wǎng)絡:信念網(wǎng)絡,概念網(wǎng)絡,因果網(wǎng)絡,知識地圖。
- Hidden Markov models(隱馬爾可夫模型)。
- Neural networks。
隨著越來越多的進程需要更新相同的節(jié)點(原子學就是典型的案例),因此,需消耗大量的時間。
十三、Finite State Machines(有限狀態(tài)機)
有限狀態(tài)機是指有限個狀態(tài)以及在這些狀態(tài)之間的轉移和動作等行為的數(shù)學模型。
其具有三個特征:狀態(tài)總數(shù)(state)是有限的;任一時刻,只處在一種狀態(tài)之中;某種條件下,會從一種狀態(tài)轉變(transition)到另一種狀態(tài)。
數(shù)學計算模型常用于設計連接計算機程序和時序邏輯電路。它常被看作是一個抽象性的機器,可用在有限的數(shù)量狀態(tài)下。
應用范圍:
- 視頻解碼,解析,壓縮。
- 數(shù)據(jù)挖掘。
- 查找循環(huán)模式。
總結
以上是生活随笔為你收集整理的OpenCL用于计算机领域的13个经典案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS开发基础之使用AFNetworki
- 下一篇: IOS开发基础之使用AFNetworki