●前言
第1章並行計算和Python入門1
1.1為什麼需要並行計算?1
1.2費林分類法2
1.2.1單指令流單數據流(SISD)2
1.2.2多指令流單數據流(MISD)3
1.2.3單指令流多數據流(SIMD)4
1.2.4多指令流多數據流(MIMD)4
1.3內存組織5
1.3.1共享內存6
1.3.2分布式內存7
1.3.3大規模並行處理(MPP)8
1.3.4工作站集群8
1.3.5異構體繫結構9
1.4並行編程模型9
1.4.1共享內存模型10
1.4.2多線程模型10
1.4.3消息傳遞模型10
1.4.4數據並行模型11
1.5並行程序性能評價13
1.5.1加速比14
1.5.2效率14
1.5.3擴縮性15
1.5.4阿姆達爾定律15
1.5.5古斯塔夫森定律15
1.6Python介紹16
1.6.1幫助函數16
1.6.2語法18
1.6.3注釋19
1.6.4賦值19
1.6.5數據類型19
1.6.6字符串21
1.6.7流控制21
1.6.8函數23
1.6.9類24
1.6.10異常25
1.6.11導入庫26
1.6.12管理文件26
1.6.13列表推導27
1.6.14運行Python腳本28
1.6.15使用pip安裝Python包28
1.7Python並行編程介紹29
第2章基於線程的並行33
2.1什麼是線程?34
2.2Pythonthreading模塊35
2.3定義一個線程35
2.3.1準備工作35
2.3.2實現過程36
2.3.3工作原理36
2.3.4相關內容37
2.4確定當前線程37
2.4.1準備工作37
2.4.2實現過程37
2.4.3工作原理38
2.5定義一個線程子類39
2.5.1準備工作39
2.5.2實現過程39
2.5.3工作原理41
2.5.4相關內容42
2.6使用鎖的線程同步42
2.6.1準備工作43
2.6.2實現過程43
2.6.3工作原理45
2.6.4相關內容46
2.7使用RLock的線程同步47
2.7.1準備工作47
2.7.2實現過程48
2.7.3工作原理49
2.7.4相關內容50
2.8使用信號量的線程同步51
2.8.1準備工作51
2.8.2實現過程51
2.8.3工作原理53
2.8.4相關內容54
2.9使用條件的線程同步54
2.9.1準備工作54
2.9.2實現過程54
2.9.3工作原理56
2.9.4相關內容58
2.10使用事件的線程同步58
2.10.1準備工作59
2.10.2實現過程59
2.10.3工作原理61
2.11使用屏障的線程同步62
2.11.1準備工作62
2.11.2實現過程62
2.11.3工作原理63
2.12使用隊列的線程通信63
2.12.1準備工作64
2.12.2實現過程64
2.12.3工作原理65
2.12.4相關內容66
第3章基於進程的並行68
3.1理解Python的multiprocessing模塊68
3.2創建進程69
3.2.1準備工作69
3.2.2實現過程69
3.2.3工作原理70
3.2.4相關內容71
3.2.5參考資料71
3.3命名進程72
3.3.1準備工作72
3.3.2實現過程72
3.3.3工作原理73
3.3.4相關內容73
3.3.5參考資料73
3.4在後臺運行進程73
3.4.1準備工作74
3.4.2實現過程74
3.4.3工作原理75
3.4.4參考資料76
3.5殺死進程76
3.5.1準備工作76
3.5.2實現過程76
3.5.3工作原理77
3.5.4參考資料78
3.6子類中定義進程78
3.6.1準備工作78
3.6.2實現過程78
3.6.3工作原理79
3.6.4相關內容80
3.6.5參考資料80
3.7使用隊列交換數據80
3.7.1準備工作80
3.7.2實現過程80
3.7.3工作原理82
3.7.4相關內容83
3.7.5參考資料84
3.8使用管道交換對像84
3.8.1準備工作84
3.8.2實現過程84
3.8.3工作原理86
3.8.4相關內容87
3.8.5參考資料87
3.9同步進程87
3.9.1準備工作87
3.9.2實現過程87
3.9.3工作原理89
3.9.4相關內容89
3.9.5參考資料89
3.10使用進程池90
3.10.1準備工作90
3.10.2實現過程91
3.10.3工作原理91
3.10.4相關內容92
3.10.5參考資料93
第4章消息傳遞94
4.1技術需求94
4.2理解MPI結構95
4.3使用mpi4pyPython模塊96
4.3.1實現過程96
4.3.2工作原理97
4.3.3相關內容98
4.3.4參考資料98
4.4實現點對點通信98
4.4.1實現過程99
4.4.2工作原理100
4.4.3相關內容101
4.4.4參考資料102
4.5避免死鎖問題102
4.5.1實現過程102
4.5.2工作原理103
4.5.3相關內容105
4.5.4參考資料106
4.6使用廣播的聚合通信106
4.6.1準備工作107
4.6.2實現過程107
4.6.3工作原理107
4.6.4相關內容109
4.6.5參考資料109
4.7使用scatter函數的聚合通信109
4.7.1實現過程109
4.7.2工作原理110
4.7.3相關內容111
4.7.4參考資料112
4.8使用gather函數的聚合通信112
4.8.1準備工作112
4.8.2實現過程112
4.8.3工作原理113
4.8.4相關內容113
4.8.5參考資料114
4.9使用Alltoall的聚合通信114
4.9.1實現過程114
4.9.2工作原理114
4.9.3相關內容115
4.9.4參考資料116
4.10歸約操作116
4.10.1準備工作116
4.10.2實現過程116
4.10.3工作原理117
4.10.4相關內容118
4.10.5參考資料119
4.11優化通信119
4.11.1實現過程119
4.11.2工作原理121
4.11.3相關內容123
4.11.4參考資料124
第5章異步編程125
5.1使用concurrent.futuresPython模塊125
5.1.1準備工作126
5.1.2實現過程126
5.1.3工作原理128
5.1.4相關內容130
5.1.5參考資料130
5.2使用asyncio管理事件循環130
5.2.1理解事件循環131
5.2.2實現過程132
5.2.3工作原理134
5.2.4相關內容135
5.2.5參考資料136
5.3使用asyncio處理協程136
5.3.1準備工作136
5.3.2實現過程137
5.3.3工作原理3_x005ff4139
5.3.4相關內容141
5.3.5參考資料141
5.4使用asyncio管理任務141
5.4.1實現過程142
5.4.2工作原理143
5.4.3相關內容145
5.4.4參考資料145
5.5處理asyncio和future145
5.5.1準備工作145
5.5.2實現過程146
5.5.3工作原理147
5.5.4相關內容148
5.5.5參考資料149
第6章分布式Python150
6.1分布式計算介紹150
6.2分布式應用的類型151
6.2.1客戶-服務器應用151
6.2.2多層應用153
6.3使用Pythonsocket模塊153
6.3.1準備工作154
6.3.2實現過程154
6.3.3工作原理156
6.3.4相關內容157
6.3.5參考資料159
6.4使用Celery的分布式任務管理160
6.4.1準備工作160
6.4.2實現過程161
6.4.3工作原理162
6.4.4相關內容164
6.4.5參考資料166
6.5使用Pyro4實現RMI167
6.5.1準備工作167
6.5.2實現過程167
6.5.3工作原理169
6.5.4相關內容170
6.5.5參考資料173
第7章雲計算174
7.1什麼是雲計算?174
7.2理解雲計算架構176
7.2.1服務模型176
7.2.2發布模型177
7.2.3雲計算平臺178
7.3用PythonAnywhere開發Web應用179
7.3.1準備工作179
7.3.2實現過程180
7.3.3工作原理185
7.3.4相關內容186
7.3.5參考資料187
7.4Docker化Python應用187
7.4.1準備工作188
7.4.2實現過程189
7.4.3工作原理190
7.4.4相關內容
7.4.5參考資料192
7.5無服務器計算介紹192
7.5.1準備工作193
7.5.2實現過程193
7.5.3工作原理196
7.5.4相關內容199
7.5.5參考資料200
第8章異構計算201
8.1理解異構計算201
8.2理解GPU架構202
8.3理解GPU編程203
8.3.1CUDA203
8.3.2OpenCL203
8.4處理PyCUDA204
8.4.1準備工作204
8.4.2實現過程204
8.4.3工作原理205
8.4.4相關內容205
8.4.5參考資料206
8.5使用PyCUDA的異構編程206
8.5.1實現過程207
8.5.2工作原理209
8.5.3相關內容211
8.5.4參考資料211
8.6使用實現內存管理211
8.6.1準備工作212
8.6.2實現過程
8.6.3工作原理215
8.6.4相關內容218
8.6.5參考資料218
8.7PyOpenCL介紹219
8.7.1準備工作219
8.7.2實現過程219
8.7.3工作原理221
8.7.4相關內容222
8.7.5參考資料223
8.8使用PyOpenCL構建應用223
8.8.1實現過程223
8.8.2工作原理226
8.8.3相關內容228
8.8.4參考資料228
8.9使用PyOpenC素級表達式229
8.9.1準備工作229
8.9.2實現過程229
8.9.3工作原理230
8.9.4相關內容232
8.9.5參考資料233
8.10評價PyOpenCL應用233
8.10.1準備工作233
8.10.2實現過程233
8.10.3工作原理235
8.10.4相關內容237
8.10.5參考資料238
8.11使用Numba的GPU編程238
8.11.1準備工作239
8.11.2實現過程241
8.11.3工作原理242
8.11.4相關內容243
8.11.5參考資料245
第9章Python調試和測試246
9.1什麼是調試?246
9.2什麼是軟件測試?247
9.3使用WinpdbReborn調試248
9.3.1準備工作248
9.3.2實現過程248
9.3.3工作原理252
9.3.4相關內容254
9.3.5參考資料255
9.4與pdb交互255
9.4.1準備工作255
9.4.2實現過程257
9.4.3工作原理258
9.4.4相關內容258
9.4.5參考資料259
9.5實現rpdb調試259
9.5.1準備工作259
9.5.2實現過程261
9.5.3工作原理263
9.5.4相關內容264
9.5.5參考資料265
9.6處理unittest265
9.6.1準備工作266
9.6.2實現過程266
9.6.3工作原理267
9.6.4相關內容269
9.6.5參考資料270
9.7使用nose測試應用270
9.7.1準備工作270
9.7.2實現過程271
9.7.3工作原理272
9.7.4相關內容272
9.7.5參考資料273