wordpress Ubuntu mysql java shell centos 程序员 apache nginx google Windows 云计算 编程 Android Firefox 开源 php Python linux 微软

《OpenACC並行編程實戰》—— 1.2 並行編程語言

20世紀70年代,貝爾實驗室發明了UNIX,並於20世紀80年代向美國各大高校分發V7版的源碼以做研究。加利福尼亞大學伯克利分校在V7的基礎上開發了BSD UNIX。後來很多商業廠家意識到UNIX的價值也紛紛以貝爾實驗室的System V或BSD為基礎來開發自己的UNIX,較著名的有Sun OS、AIX、VMS。隨著操作系統的增多,應用程序的適配性工作越來越繁重。為了提高UNIX環境下應用程序的可遷移性,電氣和電子工程師協會(Institute of Electrical and Electronics Engineers,IEEE)設計了POSIX標準。然而,POSIX並不局限於UNIX,許多其他的操作系統也支持POSIX標準。POSIX.1已經被國際標準化組織所接受,POSIX已發展成為一個非常龐大的標準族,一直處在發展之中。
POSIX線程(POSIX threads,Pthreads),是線程的POSIX標準。該標準定義了創建和操縱線程的一整套接口。在類UNIX操作系統(UNIX、Linux、Mac OS X等)中,都使用Pthreads作為操作系統的線程。Pthreads用來開發與操作系統緊密相關的應用程序,管理粒度很細,例如線程的創建與銷毀、線程鎖、線程屬性、線程優先級、線程間通信等瑣碎操作均需要程序員安排。對科學與工程類計算程序來說,程序員的精力應集中在業務模型和代碼算法上,不應浪費在底層代碼細節上。
雖然Pthreads不適合編寫高性能計算程序,但它多線程並發的設計理念啟發了其他並行語言。

(2)OpenMP

OpenMP是由一些大型IT廠商和一些學術機構組成的非盈利組織,官網是www.openmp.org。永久成員包括AMD、CAPS-Entreprise、Convey Computer、Cray、Fujitsu、HP、IBM、Intel、NEC、NVIDIA、Oracle Corporation、Red Hat、ST Microelectronics、Texas Instruments;正式成員是對OpenMP標準感興趣,但不生產銷售相關產品的組織,例如ANL、ASC/LLNL、BSC、cOMPunity、EPCC、LANL、NASA、ORNL、RWTH Aachen University、SNL-Sandia National Lab、Texas Advanced Computing Center、University of Houston。
計算熱點都是在循環上,OpenMP的並行化思路是將循環的叠代步分攤到多個線程上,每個線程只承擔一部分計算任務,循環運行的墻上時間(從開始到結束的自然流逝時間)自然也就減少了。分割方法是在循環上面添加一些預處理標記(圖1.18),編譯器識別到這些標記以後,將關聯的循環翻譯成並行代碼,然後再與剩余的串行代碼合並起來編譯、鏈接成可執行程序。

<img src="https://yqfile.alicdn.com/f8fe331811903d5ff604245a30fe84de1de14712.png" width="" height="">

使用OpenMP編譯並行程序時,程序員需要先保證串行代碼正確,找出熱點循環,然後在循環上添加OpenMP預處理標記。打開編譯器的openmp選項可以編譯成並行版本,否則編譯器將忽略預處理器標記,仍然編譯成串行版本。既不破壞原有代碼,開發速度又快,省時省力。
(3)CUDA

CUDA(Compute Unified Device Architecture)是英偉達公司設計的GPU並行編程語言,一經推出就引發了GPU通用計算研究熱潮。CUDA是閉源的,只能運行在英偉達的產品上。CUDA C/C++是對C/C++語言的擴展,添加了一些數據類型、庫函數,並定義一種新的函數調用形式。CUDA起初支持C和少量C++特性,後來逐漸提高對C++的支持度。從CUDA 3.0開始與PGI合作支持Fortran。CUDA語言還可以細分為CUDA C/C++、CUDA Fortran,本書成稿時的CUDA C/C++最新版本是7.5,8.0版本即將發布。CUDA Fortran沒有版本號,只是隨著PGI編譯器的升級而增加新特性。1.3節會介紹CUDA C/C++的編程模型和一些示例代碼,此處不展開介紹。

(4)OpenCL

OpenCL(Open Computing Language,開放計算語言)是一個面向異構系統並行編程的免費標準,支持多種多樣的設備,包括但不限於CPU、GPU、數字信號處理器(DSP)。OpenCL的優勢是一套代碼多處運行,只要為新的設備重新編譯代碼就可以運行,移植方便。
OpenCL由蘋果公司首先提出,隨後Khronos Group成立相關工作組,以蘋果草案為基礎,聯合業界各大企業共同完成了標準制定工作,工作組的成員來自各行各業,且都是各自領域的領導者。

延伸阅读

    评论