本書是第一本平行計算領域中,注意力完全集中在並行資料結構、演算法、軟體工具及資料科學中具體應用的書。書中的例子不僅有經典的“n 個樣本,p 個變數”的矩陣形式,還有時間序列、網路圖模型,以及各種其他的在資料科學中常見的結構。本書同時也討論了適用於多種硬體、多種程式設計語言的的套裝軟體。特點 關注資料科學中的應用,包括統計學、資料採擷和機器學習。 討論了資料科學中的常見資料結構,如網路圖模型。
通篇強調了普遍的原理,如避免降低並行程式速度的因素。 覆蓋了主流的計算平臺:多核、集群以及影像處理單元(GPU)。 解釋了 Thrust 包如何降低多核機器和GPU程式設計的難度,並使得同一份代碼能夠在不同的平臺上工作。在作者網站上提供了樣例代碼。
Matloff 博士出生于洛杉磯,在東洛杉磯和聖蓋博穀兩個地方長大。他在加州大學洛杉磯分校獲得了純粹數學的博士學位,學術研究方向為概率論和統計。他在電腦科學和統計學方向發表了大量論文,現在的研究方向是並行處理、統計計算和回歸方法。他也是Journal of Statistical Software 的編委之一。Matloff 教授曾是國際資訊處理聯合會11.3 工作組的成員,該組織是聯合國教科文組織(UNESCO)下設的一個資料庫軟體安全國際委員會。他也是加州大學大衛斯分校統計系的創始人之一,並參與了該校電腦科學系的建立。他在大衛斯分校被授予了傑出教學獎和傑出公眾服務獎。
第1章 R語言中的並行處理入門1
1.1 反復出現的主題:良好並行所具有的標準. . . . . . . . . . . . 1
1.2 關於機器. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2
1.3 反復出現的主題:不要把雞蛋放在一個籃子裡. . . . . . . . . . 3
1.4 擴展示例:相互網頁外鏈. . . . . . . . . . . . . . . . . . . . . 3
第2章 “我的程式為什麼這麼慢?”:速度的障礙15
2.1 速度的障礙. . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
2.2 性能和硬體結構. . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 記憶體的基礎知識. . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 網路基礎. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 20
2.5 延遲和頻寬. . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
2.6 執行緒調度. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 26
2.7 多少個進程/執行緒? . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.8 示例:相互外鏈問題. . . . . . . . . . . . . . . . . . . . . . . . 27
2.9 “大O”標記法. . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.10 數據序列化. . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
2.11 “易並行”的應用. . . . . . . . . . . . . . . . . . . . . . . . . 29
第3章 並行迴圈調度的準則31
3.1 迴圈調度的通用記法. . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 snow 中的分塊. . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 關於代碼複雜度. . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4 示例:所有可能回歸. . . . . . . . . . . . . . . . . . . . . . . . 36
3.5 partools 包. . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
3.6 示例:所有可能回歸,改進版本. . . . . . . . . . . . . . . . . . 48
3.7 引入另一個工具:multicore . . . . . . . . . . . . . . . . . . . . 54
3.8 塊大小的問題. . . . . . . . . . . . . . . . . . . . . . . . . . . .61
3.9 示例:並行距離計算. . . . . . . . . . . . . . . . . . . . . . . . 62
3.10 foreach 包. . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
3.11 跨度. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 71
3.12 另一種調度方案:隨機任務置換. . . . . . . . . . . . . . . . . . 71
3.13 調試snow 和multicore 的代碼. . . . . . . . . . . . . . . . . . 74
第4章 共用記憶體範式:基於R 的簡單介紹76
第5章 共用記憶體範式:C 語言層面112
第6章 共用記憶體範式:GPU 157
第7章 Thrust 與Rth 176
第8章 消息傳遞範式186
第9章 MapReduce 計算204
第10章 並行排序和歸併214
第11章 並行首碼掃描227
第12章 並行矩陣運算244
第13章 原生統計方法:子集方法266
附錄A 回顧矩陣代數275