-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Python 并行編程手冊

( 簡體 字)
作者:張龍,宋秉金類別:1. -> 程式設計 -> Python
譯者:
出版社:電子工業出版社Python 并行編程手冊 3dWoo書號: 48886
詢問書籍請說出此書號!

缺書
NT售價: 295

出版日:4/1/2018
頁數:244
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121337536
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯者序
今日之時代是并行編程與多核的時代,硬件成本越來越低,如何充分利用硬件所提供的各種資源是每一個軟件開發者需要深入思考的問題。在并行編程的浪潮下,每一個有追求的軟件開發者都應該擁抱這種變化,轉換編程思維,使程序能夠在多核及并行的環境下高效運行。
本書是一本專門介紹并行編程的圖書。通過對硬件與軟件的剖析,總結出了影響并行編程的多種因素,并通過大量的理論與實踐來分析如何實現并行編程,以及如何更好地利用硬件資源來提升程序并行運行的效率。
值得一提的是,本書以 Python語言作為范本對并行編程進行了深入的講解。 Python是一門簡潔且優雅的語言,目前的發展勢頭非常迅猛,在很多領域都能見到它的身影。以 Python語言作為示范語言來講解并行編程是非常恰當的。
本書首先對 Python編程語言與并行編程理論進行了較為詳盡的講解,然后介紹了基于線程與基于進程的并行編程方式。通過對這兩種方式進行介紹,讀者可以迅速進入并行編程領域,掌握并行編程的一般方法與技巧,同時還會對 Python中涉及線程與進程的模塊有所了解,在后半部分,本書對異步編程與分布式 Python以及如何使用 Python進行 GPU編程進行了深入的講解,這些內容將會幫助讀者實現從了解并行編程到深入掌握并行編程的蛻變。
值得一提的是,全書在理論講解過程中輔以大量可運行的代碼示例。這些示例非常好地演示了所講理論的實際運用,讀者可以通過這些示例加深對并行編程相關理論的理解與認識,也可以對這些示例稍加修改應用到實際的項目開發過程當中。
并行編程是一個較為復雜的技術領域,常常令很多開發者望而卻步。不過,本書的出現將會改變這一局面。通過對本書的學習,讀者將會快速且準確地建立起對并行編程的認知,并進一步加強對并行編程的理解;此外,讀者還可以通過閱讀本書,掌握用 Python實現并行編程的各種方式與技巧,并形成良好的并行編程思維方式。
全書由張龍與宋秉金翻譯完成,其中張龍翻譯了第 1~3章的內容,宋秉金翻譯了第 4~6章的內容。在圖書翻譯過程中,得到了電子工業出版社計算機出版分社的許艷、張春雨二位老師的大力協助,在此向二位老師表示深深的感謝。二位老師在專業素養與團隊協調方面展現出了極高的專業性,確保了本書的翻譯工作能夠順利完成。每次與二位老師溝通都非常順暢,同時進一步確保了譯稿的質量。
雖已盡心盡力,奈何技術與文字水平有限;雖已校對多次,但依然不敢保證全書沒有任何錯誤。最后,衷心期望本書能給希望系統學習并行編程的讀者帶來切實的幫助,幫助大家準確建立起并行編程的思維方式,并能應用到實際的項目開發當中。
張龍 2018年 2月 8日于北京

關于作者
Giancarlo Zaccone擁有超過 10年的管理研發項目的經驗,涉及科學與工業這兩個領域。他曾以研究員身份就職于國家研究委員會( CNR),主要從事一些并行科學計算與科學可視化項目。
他目前作為一名軟件工程師就職于一家咨詢公司,主要負責開發和維護一些面向太空和防御應用的軟件系統。
Giancarlo擁有那不勒斯費德里科二世大學的物理學碩士學位,并且獲得了羅馬大學科學計算專業的第二研究生學位。
關于審校者
Aditya Avinash是一名研究生,專注在計算機圖形學與 GPU上。他感興趣的領域有編譯器、驅動程序、基于物理學的渲染以及實時渲染等。他目前正在為 MESA(Linux的開源圖形驅動棧)貢獻力量,主要負責實現 AMD后端的 OpenGL擴展。這是他真正感興趣的地方。他還喜歡編寫編譯器,將高層次抽象代碼轉換為 GPU代碼。他開發了 Urutu,它可以使用 Python賦予 GPU線程級的并行能力。出于這一點, NVIDIA資助了他一對 Tesla K40 GPU。目前,他致力于 RockChuck的開發工作,負責根據不同后端將 Python代碼(使用數據并行抽象編寫)轉換為 GPU/CPU代碼。這是他聽取了大量 Python開發者希望實現針對 Python與 GPU的數據并行抽象的建議而啟動的一個項目。
Aditya擁有計算機工程背景,設計了硬件與軟件來適應某些應用( ASIC)。基于這一點,他獲得了關于如何使用 FPGA與 HDL的經驗。此外,他主要使用 Python與 C++編寫代碼。在 C++中,他使用過 OpenGL、CUDA、OpenCL以及其他多核編程 API。由于他還是一名學生,因此他的大多數工作并不隸屬于任何機構或個人。
Ravi Chityala是 Elekta Inc的一名高級工程師。他在圖像處理與科學計算領域擁有超過 12年的經驗。他還是加利福尼亞大學的兼職講師,負責講授 Python高級編程。一開始他將 Python當作腳本工具來使用,并且喜歡上了這門簡單、強大、富有表述力的語言。他現在使用 Python進行 Web開發、科學原型制造與計算,并將其作為膠水來自動化這個過程。他將自己在圖像處理上的經驗與對 Python的熱愛結合起來,與他人合著了圖書 Image Acquisition and Processing using Python,該書由 CRC出版社出版。
Mike Galloy是一名軟件開發者,他專注于高性能計算與科學編程中的可視化。他在工作中主要使用 IDL,不過偶爾也會使用 C、CUDA與 Python。他目前在位于茂納羅亞太陽天文臺的國家大氣研究中心( NCAR)工作。在這之前,他供職于 Tech-X公司,是 GPULib的主力開發者, GPULib是一個針對 GPU加速計算的 IDL綁定庫。他是開源項目 IDLdoc、mgunit與 rIDL的創建者與主力開發者,同時也是圖書 Modern IDL的作者。
Ludovic Gasc是 Eyepea and ALLOcloud 公司的高級軟件開發者與工程師,該公司是歐洲知名的開源 VoIP與統一通信公司。
前言
計算機科學的研究不僅應該涵蓋計算處理所基于的原則,還應該反映出這些領域當前的知識狀態。時至今日,技術的發展要求來自計算機科學所有分支領域的專家通曉軟件與硬件,它們之間的交互是理解計算處理基本原理的關鍵所在。
出于這個原因,本書特別關注硬件架構與軟件之間的關系。
之前,程序員可以借助于硬件設計、編譯器與芯片讓其軟件程序在不做任何修改的情況下,速度變得更快或效率更高。
這個時代已然結束。現在,如果希望程序運行速度能變得更快,那么它必須要成為一個并行程序。
雖然很多研究人員的目標是程序員不需要了解運行其程序的硬件所具有的并行性,不過要想實現這個夢想還需要很多年的時間。今天,大多數程序員還是需要透徹理解硬件與軟件之間的聯系,這樣程序才能在現代計算機架構上高效運行。
為了介紹并行編程的概念,我們使用了 Python編程語言。 Python很有趣,且易于使用,其流行度在近幾年穩步上升。 Python是由 Guido van Rossum在 10多年前開發出來的, Python語法的簡潔性與易于使用的特性很大程度上來源于 ABC,這是一門于 20世紀 80年代開發出來的教學語言。
除了這個具體的上下文外,Python還被用于解決實際的問題,它從一些典型的編程語言中借鑒了很多特性,比如說 C ++、Java與 Scheme等。這是其最卓越的特性之一,使得它廣受專業軟件開發者、科學研究產業以及計算機科學教育者的青睞。之所以有這么多人喜歡 Python,一個原因是它在實踐與概念之間提供了最佳的平衡。 Python是一門解釋型語言,因此無須陷入
編譯與鏈接的泥潭中就可以立刻動手做事情。 Python還提供了廣泛的軟件庫,可用在從 Web開發、圖形學到并行計算的各種任務中。這種側重于實踐的特性非常吸引廣大讀者,可以讓大家運行本書所介紹的重要項目。
本書提供了大量的示例,這些示例的靈感來源于很多場景,可以用它們解決實際問題。本書介紹了并行架構的軟件設計原則,并確保程序清晰可讀,避免使用一些復雜技術,都是一些簡單且直接的示例。每個主題都以一個完整、可運行的 Python程序的一個片段來闡述,后面跟著的是程序的輸出結果。
書中各章節采用模塊化的方式組織,可以從最簡單的討論跳到高級的主題,這么做也適合于那些只想學習一些特定主題的讀者。
我希望本書這樣的結構與內容安排能夠幫助讀者更好地理解和掌握并行編程技術。
本書主要內容
第 1章概覽了并行編程架構與編程模型。本章介紹了 Python編程語言、語言的特性、其易于使用和學習的特點、可擴展性以及豐富的軟件庫與應用。此外,本章還介紹了如何在應用以及并行計算中用好 Python這個工具。
第 2章介紹了如何通過 Python線程模塊來實現線程并行。通過完整的編程示例,讀者將學習到如何同步和操縱線程來實現多線程應用。
第 3章介紹了基于進程的用于并行化程序的方式。本章通過完整的示例展示了如何使用 Python多線程模塊。此外,本章還介紹了如何通過進程來實現通信,借助 Python的 mpi4py模塊使用消息傳遞的并行編程范式。
第 4章介紹了并發編程的異步模式。在某些方面,它要比基于線程的方式簡單一些,因為它提供了單指令流,任務會明確放棄控制而非武斷地掛起。本章介紹了如何通過 Python asyncio模塊將每個任務組織為一系列更小的步驟,并在異步模式下執行。
第 5章介紹了分布式計算。它指的是從邏輯上(甚至可能是地理位置上分布的)聚合幾個計算單元,并以一種透明且一致的方式協同運行單個計算任務的過程。本章將會介紹 Python所提供的,使用面向對象、 Celery、SCOOP、遠程過程調用的架構實現解決方案,比如,Pyro4與 RPyC。本章也介紹了其他不同的方式,如 PyCSP、Disco,后者是 Python版本的 MapReduce算法。
第 6章介紹了現代圖形處理單元( GPU),它使數值計算的性能有了突破性提升,代價則是編程復雜度的增加。實際上, GPU編程模型要求程序員手工管理 CPU與 GPU之間的數據傳輸。本章將會通過程序示例與用例介紹如何使用 GPU卡所提供的計算能力,其中使用了強大的 Python模塊: PyCUDA、NumbaPro與 PyOpenlCL。

閱讀前的準備
本書所有示例都已經在 Windows 7的 32位機器上進行過測試。此外,使用 Linux環境將會對學習大有裨益。
運行示例所需的 Python版本是:
. Python 3.3(前 5章)

. Python 2.7(只有第 6章需要)


需要使用到如下模塊(都是可以自由下載的):
. mpich-3.1.4

. pip 6.1.1

. mpi4py1.3.1

. asyncio 3.4.3

. Celery 3.1.18

. Numpy 1.9.2


. Flower 0.8.32(可選)

. SCOOP 0.7.2

. Pyro 4.4.36

. PyCSP 0.9.0

. DISCO 0.5.2

. RPyC 3.3.0

. PyCUDA 2015.1.2

. CUDA Toolkit 4.2.9(最低為此版本)

. NVIDIA GPU SDK 4.2.9(最低為此版本)

. NVIDIA GPU驅動

. Microsoft Visual Studio 2008 C++ Express Edition(最低為此版本)

. Anaconda Python Distribution

. NumbaPro編譯器

. PyOpenCL 2015.1

. Win32 OpenCL Driver 15.1(最低為此版本)



本書面向的讀者
本書是寫給那些想要使用并行編程技術來編寫強大且高效代碼的開發者的。閱讀完本書后,讀者將掌握并行計算的基礎知識與高級特性。 Python編程語言易于學習,即便不是專家也能夠輕松理解本書所介紹的主題。

本書結構
本書包含如下組成部分。
準備工作
這部分介紹了攻略的主題,描述了如何為該攻略搭建好軟件或是進行一些設置。
具體操作
這部分介紹了實現攻略所需要的步驟。
實例精解
這部分通常會對“具體操作”部分的內容進行解釋和說明。
知識擴展
這部分包含了關于攻略的一些額外信息,目的在于使讀者更加深入地理解攻略的內容。
參考
這部分包含一些關于攻略的參考信息。


約定
在本書中,你會看到各種樣式的文本,用于區分不同類型的信息。下面對這些文本樣式及其含義進行一些說明。
文本中的代碼、數據庫表名、目錄名、文件名、文件擴展、路徑名、虛擬的 URL、用戶輸入以及 Twitter handle會這樣表示“要執行第一個示例,我們需要用到程序 helloPython-WithThreads.py.”。
代碼塊樣式如下所示:
print ("Hello Python Parallel Cookbook!!")
closeInput = raw_input("Press ENTER to exit")
print "Closing calledProcess"

希望讀者注意到代碼塊中的某一部分時,相關行或是代碼會加粗處理:
@asyncio.coroutine
def factorial(number):

do Something
@asyncio.coroutine
任何命令行輸入或是輸出的樣式如下所示:
C:>mpiexec -n 4 python virtualTopology.py

警告或是重要的說明位于框中。
提示與技巧位于這個圖標后。
內容簡介:

若想充分利用所有的計算資源來構建高效的軟件系統,并行編程技術是不可或缺的一項技能。本書以Python為藍本,對并行編程領域的各項技術與知識進行了廣泛且深入的講解。通過對本書的學習,讀者將能夠快速且準確地掌握并行編程方方面面的技能,從而應用在自己的項目開發中,提升系統運行效率。本書共分為6章,從原理到實踐系統化地對并行編程技術進行了層層剖析,并通過大量可運行的實例演示了每一個知識點的具體運用方式,是提升并行編程技能的一本不可多得的好書。相信本書的出版將會填補Python在并行領域應用的一大空白,能夠幫助想要從事并行編程與并行計算的讀者提升實踐能力,并將這一能力應用到實際的項目開發中。

目錄:

1 并行計算與Python起步...1

介紹 .....1
并行計算內存架構 ....2
內存組織 ...5
并行編程模型 ......10
如何設計并行程序 ....12
如何評估并行程序的性能 ....14
Python簡介 .16
并行世界中的Python ..20
進程與線程介紹 ....21
開始在Python中使用進程 ....21
開始在Python中使用線程 ....23

2 基于線程的并行. .27

介紹 .....27
使用Python的線程模塊 28
如何定義線程 ......28
如何確定當前的線程 ..30
如何在子類中使用線程 32
使用Lock與RLock實現線程同步 .......34
使用RLock實現線程同步 .....38
使用信號量實現線程同步 ....40
使用條件實現線程同步 44
使用事件實現線程同步 47
使用with語句 ......51
使用隊列實現線程通信 53
評估多線程應用的性能 57

3 基于進程的并行63

介紹 .....64
如何生成進程 ......64
如何對進程命名 ....66
如何在后臺運行進程 ..68
如何殺死進程 ......69
如何在子類中使用進程 70
如何在進程間交換對象 72
如何同步進程 ......78
如何管理進程間狀態 ..81
如何使用進程池 ....82
使用mpi4py模塊 .....84
點對點通信 .87
避免死鎖問題 ......91
使用廣播實現聚合通信 94
使用scatter實現聚合通信 .....96
使用gather實現聚合通信 ....99
使用Alltoall實現聚合通信 ...101
匯聚操作 .103
如何優化通信 ......105

4 異步編程. ....111

介紹 ... 111
使用 Python的 concurrent.futures 模塊 ... 112
使用Asyncio實現事件循環管理 ....... 116
使用Asyncio處理協程 120
使用Asyncio管理任務 125
使用Asyncio和Futures 128

5 分布式Python133

介紹 ...133
使用 Celery 分發任務 .134
如何使用 Celery 創建任務 ...136
使用 SCOOP進行科學計算 ...139
使用 SCOOP處理映射函數 ...143
使用 Pyro4 遠程調用方法 ....147
使用 Pyro4 鏈接對象 ..150
使用 Pyro4 開發一個客戶端-服務器應用..156
使用 PyCSP實現順序進程通信 .......162
在Disco中使用 MapReduce ..167
使用 RPyC 調用遠程過程 ....172

6 使用Python進行GPU編程. .......175

介紹 ...175
使用 PyCUDA模塊 ..177
如何構建一個 PyCUDA應用 ..181
通過矩陣操作理解 PyCUDA內存模型 ...186
使用 GPUArray 調用內核 ....192
使用 PyCUDA對逐元素表達式求值 .....194
使用 PyCUDA進行 MapReduce 操作 ....198
使用 NumbaPro 進行GPU編程 .......201
通過 NumbaPro 使用 GPU 加速的庫 ...206
使用 PyOpenCL模塊 .. 211
如何構建一個 PyOpenCL應用 .......214
使用PyOpenCL對逐元素表達式求值 .....218
使用 PyOpenCL測試 GPU 應用 .......221
序: