OpenCL用于計算機領域的13個經典案例

摘要:當使用加速器和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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448702.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

版本控制:集中式(SVN) vs 分布式(GIT)

Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分布式版本控制系統,集中式和分布式版本控制系統有什么區別呢? 先說集中式版本控制系統,版本庫是集中存放在中央服務器的,而干活的時候,用的都是…

Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心組件

為什么80%的碼農都做不了架構師?>>> 作者| 阿里云智能事業群高級開發工程師 元毅 Knative 主要由 Build、Serving 和 Eventing 三大核心組件構成。Knative 正是依靠這三個核心組件,驅動著 Knative 這艘 Serverless 巨輪前行。下面讓我們來分…

樹莓派基金會來號召用鍵盤生物學家研究企鵝

倫敦動物學會(Zoological Society of London)于2014年,與伍茲霍爾海洋研究所和牛津大學等組織合作監控企鵝的計劃Penguin Lifelines有了新進展,倫敦動物學會現與其他動物保護組織合作Penguin Watch項目,邀請民眾在網上…

BlockingCollectionT 類實現 列隊操作

官方文檔 為實現 IProducerConsumerCollection<T> 的線程安全集合提供阻塞和限制功能。 通過 BlockingCollection<T> 實現列隊調用函數 建立全局變量 BlockingCollection<string> blockingCollection new BlockingCollection<string>(); 建立調用函數…

Git 版本回退

現在&#xff0c;你已經學會了修改文件&#xff0c;然后把修改提交到Git版本庫&#xff0c;現在&#xff0c;再練習一次&#xff0c;修改readme.txt文件如下&#xff1a; Git is a distributed version control system. Git is free software distributed under the GPL.然后嘗…

AMD院士站臺 異構計算與OpenCL編程師資培訓首站清華開講

摘要&#xff1a;2013年10月14日&#xff0c;“2013年異構計算與OpenCL編程師資培訓”在清華大學召開。本活動邀請到AMD、Khronos Group及清華大學的多位并行計算領域專家&#xff0c;與參會者共同探討OpenCL異構開發和優化技術。 2013年10月14日&#xff0c;由教育部科技發展…

【問題記錄】RIDE-1.7.3.1控制臺及日志中文亂碼處理

RIDE-1.7.3.1運行結果界面展示: 解決方法參考鏈接&#xff1a; https://blog.csdn.net/panda62/article/details/88535376 轉載于:https://www.cnblogs.com/quietCorner/p/11046656.html

GPU Saturday技術沙龍:OpenCL程序員眼中的下一代APU架構

摘要&#xff1a;GPU Saturday技術沙龍在北京3WCoffee成功舉辦。本次活動邀請AMD資深技術人員及清華大學項目研究員就AMD最新的GCN架構、GPU加速計算在挖掘比特幣、典型圖像算法、深度神經網絡算法等領域的分析與應用展開深入討論。 [CSDN報道] 9月5日&#xff0c;GPU Saturda…

直接取出 post 請求中的 json、得請求體參數、查看 post 請求參數

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 方法如下&#xff1a; try{ServletRequestAttributes requestAttributes (ServletRequestAttributes) RequestContextHolder.getReques…

SparkSQL調優

1、執行計劃&#xff08;過往記憶https://www.iteblog.com/archives/2562.html&#xff09; df.explain(true)//顯示邏輯計劃和物理計劃&#xff0c;不加true只顯示物理計劃 2、邏輯計劃優化方法&#xff1a; 謂詞下推&#xff0c;列裁剪&#xff0c;常量替換&#xff0c;常量累…

AMD發布APPML源碼,構建clMath庫

摘要&#xff1a;日前&#xff0c;AMD將加速并行處理數學庫&#xff08;Accelerated Parallel Processing Math Library簡稱APPML&#xff09;開源&#xff0c;內容包含了BLAS和FFT的OpenCL實現&#xff0c;項目托管在GitHub上&#xff0c;命名為clMath&#xff0c;該項目基于A…

最簡單的 post 請求發起方式、調用其它系統接口

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 調用其它系統接口&#xff0c;發起一個 post 請求&#xff0c;寫法如下&#xff1a; import cn.com.infinitus.yunxiao.jira.vo.EpicV…

CSS基礎學習 18.CSS多列

四種常見的瀏覽器內核&#xff1a; 轉載于:https://www.cnblogs.com/songsongblue/p/11050210.html

BGP

BGP&#xff1a;border gateway protocol 邊界網關路由協議 路由協議分類&#xff1a;內部網關路由協議IGP&#xff1a;rip ospf isis &#xff08;eigrp&#xff09;外部 網關路由協議EGP&#xff1a;EGP&#xff08;早期淘汰&#xff09; BGP BGP特點&#xff1a;1、針對大型…

OpenCL 2.0發布,帶來更強悍的異構計算能力

摘要&#xff1a;Khronos Group本周一發布了OpenCL 2.0&#xff0c;可為顯示芯片提供更好的獨立性&#xff0c;以便能為通用軟件計算出更大的力。該組織已經發布了2.0的臨時標準&#xff0c;預計正式版本的發布要等到6個月以后。 Khronos小組于本周一&#xff08;7月22日&…

從一個OutOfMemoryError 學會了分析Java內存泄漏問題

從一個OutOfMemoryError 學會了分析Java內存泄漏問題 以前都是好好的&#xff0c;最近出現了 oom。 問題 開始是&#xff1a; java.lang.OutOfMemoryError: Java heap space 2019-06-14 11:02:41.678 ERROR 13789 --- [nio-8082-exec-3] c.e.p.s.c.c.core.ELDictionaryControll…

Ubuntu安裝php7.2

1、使用ppa增加源apt-get install python-software-propertiesapt-get install software-properties-commonadd-apt-repository ppa:ondrej/php2、更新apt-get update3、查看源中PHP7.2版本apt list | grep php 列表中已經包含你想要的PHP版本了4、安裝PHP7.2apt-get -y …

會出現 unreachable statement 的可能

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 java編譯器把unreachable statement標記為運行時錯誤&#xff0c;一個unreachable statement就是編譯器決定永遠不會執行它。 下面的幾…

Hadoop+GPU強強聯手的性能探索

摘要&#xff1a;Hadoop并行處理可以成倍地提高性能&#xff0c;GPU也日益成為計算任務的重要分擔者&#xff0c;Altoros Systems研發團隊一直致力于探索HadoopGPU的可能性&#xff0c;以及在實際的大規模系統中的實現&#xff0c;這篇文章就是他們的部分研究成果。 Hadoop并行…

Vue Google瀏覽器插件 Vue Devtools無法使用的解決辦法

1.插件安裝不必多說 一定要用Vue.js 開發版 Vue.min.js 在控制面板就不會顯示 2.本地調試 用的是file://協議 修改插件允許訪問文件網址 打上對勾 轉載于:https://www.cnblogs.com/116970u/p/11052987.html