㈠ 集群mpirun並行,把同樣的任務重復跑了幾十遍
我會。入門的話你學習下MPI編程,目前並行計算基本上有:MPI、OPENMP、OPENCL、OPENGL、CUDA你只是想體驗的話用OPENMP最省事了,一句話就可以達到並行的效果代碼我可以給你,但你要配好環境。先給你裸敲一個hello world的MPI程序吧<pre t="code" l="cpp">includelt;stdio.h;
includelt;mpi.h;
int main (int argc,char *argv[])
{
int mypid ,numprocs;
MPI_Init(amp;argc,amp;argv); // 並行開始
MPI_Comm_size(MPI_COMM_WORLD,amp;numprocs); //獲取進程數
MPI_Comm_rank(MPI_COMM_WORLD,amp;mypid); //獲取本進程ID號
printf(hello world! i am %d process of %d processes,mypid,numporcs);
MPI_Finalize(); //並行結束
}這就是MPI版的hello world 程序,你需要在編譯的時候確定同時打開幾個進程,比如說4個,程序可能運行結果為:hello world! i am 2 process of 4 processeshello world! i am 1 process of 4 processeshello world! i am 0 process of 4 processeshello world! i am 3 process of 4 processes為什麼說可能呢,因為四個進程同時在執行上面的那段代碼,哪個進程先結束哪個就先輸出就這個道理。想學並行編程的話,建議你在linux下學習。
㈡ OpenCL是什麼,查了半天沒看懂,能簡單明了的告訴我是干什麼的有什麼功能嗎
OpenCL是GPU通用運算API。是顯卡作通用浮點運算的API。比如視頻轉碼,原來這個工作都是CPU來做的。現在顯卡運算能力比較強,這個工作完全可以交給顯卡來做。
要調用顯卡,這個工作不需要再由程序員考慮了,因為已經有一個現成的介面了,程序員只要管好轉碼的演算法,然後直接調用OpenCL中現成的指令,這個工作就自動由CPU轉交到GPU了。
OpenCL是一個為異構平台編寫程序的框架,此異構平台可由CPU,GPU或其他類型的處理器形成。OpenCL由一門用於編寫kernels (在OpenCL設備上運行的函數)的語言(基於C99)和一組用於定義並控制平台的API組成。OpenCL提供了基於任務分割和數據分割的並行計算機制。
OpenCL類似於另外兩個開放的工業標准OpenGL和OpenAL,這兩個標准分別用於三維圖形和計算機音頻方面。OpenCL擴展了GPU用於圖形生成之外的能力。OpenCL由非盈利性技術組織Khronos Group掌管。
(2)opencl編程快速入門擴展閱讀
API之主要目的是提供應用程序與開發人員以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。提供API所定義的功能的軟體稱作此API的實現。API是一種介面,故而是一種抽象。
應用程序介面(英語:Application ProgrammingInterface,簡稱:API),又稱為應用編程介面,就是軟體系統不同組成部分銜接的約定。由於近年來軟體的規模日益龐大,常常需要把復雜的系統劃分成小的組成部分,編程介面的設計十分重要。程序設計的實踐中,編程介面的設計首先要使軟體系統的職責得到合理劃分。良好的介面設計可以降低系統各部分的相互依賴,提高組成單元的內聚性,降低組成單元間的耦合程度,從而提高系統的維護性和擴展性。[1]
㈢ 吐血整理:C++編程語言資源匯總
關於 C++ 框架、庫和資源的一些匯總列表,內容包括:標准庫、Web應用框架、人工智慧、資料庫、圖片處理、機器學習、日誌、代碼分析等。有需要的小夥伴可以收藏一下!
C++標准庫,包括了STL容器,演算法和函數等。
C++ Standard Library:是一系列類和函數的集合,使用核心語言編寫,也是C++ISO自身標準的一部分。
Standard Template Library:標准模板庫
C POSIX library : POSIX系統的C標准庫規范
ISO C++ Standards Committee :C++標准委員會
C++通用框架和庫
Apache C++ Standard Library:是一系列演算法,容器,迭代器和其他基本組件的集合
ASL :Adobe源代碼庫提供了同行的評審和可移植的C++源代碼庫。
Boost :大量通用C++庫的集合。
BDE :來自於彭博資訊實驗室的開發環境。
Cinder:提供專業品質創造性編碼的開源開發社區。
Cxxomfort:輕量級的,只包含頭文件的庫,將C++ 11的一些新特性移植到C++03中。
Dlib:使用契約式編程和現代C++ 科技 設計的通用的跨平台的C++庫。
EASTL :EA-STL公共部分
ffead-cpp :企業應用程序開發框架
Folly:由Facebook開發和使用的開源C++庫
JUCE :包羅萬象的C++類庫,用於開發跨平台軟體
libPhenom:用於構建高性能和高度可擴展性系統的事件框架。
LibSourcey :用於實時的視頻流和高性能網路應用程序的C++11 evented IO
LibU : C語言寫的多平台工具庫
Loki :C++庫的設計,包括常見的設計模式和習語的實現。
MiLi :只含頭文件的小型C++庫
openFrameworks :開發C++工具包,用於創意性編碼。
Qt :跨平台的應用程序和用戶界面框架
Reason :跨平台的框架,使開發者能夠更容易地使用Java,.Net和Python,同時也滿足了他們對C++性能和優勢的需求。
ROOT :具備所有功能的一系列面向對象的框架,能夠非常高效地處理和分析大量的數據,為歐洲原子能研究機構所用。
STLport:是STL具有代表性的版本
STXXL:用於額外的大型數據集的標准模板庫。
Ultimate++ :C++跨平台快速應用程序開發框架
Windows Template Library:用於開發Windows應用程序和UI組件的C++庫
Yomm11 :C++11的開放multi-methods.
btsk : 游戲 行為樹啟動器工具
Evolving Objects:基於模板的,ANSI C++演化計算庫,能夠幫助你非常快速地編寫出自己的隨機優化演算法。
Neu:C++11框架,編程語言集,用於創建人工智慧應用程序的多用途軟體系統。
Boost.Asio:用於網路和底層I/O編程的跨平台的C++庫。
libev :功能齊全,高性能的時間循環,輕微地仿效libevent,但是不再像libevent一樣有局限性,也修復了它的一些bug。
libevent :事件通知庫
libuv :跨平台非同步I/O。
音頻,聲音,音樂,數字化音樂庫
FMOD :易於使用的跨平台的音頻引擎和音頻內容的 游戲 創作工具。
Maximilian :C++音頻和音樂數字信號處理庫
OpenAL :開源音頻庫—跨平台的音頻API
Opus:一個完全開放的,免版稅的,高度通用的音頻編解碼器
Speex:免費編解碼器,為Opus所廢棄
Tonic: C++易用和高效的音頻合成
Vorbis: Ogg Vorbis是一種完全開放的,非專有的,免版稅的通用壓縮音頻格式。
生物信息,基因組學和生物技術
libsequence:用於表示和分析群體遺傳學數據的C++庫。
SeqAn:專注於生物數據序列分析的演算法和數據結構。
Vcflib :用於解析和處理VCF文件的C++庫
Wham:直接把聯想測試應用到BAM文件的基因結構變異。
壓縮和歸檔庫
bzip2:一個完全免費,免費專利和高質量的數據壓縮
doboz:能夠快速解壓縮的壓縮庫
PhysicsFS:對各種歸檔提供抽象訪問的庫,主要用於視頻 游戲 ,設計靈感部分來自於Quake3的文件子系統。
KArchive:用於創建,讀寫和操作文件檔案(例如zip和 tar)的庫,它通過QIODevice的一系列子類,使用gzip格式,提供了透明的壓縮和解壓縮的數據。
LZ4 :非常快速的壓縮演算法
LZHAM :無損壓縮資料庫,壓縮比率跟LZMA接近,但是解壓縮速度卻要快得多。
LZMA :7z格式默認和通用的壓縮方法。
LZMAT :及其快速的實時無損數據壓縮庫
miniz:單一的C源文件,緊縮/膨脹壓縮庫,使用zlib兼容API,ZIP歸檔讀寫,PNG寫方式。
Minizip:Zlib最新bug修復,支持PKWARE磁碟跨越,AES加密和IO緩沖。
Snappy :快速壓縮和解壓縮
ZLib :非常緊湊的數據流壓縮庫
ZZIPlib:提供ZIP歸檔的讀許可權。
並發執行和多線程
Boost.Compute :用於OpenCL的C++GPU計算庫
Bolt :針對GPU進行優化的C++模板庫
C++React :用於C++11的反應性編程庫
Intel TBB :Intel線程構件塊
Libclsph:基於OpenCL的GPU加速SPH流體模擬庫
OpenCL :並行編程的異構系統的開放標准
OpenMP:OpenMP API
Thrust :類似於C++標准模板庫的並行演算法庫
HPX :用於任何規模的並行和分布式應用程序的通用C++運行時系統
VexCL :用於OpenCL/CUDA 的C++向量表達式模板庫。
C++ B-tree :基於B樹數據結構,實現命令內存容器的模板庫
Hashmaps: C++中開放定址哈希表演算法的實現
Bcrypt :一個跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系統和處理器中。
BeeCrypt:
Botan: C++加密庫
Crypto++:一個有關加密方案的免費的C++庫
GnuPG: OpenPGP標準的完整實現
GnuTLS :實現了SSL,TLS和DTLS協議的安全通信庫
Libgcrypt
libmcrypt
LibreSSL:免費的SSL/TLS協議,屬於2014 OpenSSL的一個分支
LibTomCrypt:一個非常全面的,模塊化的,可移植的加密工具
libsodium:基於NaCI的加密庫,固執己見,容易使用
Nettle 底層的加密庫
OpenSSL : 一個強大的,商用的,功能齊全的,開放源代碼的加密庫。
Tiny AES128 in C :用C實現的一個小巧,可移植的實現了AES128ESB的加密演算法
資料庫,SQL伺服器,ODBC驅動程序和工具
hiberlite :用於Sqlite3的C++對象關系映射
Hiredis: 用於Redis資料庫的很簡單的C客戶端庫
LevelDB: 快速鍵值存儲庫
LMDB:符合資料庫四大基本元素的嵌入鍵值存儲
MySQL++:封裝了MySql的C API的C++ 包裝器
RocksDB:來自Facebook的嵌入鍵值的快速存儲
SQLite:一個完全嵌入式的,功能齊全的關系資料庫,只有幾百KB,可以正確包含到你的項目中。
調試庫, 內存和資源泄露檢測,單元測試
Boost.Test:Boost測試庫
Catch:一個很 時尚 的,C++原生的框架,只包含頭文件,用於單元測試,測試驅動開發和行為驅動開發。
CppUnit:由JUnit移植過來的C++測試框架
CTest:CMake測試驅動程序
googletest:谷歌C++測試框架
ig-debugheap:用於跟蹤內存錯誤的多平台調試堆
libtap:用C語言編寫測試
MemTrack —用於C++跟蹤內存分配
microprofile- 跨平台的網路試圖分析器
minUnit :使用C寫的迷你單元測試框架,只使用了兩個宏
Remotery:用於web視圖的單一C文件分析器
UnitTest++:輕量級的C++單元測試框架
Cocos2d-x :一個跨平台框架,用於構建2D 游戲 ,互動圖書,演示和其他圖形應用程序。
Grit :社區項目,用於構建一個免費的 游戲 引擎,實現開放的世界3D 游戲 。
Irrlicht :C++語言編寫的開源高性能的實時#D引擎
Polycode:C++實現的用於創建 游戲 的開源框架(與Lua綁定)。
CEGUI : 很靈活的跨平台GUI庫
FLTK :快速,輕量級的跨平台的C++GUI工具包。
GTK+: 用於創建圖形用戶界面的跨平台工具包
gtkmm :用於受歡迎的GUI庫GTK+的官方C++介面。
imgui:擁有最小依賴關系的立即模式圖形用戶界面
libRocket :libRocket 是一個C++ HTML/CSS 游戲 介面中間件
MyGUI :快速,靈活,簡單的GUI
Ncurses:終端用戶界面
QCustomPlot :沒有更多依賴關系的Qt繪圖控制項
Qwt :用戶與技術應用的Qt 控制項
QwtPlot3D :功能豐富的基於Qt/OpenGL的C++編程庫,本質上提供了一群3D控制項
OtterUI :OtterUI 是用於嵌入式系統和互動 娛樂 軟體的用戶界面開發解決方案
PDCurses 包含源代碼和預編譯庫的公共圖形函數庫
wxWidgets C++庫,允許開發人員使用一個代碼庫可以為widows, Mac OS X,Linux和其他平台創建應用程序
bgfx:跨平台的渲染庫
Cairo:支持多種輸出設備的2D圖形庫
Horde3D 一個小型的3D渲染和動畫引擎
magnum C++11和OpenGL 2D/3D 圖形引擎
Ogre 3D 用C++編寫的一個面向場景,實時,靈活的3D渲染引擎(並非 游戲 引擎)
OpenSceneGraph 具有高性能的開源3D圖形工具包
Panda3D 用於3D渲染和 游戲 開發的框架,用Python和C++編寫。
Skia 用於繪制文字,圖形和圖像的完整的2D圖形庫
urho3d 跨平台的渲染和 游戲 引擎。
Boost.GIL:通用圖像庫
CImg :用於圖像處理的小型開源C++工具包
CxImage :用於載入,保存,顯示和轉換的圖像處理和轉換庫,可以處理的圖片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。
FreeImage :開源庫,支持現在多媒體應用所需的通用圖片格式和其他格式。
GDCM:Grassroots DICOM 庫
ITK:跨平台的開源圖像分析系統
Magick++:ImageMagick程序的C++介面
MagickWnd:ImageMagick程序的C++介面
OpenCV : 開源計算機視覺類庫
tesseract-ocr:OCR引擎
VIGRA :用於圖像分析通用C++計算機視覺庫
VTK :用於3D計算機圖形學,圖像處理和可視化的開源免費軟體系統。
最後, 對於學習編程或者在工作想升職的程序員兄弟,如果你想更好的提升你的編程能力幫助你提升水平! 筆者這里或許可以幫到你~
編程學習書籍分享:
編程學習視頻分享:
分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
㈣ 為什麼在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)。
㈤ OpenCL,OpenGL和DirectX三者的區別
什麼是OpenCL?
OpenCL全稱Open Computing Language,是第一個面向異構系統通用目的並行編程的開放式、免費標准,也是一個統一的編程環境,便於軟體開發人員為高性能計算伺服器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他並行處理器,在游戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。
OpenCL 1.0主要由一個並行計算API和一種針對此類計算的編程語言組成,此外還特別定義了:
1、C99編程語言並行擴展子集;
2、適用於各種類型異構處理器的坐標數據和基於任務並行計算API;
3、基於IEEE 754標準的數字條件;
4、與OpenGL、OpenGL ES和其他圖形類API高效互通。
什麼是OpenGL?
OpenGL™ 是行業領域中最為廣泛接納的 2D/3D 圖形 API, 其自誕生至今已催生了各種計算機平台及設備上的數千優秀應用程序。OpenGL™ 是獨立於視窗操作系統或其它操作系統的,亦是網路透明的。在包含CAD、內容創作、能源、娛樂、游戲開發、製造業、制葯業及虛擬現實等行業領域中,OpenGL™ 幫助程序員實現在 PC、工作站、超級計算機等硬體設備上的高性能、極具沖擊力的高視覺表現力圖形處理軟體的開發。
OpenGL(全寫Open Graphics Library)是個定義了一個跨編程語言、跨平台的編程介面的規格,它用於三維圖象(二維的亦可)。OpenGL是個專業的圖形程序介面,是一個功能強大,調用方便的底層圖形庫。OpenGL的前身是SGI公司為其圖形工作站開發的IRIS GL。IRIS GL是一個工業標準的3D圖形軟體介面,功能雖然強大但是移植性不好,於是SGI公司便在IRIS GL的基礎上開發了OpenGL。OpenGL的英文全稱是「Open Graphics Library」,顧名思義,OpenGL便是「開放的圖形程序介面」。雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。
Open GL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。游戲開發人員是一個有著獨立思想的群體,很多重要的開發人員目前仍然在使用Open GL。因此,硬體開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; Open GL在這些領域占據著統治地位。最後,開放源碼社區(尤其是Mesa項目)一直致力於為任何類型的計算機(無論它們是否使用微軟的操作系統)提供Open GL支持。
今年08年正式公布OpenGL3.0版本。並且得到了,nv的支持,其官方網站上提供針對N卡的sdk下載。
什麼是DirectX?
DirectX是一種應用程序介面(API),它可讓以windows為平台的游戲或多媒體程序獲得更高的執行效率,加強3d圖形和聲音效果,並提供設計人員一個共同的硬體驅動標准,讓游戲開發者不必為每一品牌的硬體來寫不同的驅動程序,也降低用戶安裝及設置硬體的復雜度。這樣說是不是有點不太明白,其實從字面意義上說,Direct就是直接的意思,而後邊的X則代表了很多的意思,從這一點上我們就可以看出DirectX的出現就是為了為眾多軟體提供直接服務的。
DirectX是由很多API組成的,按照性質分類,可以分為四大部分,顯示部分、聲音部分、輸入部分和網路部分。
顯示部分擔任圖形處理的關鍵,分為DirectDraw(DDraw)和 Direct3D(D3D),前者主要負責2D圖像加速。它包括很多方面:我們播放mpg、DVD電影、看圖、玩小游戲等等都是用的DDraw,你可以把它理解成所有劃線的部分都是用的DDraw。後者則主要負責3D效果的顯示,比如CS中的場景和人物、FIFA中的人物等等,都是使用了DirectX的 Direct3D。
OpenCL、OpenGL和DirectX之間不得不說的故事
業界對Apple的OpenCL的支持將成為它發展的重要因素,早在90年代中期,微軟就曾經努力阻止OpenGL成為行業的標准,以推行自己的DirectX顯卡軟體和游戲工具。微軟的Direct X起初的戰略是為了推動DOS游戲開發者轉向Windows,從此之後它就被綁定在Windows下為PC游戲服務,所以它僅支持Windows。
斷發布新版的DirectX也推動了開發者轉向最新版的Windows,比如最新版的DirectX 10就帶來了不少Vista專屬游戲,從而推動了Vista的銷量,然而它並未達到預期的效果,因為Vista的速度阻礙了DirectX10游戲的市場,開發者只能將目標再次轉向XP。
OpenGL和Apple
OpenGL的前身是高端圖形工作站廠商SGI在80年代所開發的IRIS G,它在90年代初期成為了開源的標准。當時微軟在它的Windows 95中發布了Direct3D,將它作為OpenGL的競爭對手。而在90年代末,微軟曾經和SGI進行了Fahrenheit項目的開發,試圖將兩者結合起來,但是沒有成功。之後微軟繼續開發DirectX並與GPU廠商合作,留下OpenGL任其發展。
OpenGL之後幾乎逐漸消失,直到90年代末Apple放棄了自己的QuickDraw 3D,將OpenGL作為Mac OS X的官方3D庫。Apple的系統給OpenGL程序帶來了不少擁護者。之後OpenGL正式被Linux採用,現在主流的游戲平台,包括PSP,PS3 和Wii都支持該技術。
但是微軟的Xbox360例外,它採用了自己的DirectX 圖形庫,而將OpenGL排除在外。如今OpenGL對DirectX來說比以前更有競爭力了。而微軟計劃在Windows 7中的DirectX 11增加類似於OpenCL的技術,以實現GPGPU運算。但是Apple的OpenCL能更緊密地與OpenGL代碼協同工作,能帶來更廣泛的支持。 Apple還將OpenCL作為一個免費的,開源的標准,讓任何人都能參與到該平台中來。
OpenGL和OpenCL設計的相似性,使開發者更易於開發。比如在OpenCL下進行數據虛擬化計算,可以把相同的對象在OpenGL上進行圖形渲染。同時OpenGL下的圖形渲染可以在OpenCL下進行處理和轉換。
OpenCL得到了GPU廠商NVIDIA和AMD的支持,同時支持Apple,SONY,任天堂的平台,還支持Linux和Windows,而且任何公司的開發者都可以參與到該技術的發展中來。