⑴ 為什麼在FPGA上使用OpenCL
對異構計算的需求導致出現了新程序語言,推動新硬體的開發。一個例子就是蘋果公司首創的OpenCL。OpenCL是一種編程框架,可在異構平台(包括CPU、GPU、DSP、FPGA和其他類型的處理器)上執行。OpenCL包括一種開發核心程序(在硬體器件上執行的功能)以及定義和控制各種平台的應用程序介面(API)的語言。OpenCL支持基於任務的並行計算以及基於數據的並行計算。
在過去十年左右,處理器硬體頻率遇到了所謂的功率牆,使得處理器無法進一步提高頻率。近幾年中,您最後一次聽說英特爾等CPU製造商以時鍾速度宣傳處理器性能是什麼時候?相反,CPU製造商一直都在忙著往CPU中添加更多的處理內核,增強其指令集,保證系統可以同時執行多條指令,提高程序執行速度,而無需提高時鍾頻率。軟體公司也一直忙於開發一種通過計算機代碼組(即「線程」)以真正的並行方式執行程序的軟體。在並行計算中,線程是在單獨的處理器內核,而不是以前的偽並行處理器(線程不是在單獨的處理器內核上執行,而是被操作系統進行了時間分割,表面上看是並行運行的)上執行的。
FPGA在本質上是並行的,因此,與OpenCL並行計算能力完全吻合。FPGA提供了一種流水線並行方法,可通過在任務中應用推拉配置,利用先前任務中的不同數據(無論是否存在主機交互)完成任務。這是典型數據級並行或任務並行的又一選擇。OpenCL支持您在熟悉的C程序語言環境中,利用OpenCL提供的多種功能來編寫代碼。您無需學習FPGA設計人員的底層HDL編碼工作,即可將這些內核程序發送至FPGA。通常,使用OpenCL編寫FPGA代碼,可以為軟體開發人員和系統設計人員帶來一些優勢。
✓ 簡單方便的進行開發:大多數軟體開發人員都對C編程語言十分熟悉,而對低層HDL語言並不十分了解。OpenCL使您能夠在更高層面上編程,讓更多的軟體開發人員都能採用您的系統。
✓ 代碼分析:您可以使用OpenCL分析代碼,確定性能關鍵的部分,通過FPGA中的內核進行硬體加速。
✓ 性能:每瓦性能指標是系統設計的最終目標。使用FPGA,您可以在高能效解決方案中均衡的實現高性能。
✓ 效率:FPGA是一種精細粒度並行體系結構,使用OpenCL,只生成所需要的邏輯,功耗是其他硬體方案的五分之一。
✓ 異構系統:使用OpenCL,可以針對FPGA、CPU、GPU和DSP無縫開發內核程序,從而實現真正的異構系統設計。
✓ 代碼重用:軟體開發的「聖杯」是實現代碼重用。通常,代碼重用是軟體開發人員和系統設計人員難以企及的目標。OpenCL內核支持代碼移植,可用於不同項目、不同系列、不同代的FPGA,延長代碼的生命周期。
目前,OpenCL是由技術聯盟科納斯組織負責開發和維護的。大多數FPGA製造商都可以為FPGA的OpenCL開發提供軟體開發套件(SDK)。
⑵ Linux下,GCC環境,c語言,使用Opencl, 如何做一個有Button的界面
OpenCL
是個計算函數庫。和
UI
無關。
C
語言開發
GUI
,要看你到底想怎麼實現,是在字元界面?圖形界面。什麼軟體庫支持環境?
Xorg
圖形環境下,GTK
和
QT
都可以方便實現。自己寫實現庫直接調用
xorg
的功能也可以,不過
xorg
的功能很簡單,自己寫圖形庫會累死,但是依賴環境很小。
字元界面,你可以跑
framebuffer
的圖形庫(又都什麼支持不知道,我只知道
QT-E
支持),也可以用
ncurses
,我記得他支持偽窗口界面。
你這前提條件說的太少了,真不好確定你到底需要什麼。
不過
arm
下面跑
opencl
?這個有什麼意義嗎?這種專門跑計算的東西,在
arm
上面是不是性能更渣呢……
⑶ Linux下,GCC環境,C語言,使用Opencl, 如何做一個有Button的界面
OpenCL
是個計算函數庫。和
UI
無關。
C
語言開發
GUI
,要看你到底想怎麼實現,是在字元界面?圖形界面。什麼軟體庫支持環境?
Xorg
圖形環境下,GTK
和
QT
都可以方便實現。自己寫實現庫直接調用
xorg
的功能也可以,不過
xorg
的功能很簡單,自己寫圖形庫會累死,但是依賴環境很小。
字元界面,你可以跑
framebuffer
的圖形庫(又都什麼支持不知道,我只知道
QT-E
支持),也可以用
ncurses
,我記得他支持偽窗口界面。
你這前提條件說的太少了,真不好確定你到底需要什麼。
不過
arm
下面跑
opencl
?這個有什麼意義嗎?這種專門跑計算的東西,在
arm
上面是不是性能更渣呢……
⑷ 為什麼OpenCL更能發揮FPGA的優勢
在可編程技術發展的最初階段,可編程能力出現了兩個極端。一個極端的代表是單核CPU和DSP單元。這些器件使用含有一系列可執行指令的軟體來進行
編程。對於編程人員,在概念上以連續的方式來開發這些指令,而高級處理器能夠對指令重新排序,在運行時從這些連續程序中提取出指令級並行處理操作。作為對
比,可編程技術另一極端的代表是FPGA。通過開發可配置硬體電路對這些器件編程,完全並行執行。使用FPGA的設計人員實際上是大規模開發粒度非常精細
的並行應用。多年以來,這兩個極端同時存在,每一類型的可編程功能適用於不同的應用領域。但是,最近的技術發展趨勢表明,有更好的技術同時實現了可編程和
並行處理操作。
軟體可編程器件的第二種趨勢是復雜硬體的出現,從順序程序中提取出指令級並行處理操作。單核體系結構
輸入指令流,在器件中執行它們,這些器件會有很多並行功能單元。處理器硬體的很大一部分必須專門用於從順序代碼中動態提取出並行處理操作。此外,硬體還會
嘗試去補償存儲器延時。一般而言,編程人員開發程序時沒有考慮處理器的底層存儲器結構,好像只有大規模的統一快速存儲器。相比較而言,處理器必須處理實際
延時,以及與外部存儲器的有限帶寬鏈接。為保持功能單元能夠傳送數據,處理器必須從外部存儲器中預先獲取數據,放入片內高速緩存中,這樣,數據更接近要進
行計算的地方。使用這些技術,性能經過多年的提高後,這類體系結構的改動已經不大了。
圖1.可編程和並行技術最近的發展趨勢
在
傳統處理器體系結構上,這兩種趨勢的優勢日益減小,我們開始尋找各種軟體可編程器件,這些器件的發展非常快,如圖1所示。重點是從運行時自動提取指令級並
行處理操作,發展到在編碼時明確的找到線程級並行處理操作。開始出現高度並行的多核器件,一般趨勢是含有多個簡單處理器,很多晶體管專門用於計算,而不是
採用高速緩存,提取並行處理操作。這些器件一般包括含有2、4或者8個內核的多核CPU,以及含有數百個適用於數據並行計算的簡單內核的GPU等。為能夠
在這些多核器件上實現高性能,編程人員必須以並行方式清晰的對實際應用進行編程。每一內核都必須分配一定的工作,這樣,所有內核能夠協同工作,執行某一計
算。這也是FPGA設計人員在開發其高級系統體系結構時所做的工作。
考慮到多核新時代開發並行程序的需求,開發了
OpenCL
(開放計算語言),以便開發跨平台並行編程標准。OpenCL標准還能夠自然的描述在FPGA中實現的並行演算法,其抽象級要比VHDL或者Verilog
等硬體描述語言(HDL)高得多。雖然有很多高級綜合工具能夠實現高等級的抽象功能,但是都存在同樣的基本問題。這些工具會採用連續C程序,產生並行
HDL實現。在開發HDL時,困難還不是很明顯,但是,提取出線程級並行處理操作在FPGA中實現以提高性能時,困難卻非常大。而FPGA的並行功能非常
強大,與其他器件相比,在盡可能提取並行功能時出現任何失敗的後果都非常嚴重。OpenCL標准能夠解決很多這類問題,它支持編程人員明確的設定並控制並
行處理操作。與純C語言描述的連續程序相比,OpenCL標准能夠更自然的匹配FPGA的高度並行特性。
OpenCL應用程序含有兩部分。OpenCL主程序是純軟體常式,以標准C/C++編寫,可以運行在任何類型的微處理器上。例如,這類處理器可以是FPGA中的嵌入式軟核處理器、硬核ARM處理器或者外置x86處理器。
在
這一主軟體常式執行期間的某一點,某一功能有可能需要進行大量的計算,這就可以受益於並行器件的高度並行加速功能,例如CPU、GPU、FPGA等器件。
要加速的功能被稱為OpenCL內核。採用標准C編寫這些內核;但是,採用結構對其進行注釋,以設定並行處理操作和存儲器等級。圖2中的例子對兩個數組a
和b進行矢量加法,將結果寫回輸出數組應答中。矢量的每一元素都採用了並行線程,當採用像FPGA這類具有大量精細粒度並行單元的器件進行加速時,能夠很
快的計算出結果。主程序使用標准OpenCLAPI,支持將數據傳送至FPGA,調用FPGA內核,傳回得到的數據。
圖2.在FPGA上實現的OpenCL例子
在FPGA中,可以把內核功能傳送到專用深度流水線硬體電路中,它使用了流水線並行處理概念,在本質上就是多線程的。這些流水線的每一條都可以復制多次,與一條流水線相比,提供更強的並行處理功能。
在FPGA上實現OpenCL標準的優勢
使
用OpenCL描述來開發FPGA設計,與基於HDL設計的傳統方法相比,具有很多優勢。開發軟體可編程器件的流程一般包括進行構思、在C等高級語言中對
演算法編程,然後使用自動編譯器來建立指令流。面向OpenCL的Altera
SDK提供了設計環境,很容易在FPGA上實現OpenCL應用。如圖3所示。
圖3.面向OpenCL的Altera SDK簡介
可
以把這一方法與傳統的FPGA設計方法相比較,在傳統方法中,設計人員的主要工作是對硬體按照每個周期進行描述,用於實現其演算法。傳統流程涉及到建立數據
通路,通過狀態機來控制這些數據通路,使用系統級工具連接至底層IP內核,由於必須要滿足外部介面帶來的約束,因此,需要處理時序收斂問題。面向
OpenCL的AlteraSDK幫助設計人員自動完成所有這些步驟,使他們能夠集中精力定義演算法,而不是重點關注乏味的硬體設計。以這種方式進行設計,
設計人員很容易移植到新FPGA,性能更好,功能更強,這是因為OpenCL編譯器將相同的高級描述轉換為流水線,從而發揮了FPGA新器件的優勢。
在
FPGA上使用OpenCL標准,與目前的硬體體系結構(CPU、GPU,等)相比,能夠大幅度提高性能,同時降低了功耗。此外,與使用Verilog或
者VHDL等底層硬體描述語言(HDL)的傳統FPGA開發方法相比,使用OpenCL標准、基於FPGA的混合系統(CPU
+FPGA)具有明顯的產品及時面市優勢。
⑸ 雪豹的開發者相關技術
Mac OS X v10.4在支持64位的機種上增加了有限的64位應用程序支持;Mac OS X v10.5將64位應用程序支持擴展到了大多數Mac OS X的庫和框架上。
Mac OS X 10.6中,絕大多數內建的應用程序都已經重新編譯以支持x86-64架構(除了iTunes,Front Row,Grapher和DVD播放程序以外)。利用Mach-O的通用二進制特性,這些程序在32位處理器上可以以32位模式運行,在64位處理器上則可以以64位模式運行,在載入時自動選擇最合適的版本。同時,內核和內核擴展也可以使用通用二進制格式以同時支持兩種構架。
同時,為了可以在某些機種上以64位模式運行,Mac OS X 內核也進行了重新編譯。在不是默認運行64位模式的機種上,用戶需要在啟動時按住數字鍵6和4以使用64位內核,或更改com.apple.Boot.plist使得以默認64位內核方式啟動。反之,在默認載入64位內核的情況下,可以在開機時按住數字鍵3和2以使用32位內核。64位內核只支持64位的內核擴展,反之亦然;普通應用程序則無此限制,唯獨32位程序只能使用4GB的內存空間 Grand Central Dispatch可以利用新的Mac上的多核處理器取得更好的性能。由於為多核CPU進行程序優化的技術難度,多數程序並沒有有效的利用多核的特性,因此,多核處理器的能力常常沒有得到完全的應用。Grand Central Dispatch包含一些可以幫助開發者有效的利用多核特性進行並行計算的API。
Grand Central Dispatch將線程編程的焦點移到了編程自身,而將開發者從原有的將任務平均分配到各個核上、清除無用線程使用的內存等繁瑣過程中解放出來,使優化性能變得更為容易。Apple也給出了用於開發者編寫的程序的Grand Central Dispatch API,也允許開發者分析Grand Central Dispatch程序中特定模塊的性能。
一種稱為「塊」(blocks)新的C語言和Objective-C語言特性使得開發者可以更簡便的優化程序,以應用Grand Central Dispatch的優點。 OpenCL允許在任意程序中利用GPU的運算能力,而不限於類似於3D游戲的偏重圖形的程序。OpenCL自動的為Mac中的GPU種類而優化,並利用可用的運算能力。OpenCL提供了連續的數值精度,並修正了妨礙基於GPU編程的一個問題。
OpenCL的目的與Nvidia的C語言框架CUDA以及微軟的Direct3D 11計算技術相似。
OpenCL只能在下列GPU上工作: NVIDIA GeForce 320M, GT 330M, 9400M, 9600M GT, 8600M GT, GT 120, GT 130, GTX 285, 8800 GT, 8800 GS, Quadro FX 4800, FX 5600 and ATI Radeon HD 4670, HD 4850, HD 4870, HD 5670, HD 5750, HD 5770, HD 5870 CUPS (是在許多類Unix系統上應用的列印系統)被升級到了1.4版,提供了改進的驅動,網路,Kerberos支持以及一些性能改進。CUPS 1.4也是第一個支持互聯網列印協定2.1版的實現。
⑹ 什麼是OpenCL面向FPGA的OpenCL有何優點
OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的並行編程的開放式、免費標准,也是一個統一的編程環境,便於軟體開發人員為高性能計算伺服器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他並行處理器,在游戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。
OpenCL標準是第一個開放、免版稅、統一的編程模型,能夠在異構系統上加速演算法實現。OpenCL支持在不同的平台上使用基於C的語言來開發代碼——從CPU、GPU、數字信號處理(DSP)器件,到FPGA。Khronos集團的很多供應商都支持OpenCL。
面向FPGA的OpenCL有什麼優點?
(1)使用戶的產品能夠更迅速面市
a.與傳統的FPGA設計流程相比,產品能夠更迅速面市。
b.使用OpenCL C (基於ANSI C)並行編程語言而不是傳統的底層硬體描述語言(HDL)來描述您的演算法。
c.在更高層的設計抽象環境中迅速進行設計開發。
d.針對目前和未來的FPGA重新定位OpenCL C代碼,設計不會過時。
e.跳過耗時的手動時序收斂以及FPGA、主機和外部存儲器之間的通信介面設計工作,一個步驟中就可以在FPGA上實現您的OpenCL C代碼。
(2)能獲得了性能更好、功效更高的解決方案
a.把對性能要求較高的功能從主處理器中卸載到FPGA上,從而提高了性能。
通過觀看採用OpenCL,卸載到FPGA來加速演算法性能的演示,了解詳細信息。
c.與其他硬體方案相比,顯著降低功耗,提高性能。採用FPGA的精細粒度體系結構,Altera面向OpenCL的SDK只生成您需要的邏輯,功耗只有硬體方案的1/5。
⑺ opencl能不能取代opengl
我以前接觸過opengl的編程,所以應該說,opengl還是比cl應用廣。有些效果opencl實現可能要比gl復雜些,不過,看你熟悉那種shading 語言了,我覺得opencl不能取代gl的,就像C++雖然功能強大,但是不能完全取代c語言的。因為各自有各自獨特的應用領域。
⑻ 誰主沉浮 OpenCL與CUDA架構深入解析
CUDA和OpenCL的關系,他們並不是沖突關系,而是包容關系。OpenCL是一個API,在第一個級別,CUDA架構是更高一個級別,在這個架構上不管是OpenCL還是DX11這樣的API,還是像C語言、Fortran、DX11計算,都可以支持。作為程序開發員來講,一般他們只懂這些語言或者API,可以採用多種語言開發自己的程序,不管他選擇什麼語言,只要是希望調用GPU的計算能,在這個架構上都可以用CUDA來編程。
CUDA編程的道理和CPU的編程很類似,比如有了X86的指令集,又有X86各種各樣的CPU,那麼我們只需要對這個指令集編程即可。X86架構上有各種各樣的開發工具,當然也有C語言,Fortran語言,Python語言,Java或者以前的Pascal語言,不論你使用什麼語言進行開發,最後還是在X86的架構上執行。
CUDA也是一樣,有了CUDA的指令集,有了支持CUDA的硬體,我們就可以採用不同的途徑來進行開發,比如可以採用OpenCL或者DirectX這樣的API,也可以用C語言或者Fortran或者Java開發,最終都可以在CUDA架構上運行。
⑼ FPGA適合用在哪兒OpenCL,C,和C++語言對FPGA和全SoC有什麼用
fpga開發:需要什麼自己寫;其他的是已經寫好了,你用就成了,就比如STM上面有5個串口,要用到6個的時候要麼換IC,要麼換其他辦法;fpga的時候,要用串口,自己寫協議,要多少有多少,資源允許的情況下,目前的fpga資源,串口所佔資源忽略不計。