1. 程式人生 > >【平行計算-CUDA開發】FPGA 設計者應該學習 OpenCL及愛上OpenCL的十個理由

【平行計算-CUDA開發】FPGA 設計者應該學習 OpenCL及愛上OpenCL的十個理由

作為OpenCL CodeBench的開發者,Amdahl軟體公司始終堅信OpenCL能夠帶來巨大的利益,也從未懷疑過OpenCL標準的成功性。現在人們對計算效能的要求越來越高,在不超過發熱量和功耗的限制範圍,我們相信多核和多核系統提供了一個可行的解決方法。對於OpenCL使用者來說,OpenCL標準的優點和利益是很明顯的。我們認為在未來的幾十年甚至超過幾十年裡,OpenCL將會引領計算機軟體行業。

下面是我們為什麼覺得OpenCL強大的最重要的10個理由。

1-OpenCL可以為程式碼加速10倍甚至更多

現在許多的嵌入式或者桌面計算平臺在主機板上都有GPU。但是,大部分時間GPU都是閒置的,除非該計算平臺正在執行圖形敏感的工作。通過利用空閒的GPU的計算能力,你可以加速程式碼的執行。假如你的演算法本身就是並行的,那麼利用GPU可以加速的更多。對於分子動力學模擬,甚至電子電路,實時視訊處理,影象處理,影象增強,移動偵測,財務分析和自動交易等方面的應用特別適合利用GPU來進行加速。

GPU並不是唯一可以利用OpenCL加速的裝置。如果你的主機平臺有多個CPU核——而且現在越來越多的臺式電腦擁有四個核或者更多的核——在這種情況下你同樣可以使用OpenCL進行CPU的多核程式設計。利用OpenCL進行CPU多核程式設計可能達不到利用GPU加速的效果,但這取決於加速的演算法,不過隨著CPU核數的增加效能也會隨之提高。

2-OpenCL是一個開放標準

OpenCL是一個開放的標準意味著該標準對於所有使用OpenCL的人來說都是免費的,開放的。OpenCL有一系列高品質的文件,包括線上教程、程式設計指南和參考手冊。除此之外,我們還可以找到很多關於的OpenCL的開源工具和出版的書籍,而且我們還可以利用網際網路找到很多的使用案例和設計例項。

3-OpenCL可以降低功耗

現在存在很多的工業例子證明對加速器的使用可以降低系統能耗。Amdahl軟體公司在不久的將來會出版一本白皮書,該書使用直接的定量分析的方式表明使用簡單的CPU+GPU模型來降低功耗的機會。與此同時,Imagination Technologies公司提供的OpenCL視訊例子很好的展示了這一點。

4-OpenCL可以節省你的硬體成本

對於數字訊號處理(DSP),OpenCL提供了一種寬鬆的浮點實現。如果你的演算法不需要絕對的精確,你可以在系統中取消DSP,使用已有的GPGPU代替。

5-OpenCL正在快速的普及

這對於桌面和嵌入式世界都是正確的。半導體和IP供應商,像Altera, Apple, AMD, ARM, Freescale, IBM, Imagination, Intel, NVidia, Samsung, STMicroelectronics, Texas Instruments, Vivante, Qualcomm等已經宣佈了他們的OpenCL相容裝置。在Khronos的OpenCL相容產品資料庫可以找到完整的相容裝置和驅動清單。隨著其他裝置相容性的測試,這個清單會迅速擴大。通過使用OpenCL,現在越來越多的庫和終端使用者應用正在被移植到OpenCL平臺,以利用GPGPU的加速能力。OpenCL的使用提高了應用的效能,為終端使用者的體驗和期望設定了新的標準。

6-OpenCL可以被用作產生自定義硬體的基礎

OpenCL程式設計模型在本質上是通過對核心,工作組和工作項的定義來實現並行。在核心中,甚至可以通過使用有著固定的眾所周知長度的小型向量資料型別進行更細粒度的並行度劃分。在高效資料訪問過程中,OpenCL另外一個重要的組成特性是核心能夠通過barrier和memory fence進行同步的能力。所有這些特性使得OpenCL不僅僅適合程式設計以用來進行軟體加速,也適合對自定義硬體加速器實現的定義。Altera公司已經意識到了這一點,它最近釋出了一個程式,該程式提供了從OpenCL移植到FPGA的實現方式。

開發人員的應用程式不再受限於存在的裝置。相反,他們可以通過OpenCL定義特定的“co-processor”來進行系統優化,以滿足他們的特殊要求(效能,功耗,大小)。設計人員可以在一個已知的並易於除錯的環境下開發一個功能全面並已通過測試的的並行應用。一旦完成了程式碼的編寫,影響效能的關鍵程式碼部分可以通過FPGA image來進行完美的加速,該FPGA image是程式涉及到的核心直接產生的,這是OpenCL的一個很重要的好處。這促進了一種緊密的整合硬體/軟體協同設計方法的行成,在該方法中,同一個基準程式和測試貫穿整個開發過程,這樣就加快了應用進入市場的時間。

7-OpenCL C99語言是基於C語言的

這是一個不應該被忽略的特性。建立一種全新的程式語言會減慢對OpenCL的採納速度——儘管它可能會帶來巨大的利益。C語言是一種工業標準語言,它是OpenCL的基礎。OpenCL kernel定義語言是對C99的擴充套件,簡單易於接受。對於會使用C程式設計的工程師來說,能夠很快的掌握OpenCL。這樣,程式設計師就可以集中精力在他們想要加速的演算法上,而不是OpenCL的語法上。

8-OpenCL可以被用於各種各樣的宿主語言

OpenCL kernel可以在C , C++, Java, Python, JavaScript, Haskell, Perl, Ruby等宿主語言中呼叫,而且能夠呼叫OpenCL的語言還在增多。這就使得在不同的開發環境下可以進行OpenCL kernel和結果的移植和複用,使得對GPGPU計算的支援更加靈活。

9-很容易開始OpenCL

大部分的PC機都有相容OpenCL的顯示卡。如果你的計算系統沒有GPU(不太可能的情況),只要你找到相應可用的驅動,你同樣可以在CPU上直接執行OpenCL程式。在嵌入式世界中,存在很多支援OpenCL的開發板。許多的GPU供應商除了提供了OpenCL的培訓視訊和教程,還提供了很多關於OpenCL的應用筆記和示例程式。所以要想開始OpenCL程式設計是很便宜,很簡單的事情。

10-OpenCL是平臺獨立的

OpenCL的程式設計模型是平臺獨立的,它能夠用來進行異構的多核的軟體開發。不同的記憶體空間定義了一個記憶體一致的模型。在OpenCL程式碼執行時,從使用者的角度看,低層級的任務例如佇列和執行核心是被遮蔽的,是不可見的。在OpenCL中,events,barrier和fences提供了同步的能力。

OpenCL平臺的獨立性意味著在不修改程式碼的前提下就能夠讓程式碼在不同的相容的OpenCL平臺上執行。因此,即使在不同的平臺運行同一OpenCL程式碼效能可能會有所不同,但是從一個平臺將OpenCL程式碼移植到另一個平臺是很簡單的。OpenCL在基於共有系統模型的基礎上提供了一個功能性的起點。

結論

我們堅信OpenCL潛在的能力。OpenCL使得軟體工程師可以有效的利用(易購的)多核計算的能力。不管在什麼程式設計環境下,用來進行開發的工具越好,開發效率就越高,程式碼的質量就越好。在多核的時代下,我們使用OpenCL CodeBench的目的就是簡化OpenCL的開發。OpenCL CodeBench提供了全面的主機程式碼生成功能,還提供了基於Eclipse的智慧便捷的OpenCL kernel編輯器。不要一味的相信我們的話,你可以自己去試試用OpenCL CodeBench進行程式設計,你將會發現要加速你的應用是件多麼簡單多麼快捷的事情。

相關推薦

平行計算-CUDA開發FPGA 設計者應該學習 OpenCL愛上OpenCL理由

作為OpenCL CodeBench的開發者,Amdahl軟體公司始終堅信OpenCL能夠帶來巨大的利益,也從未懷疑過OpenCL標準的成功性。現在人們對計算效能的要求越來越高,在不超過發熱量和功耗的限制範圍,我們相信多核和多核系統提供了一個可行的解決方法。對於OpenCL使用者來說,OpenCL標準的優

平行計算-CUDA開發從零開始學習OpenCL開發(一)架構

本文將作為我《從零開始做OpenCL開發》系列文章的第一篇。 1 異構計算、GPGPU與OpenCL   OpenCL是當前一個通用的由很多公司和組織共同發起的多CPU\GPU\其他晶片 異構計算(heterogeneous)的標準,它是跨平臺的。旨在充分利用G

平行計算-CUDA開發淺談GPU平行計算新趨勢

 隨著GPU的可程式設計性不斷增強,GPU的應用能力已經遠遠超出了圖形渲染任務,利用GPU完成通用計算的研究逐漸活躍起來,將GPU用於圖形渲染以外領域的計算成為GPGPU(General Purpose computing on graphics proces

平行計算-CUDA開發CUDA軟體架構與Nvidia硬體對應關係

硬體基本架構 實際上在nVidia的GPU裡,最基本的處理單元是所謂的SP(Streaming Processor),而一顆nVidia的GPU裡,會有非常多的SP可以同時做計算;而數個SP會在附加一些其他單元,一起組成一個SM(Streaming Multiprocessor)。幾個SM則會在組成所

平行計算-CUDA開發OpenACC與OpenHMPP

在西雅圖超級計算大會(SC11)上釋出了新的基於指令的加速器並行程式設計標準,既OpenACC。這個開發標準的目的是讓更多的程式設計人員可以用到GPU計算,同時計算結果可以跨加速器使用,甚至能用在多核CPU上。出於顯而易見的原因,NVIDIA在大力推廣和支援OpenACC。

平行計算-CUDA開發GPGPU OpenCL/CUDA 高效能程式設計的10大注意事項

1.展開迴圈 如果提前知道了迴圈的次數,可以進行迴圈展開,這樣省去了迴圈條件的比較次數。但是同時也不能使得kernel程式碼太大。   迴圈展開程式碼例子: 1 #include<iostream> 2 using namespace std; 3 4 int main(){

平行計算-CUDA開發:淺談GPU平行計算新趨勢

前幾天偶然之間與同事談論到ROM,RAM,FLASH一些知識,而突然之間當我們去說這些英文單詞的

容器人必看你一定要來 ECUG Con 2018 的三理由

引領國內雲領域風向的高階峰會 ECUG Con 2018,即將在 12 月 22-23 日 深圳南山 全新啟程!如果你的工作和容器內容相關聯,如果你的興趣和容器技術有交集,如果你是「容器人」,那麼這就給你 3 個理由!告訴你為什麼本次 ECUG 不容錯過! 理由一 多年累積 淵源深遠 ECUG

計算機視覺平行計算CUDA開發GPU硬解碼---CUVID

問題描述:專案中,需要對高清監控視訊分析處理,經測試,其解碼過程所佔CPU資源較多,導致整個系統處理效率不高,解碼成為系統的瓶頸。 解決思路: 利用GPU解碼高清視訊,降低解碼所佔用CPU資源,加速解碼過程。 一、OpenCV中的硬解碼 OpenCV2.4.6中,

Windows 10 應用開發使用x:Bind標記動態獲得計算結果

ash 進行 reg tps 屬性綁定 使用 例子 應用 處理 UWP 在傳統(WPF)的Binding標記上引入了 Bind 標記,Bind 基於編譯階段生成,因而具有較高的性能。但是,你得註意,這個性能上的優化是免去了運行階段動態綁定的開銷,這是不包括數據源的體積的。要

平行計算字首和並行思路

一.定義 如果給定一個數列a[n],令S[k] = a[0]+a[1]+…+a[k],(k = 0, 1, 2…n-1),數列S[k]即為數列a[n]的字首和。 二.序列演算法 很容易就能想到序列的演算法: S[0] = a[0]; for (int i

平行計算用MPI進行分散式記憶體程式設計(二)

 通過上一篇中,知道了基本的MPI編寫並行程式,最後的例子中,讓使用0號程序做全域性的求和的所有工作,而其他的程序卻都不工作,這種方式也許是某種特定情況下的方案,但明顯不是最好的方案。舉個例子,如果我們讓偶數號的程序負責收集求和的工作,情況會怎麼樣?如下圖:  

ARM-Linux開發CUDA開發視訊開發關於Linux下利用GPU對視訊進行硬體加速轉碼的方案

最近一直在研究Linux下利用GPU進行硬體加速轉碼的方案,折騰了很久,至今沒有找到比較理想的硬加速轉碼方案。似乎網上討論這一方案的文章也特別少,這個過程中也進行了各種嘗試,遇到很多具體問題,以下便對之前所作的一些工作做一些總結和分享,省的時間長了自己也忘記了,也希望後來

平行計算Bitonic Sort(雙調排序)基礎

雙調序列 雙調序列(Bitonic Sequence)是指由一個非嚴格增序列X和非嚴格減序列Y構成的序列,比如序列(23,10,8,3,5,7,11,78)。 定義:一個序列a1,a2,…,an是雙調序列(Bitonic Sequence),如果: (1)

CUDA開發Thrust庫

Thrust庫從C++的STL中得到靈感,將最簡單的類似於STL的結構放在Thrust庫中,比如STL中的vector。此外,Thrust庫還包含STL中的演算法和迭代器。         Thrust函式庫提供了兩個向量容器,分別為主機和裝置提供了向量類並且分別駐留在

Python平行計算Python 多核平行計算

以前寫點小程式其實根本不在乎並行,單核跑跑也沒什麼問題,而且我的電腦也只有雙核四個超執行緒(下面就統稱核好了),覺得去折騰並行沒啥意義(除非在做IO密集型任務)。然後自從用上了32核128GB記憶體,看到 htop 裡面一堆空載的核,很自然地就會想這個並行必須去折騰一下。後面發現,其實 Python 的並行真

Windows 10 應用開發跟隨系統主題顏色

tex 線程 align tro 都是 顏色 stroke object 截圖 有些時候,希望應用程序中的某些顏色可以與系統的主題顏色相同,並且當系統主題色改變時進行同步。 實現過程並不復雜,主要用到 UISettings 類,它公開一個 GetColorValue 方法

Windows 10 應用開發使用快捷訪問鍵

width object block 菜單項 miss await 觸控 程序 應用 UWP 雖然主要面向觸控操作,但 Windows 設備是萬能工具,不用手指不用筆的時候,也可能會接上鍵盤耍耍。因此,給應用界面上的一些元素弄個快捷訪問鍵也挺不錯的。為了使用 Windows

高德地圖開發---簡單介紹

pat 人員 4.2 服務 登錄 .com con 高德 搜索服務 高德地圖 Android SDK 能夠為 Android 應用開發人員提供互動的、功能豐富的 Android 手機地圖。 將地圖顯示功能與搜索服務、定位服務分別封裝為三個類庫。每一個類庫不相互

Win 10 應用開發UI Composition 劄記(三):與 XAML 集成

單獨使用 切換 column gif 頂部 tel border 靜態 ons 除了 DirectX 遊戲開發,我們一般很少單獨使用 UI Composition ,因此,與 XAML 互動並集成是必然結果。這樣能夠把兩者的優勢混合使用,讓UI布局能夠更靈活。 說到與 X