基於 CUDA 的 GPU 並行程序開發指南 (GPU Parallel Program Development Using CUDA)

[美]托爾加·索亞塔(Tolga Soyata) 著

買這商品的人也買了...

商品描述

本書旨在幫助讀者瞭解與基於CUDA的GPU並行編程技術有關的基本概念,並掌握使用C語言進行GPU高性能編程的相關技巧。本書共分為三部分,第一部分通過CPU多線程編程解釋了並行計算,使得沒有太多並行計算基礎的讀者也能毫無阻礙地入門CUDA;第二部分重點介紹了基於CUDA的GPU大規模並行程序的開發與實現,並通過大量的性能分析幫助讀者理解如何開發一個好的GPU並行程序以及GPU架構對程序性能的影響;第三部分介紹了一些常用的CUDA庫、OpenCL編程語言、其他GPU編程語言和API以及深度學習庫cuDNN。
本書內容翔實、實例豐富,可作為高等院校相關專業高年級本科生和研究生課程的教材,也可作為電腦相關技術人員的參考書。

本書詳細介紹GPU編程方法,展示了不同的GPU系列之間的區別。這樣的講授方式能使讀者更好地應對下一代或未來的GPU系列。本書重點關註基礎性概念,同時也關註與平臺相關的概念。提供平臺相關的內容與通用的GPU概念一樣有價值。
本書分為三個部分,第一部分利用CPU的多線程概念介紹了並行性的基礎知識,通過一些簡單的代碼示例展示瞭如何將一個大任務分成若乾並行的子任務,然後將它們映射到CPU線程。對於同一個任務,嘗試了多種不同的並行實現方法,並針對核心和內存操作分析了這些方法的優缺點。
第二部分介紹了GPU的大規模並行性。在多個Nvidia GPU平臺上對相同的程序進行了並行化實現,並分析了它們的性能。由於CPU和GPU的核心與內存結構不同,運行結果也顯示出了很多有趣的差異。最終目標是希望程序員既能掌握有益的思想,也能瞭解那些不好的做法,這樣在自己開發的程序中能採用有用的策略,同時避免犯錯。
第三部分為想要拓展知識的讀者提供了建議。該部分簡要介紹了一些常用的CUDA庫(例如cuBLAS、cuFFT、NPP和Thrust),OpenCL編程語言,其他GPU編程語言和API(如Python、OpenCV、OpenGL、Swift與Metal),以及深度學習庫cuDNN。

作者簡介

唐傑博士,南京大學計算機科學與技術系副教授,主要研究高性能計算與並行處理技術,主持和參與國家科技重大專項、國家自然科學基金等十餘項課題,在國內外學術會議和期刊上發表了50多篇論文,還參與編寫了多部教材。

目錄大綱

譯者序
前言
關於作者
第一部分 理解CPU的並行性
第1章 CPU並行編程概述
1.1 並行編程的演化
1.2 核心越多,並行性越高
1.3 核心與線程
1.3.1 並行化更多的是線程還是核心
1.3.2 核心資源共享的影響
1.3.3 內存資源共享的影響
1.4 第一個串行程序
1.4.1 理解數據傳輸速度
1.4.2 imflip.c中的main()函數
1.4.3 垂直翻轉行:FlipImageV()
1.4.4 水平翻轉列:FlipImageH()
1.5 程序的編輯、編譯、運行
1.5.1 選擇編輯器和編譯器
1.5.2 在Windows 7、8、10平臺上開發
1.5.3 在Mac平臺上開發
1.5.4 在Unix平臺上開發
1.6 Unix速成
1.6.1 與目錄相關的Unix命令
1.6.2 與文件相關的Unix命令
1.7 調試程序
1.7.1 gdb
1.7.2 古典調試方法
1.7.3 valgrind
1.8 第一個串行程序的性能
1.8.1 可以估計執行時間嗎
1.8.2 代碼執行時OS在做什麽
1.8.3 如何並行化
1.8.4 關於資源的思考
第2章 開發第一個CPU並行程序
2.1 第一個並行程序
2.1.1 imflipP.c中的main()函數
2.1.2 運行時間
2.1.3 imflipP.c中main()函數代碼的劃分
……
第3章 改進第一個CPU並行程序
第4章 理解核心和內存
第5章 線程管理和同步
第二部分 基於CUDA的GPU編程
第6章 GPU並行性和CUDA概述
第7章 CUDA主機/設備編程模型
第8章 理解GPU的硬件架構
第9章 理解GPU核心
第10章 理解GPU內存
第11章 CUDA流
第三部分 拓展知識
第12章 CUDA庫
第13章 OpenCL簡介
第14章 其他GPU編程語言
第15章 深度學習中的CUDA
參考文獻
術語表