出版時間:2012-12-1 出版社:機械工業(yè)出版社華章公司 作者:Aaftab Munshi,Benedict R. Gaster,Timothy G. Mattson,James Fung,Dan Ginsburg 頁數(shù):404 譯者:蘇金國,李璜,楊健康
Tag標簽:無
內(nèi)容概要
OpenCL領域公認的權威著作,由OpenCL核心設計人員親自執(zhí)筆,不僅全
面而深刻地解讀了OpenCL規(guī)范和編程模型,而且通過大量案例和代碼演示了
基于OpenCL編寫并行程序和實現(xiàn)各種并行算法的原理、方法、流程和最佳實
踐,以及如何對OpenCL進行性能優(yōu)化,如何對硬件進行探測和調(diào)整。 蒙施、Benedict R.Gaster、Timothy
G.Mattson、James Fung、Dan Giburg所著的《OpenCL編程指南》分為兩大部分:第一部分(1~13章)
,從介紹OpenCL的核心思想和編寫OpenCL程序的基礎知識開始,對枯燥的
OpenCL規(guī)范進行了深刻而系統(tǒng)的解讀,旨在幫助讀者全面、正確地理解
OpenCL規(guī)范及其編程模型;第二部分(14~22章),提供了一系列經(jīng)典的案
例,如圖像直方圖、Sobel邊界檢測過濾器、并行實現(xiàn)Dijkstra單源最短路 徑圖算法、Bullet Physics
SDK中的布模擬、用快速傅里葉變換模擬海洋、 光流、OpenCL與PyOpenCL結合使用,使用OpenCL完成矩陣相乘與稀疏矩陣矢
量乘法等,目的是讓讀者通過案例熟練掌握編寫復雜并行程序的方法和技巧
?!禣penCL編程指南》的附錄收錄了OpenCL規(guī)范定義的大量函數(shù)、命名常量 和類型,可供程序員開發(fā)時查閱。
作者簡介
作者:(美國)蒙施(Aaftab Munshi) 譯者:蘇金國 Aaftab Munshi,OpenCL核心設計小組的靈魂人物之一,同時他也是OpenCL、OpenGL ES 1.1、OpenGL ES 2.0規(guī)范的編輯,與DanGinsburg和Dave Shreiner合著了《OpenGL ES 2.0 Programming Guide》。目前他任職于Apple公司。
書籍目錄
譯者序
序
前言
致謝
第一部分 OpenCL 1.1語言與API
第1章 OpenCL介紹
1.1 什么是OpenCL,或者為什么需要這本書
1.2 多核的未來:異構平臺
1.3 多核世界中的軟件
1.4 OpenCL的概念基礎
1.4.1 平臺模型
1.4.2 執(zhí)行模型
1.4.3 內(nèi)存模型
1.4.4 編程模型
1.5 OpenCL與圖形
1.6 OpenCL的內(nèi)容
1.6.1 平臺API
1.6.2 運行時API
1.6.3 內(nèi)核編程語言
1.6.4 OpenCL小結
1.7 嵌入式簡檔
1.8 學習OpenCL
第2章 HelloWorld:一個OpenCL例子
第3章 平臺、上下文和設備
第4章 OpenCL C編程
第5章 OpenCL C內(nèi)置函數(shù)
第6章 程序與內(nèi)核
第7章 緩沖區(qū)和子緩沖區(qū)
第8章 圖像和采樣器
第9章 事件
第10章 與OpenCL的互操作
第11章 與Direct3D的互操作
第12章 C++包裝器API
第13章 OpenCL嵌入式簡檔
第二部分 OpenCL 1.1案例研究
第14章 圖像直方圖
第15章 Sobel邊界檢測過濾器
第16章 并行實現(xiàn)Dijkstra單源最短路徑圖算法
第17章 Bullet Physics SDK中的布模擬
第18章 用快速傅里葉變換模擬海洋
第19章 光流
第20章 用PyOpenCL使用OpenCL
第21章 使用OpenCL完成矩陣乘法
第22章 稀疏矩陣矢量乘法
附錄A OpenCL 1.1小結
章節(jié)摘錄
版權頁: 插圖: 再次說明,OpenCL并沒有在宿主機上規(guī)定內(nèi)存一致性模型。先從離宿主機最遠的內(nèi)存(私有內(nèi)存區(qū)域)開始考慮,逐步轉向宿主機。私有內(nèi)存對宿主機是不可見的。它只對相應的工作項可見。這個內(nèi)存采用順序編程中很熟悉的加載/存儲內(nèi)存模型。換句話說,對私有內(nèi)存的加載和存儲不能重新排序,即除了程序文本中定義的順序外,不能以其他順序出現(xiàn)。 對于局部內(nèi)存,可以保證一個工作組中一組工作項能夠看到的值在工作組同步點是一致的。例如,一個工作組柵欄(work—group barrier)要求在柵欄之前定義的所有加載和存儲必須先完成,工作組中這個柵欄之后的工作項才能繼續(xù)。換句話說,柵欄標記了一組工作項執(zhí)行中的某一點,在這一點可以保證內(nèi)存是一致的,在繼續(xù)執(zhí)行之前處于已知狀態(tài)。 由于局部內(nèi)存只是在一個工作組內(nèi)共享,所以這對于定義局部內(nèi)存區(qū)域的內(nèi)存一致性就足夠了。對于一個工作組中的工作項,在工作組柵欄,全局內(nèi)存也是一致的。不過,盡管這個內(nèi)存在工作組間共享,但無法強制執(zhí)行一個內(nèi)核的不同工作組之間全局內(nèi)存的一致性。 對于內(nèi)存對象,OpenCL定義了一個寬松一致性模型。換句話說,單個工作項在內(nèi)存中看到的值不能保證任何時刻在整個工作項集中都保持一致。在給定的時刻,對于不同的工作項,對OpenCL內(nèi)存對象的加載和存儲可能以不同的順序出現(xiàn)。這稱為寬松一致性(relaxed consistency)模型,因為它沒有我們期望的加載/存儲模型那么嚴格,即并發(fā)執(zhí)行要與串行執(zhí)行的順序完全匹配。 最后一步是定義相對于命令隊列中命令的內(nèi)存對象一致性。在這種情況下,我們使用了釋放一致性的一個修改版本。與一個內(nèi)核相關聯(lián)的所有工作項完成時,這個內(nèi)核釋放的內(nèi)存對象的相應加載和存儲完成后,內(nèi)核命令才能標志為完成。對于有序隊列,這足以定義內(nèi)核問的內(nèi)存一致性。對于亂序隊列,則有兩個選擇(稱為同步點)。第一個選擇是在特定的同步點(如命令隊列柵欄)強制一致性。第二個選擇是通過事件機制(將在后面介紹)顯式地管理一致性。這些選擇同樣用于強制宿主機和OpenCL設備之間的一致性,也就是說,內(nèi)存僅在命令隊列中的同步點是一致的。 1.4.4編程模型 OpenCL執(zhí)行模型定義了一個OpenCL應用如何映射到處理單元、內(nèi)存區(qū)域和宿主機。這是一個“以硬件為中心”的模型?,F(xiàn)在我們換個角度,介紹如何使用編程模型將并行算法映射到OpenCL。編程模型實際上就是程序員如何考慮他們的算法。因此,這些模型本質(zhì)上比執(zhí)行模型更為靈活。 OpenCL定義了兩種不同的編程模型:任務并行和數(shù)據(jù)并行??梢钥吹?,還可以考慮一種混合模型:包含數(shù)據(jù)并行的任務。程序員很有創(chuàng)造性,可以預期,過一段時間可能還會創(chuàng)建映射到OpenCL基本執(zhí)行模型的另外的編程模型。 數(shù)據(jù)并行編程模型 前面內(nèi)容描述了數(shù)據(jù)并行編程模型的基本思想(見圖1—4)。適合采用數(shù)據(jù)并行編程模型的問題都與數(shù)據(jù)結構有關,這些數(shù)據(jù)結構的元素可以并發(fā)更新?;旧希褪菍⒁粋€邏輯指令序列并發(fā)地應用到數(shù)據(jù)結構的元素上。并行算法的結構被設計為一個序列,即對問題領域中數(shù)據(jù)結構并發(fā)更新的序列。
編輯推薦
《OpenCL編程指南》為OpenCL世界帶來了福音?!禣penCL編程指南》出自資深程序員之手,正是程序員需要的實用指南。
名人推薦
“歡迎來到異構并行編程的新世界,憑借這本通俗易懂的權威指南,你將深入了解完整的OpenCL編程模型。” ——Pat Hanrahan,斯坦福大學教授
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載