本書由Intel的技術(shù)專家撰寫,系統(tǒng)地講解在IntelXeon處理器和IntelXeonPhi協(xié)處理器上進(jìn)行并行處理和編程的方法和技術(shù),展示了更好地利用Intel處理器或其他多核處理器的系統(tǒng)計(jì)算潛力的有效方法。全書包括大量來自多個行業(yè)和不同領(lǐng)域的并行編程例子。每章既詳細(xì)講述所采用的編程技術(shù),同時展示了其在IntelXeonPhi協(xié)處理器和多核處理器上的高性能結(jié)果。幾十個新的例子和案例顯示的“成功經(jīng)驗(yàn)”不但展現(xiàn)了這些強(qiáng)大系統(tǒng)的主要特征,而且展示出如何在這些異構(gòu)系統(tǒng)上保持并行化。
James Reinders,英特爾軟件總監(jiān),首席技術(shù)布道師。參與多個旨在加強(qiáng)并行編程在工業(yè)界應(yīng)用的工程研究和教育項(xiàng)目。他對多個項(xiàng)目做出了貢獻(xiàn),包括世界上首例Teraflop級超級計(jì)算機(jī)(ASCI Red)和世界上首例Teraflop級微處理器(Intel Xeon Phi協(xié)處理器)。
Jim Jeffers,英特爾MIC(集成眾核)架構(gòu)專家和首席工程師,對至強(qiáng)融核協(xié)處理器有著較為深入與全面的研究。
High Performance Parallelism Pearls:Multicore and Many-core Programming Approaches本書囊括了69位作者的Intel Xeon Phi協(xié)處理器并行編程經(jīng)驗(yàn),他們將處理器和協(xié)處理器的性能發(fā)揮得淋漓盡致。其中討論了并行編程中許多關(guān)鍵的挑戰(zhàn)和技術(shù),并給出了令人激動的成果。大多數(shù)章節(jié)展示如何良好地進(jìn)行擴(kuò)展和向量化,這將有利于在多核處理器和眾核Intel Xeon Phi協(xié)處理器上獲得更好的性能。其他章節(jié)揭示如何在提供了通用編程模型的系統(tǒng)下利用由Intel Xeon處理器和Intel Xeon Phi協(xié)處理器組成的新異構(gòu)系統(tǒng)。書中還提供了關(guān)于部署、管理、監(jiān)控與運(yùn)行這些新異構(gòu)系統(tǒng)和集群的專家建議。
來自61個內(nèi)核的靈感:編程新紀(jì)元對我們來說,比Intel Xeon Phi協(xié)處理器的成功更引人矚目的是Intel Xeon Phi協(xié)處理器對并行編程的激勵。這個協(xié)處理器開啟了編程的新篇章。而在多達(dá)61個內(nèi)核上的并行編程似乎遠(yuǎn)比在4個或者8個內(nèi)核上的并行編程更有吸引力。它激發(fā)了人們將并行編程技術(shù)首次應(yīng)用于一些應(yīng)用程序以及改進(jìn)已有的并行應(yīng)用程序的興趣。它激勵人們研究真正可擴(kuò)展的并行編程,而不僅僅是在只有少量并行(比如四核處理器上)時取得的尚可(有時甚至微。┑男阅芴岣摺
Intel Xeon Phi協(xié)處理器為并行化帶來了變革,為在其中探索的人們帶了巨大的機(jī)遇。在這個過程中,我們不需要新的編程模型、新的語言或者新的工具。本書提供的并行編程工作和思想,描述了如何將舊的技術(shù)應(yīng)用到新的異構(gòu)編程平臺上。這將幫助我們挖掘這一平臺的巨大潛力。
我們非常感謝各位作者。各章的作者致力于在這個令人鼓舞的強(qiáng)大設(shè)備上編程。工作之余,他們?yōu)槲覀冊斒鲎约旱墓ぷ鳎员闶刮覀儗W(xué)習(xí)他們的成功經(jīng)驗(yàn)。我們希望你能夠從中受益,并在這個并行計(jì)算的新時代獲得成功。
致謝本書的完成首先要感謝為此付出努力的軟件開發(fā)工程師們,他們在工作之余與我們分享經(jīng)驗(yàn)。本書濃縮了各位作者的成果。他們的名字列在其所寫章節(jié)的開頭,“作者簡介”中有關(guān)于他們的簡要介紹。我們要感謝所有作者堅(jiān)持不懈的努力與理解。
感謝我們共同的朋友Sverre Jarp在“推薦序”中分享他獨(dú)特的見解,感謝Joe Curley鼓勵我們完成這件幾乎不可能完成的事情。
James Reinders感謝妻子Susan Meredith,她的支持對于本書的完成至關(guān)重要。同時,James也感謝女兒Katie和兒子Andrew一直以來的大力支持。最后,James要感謝合著者和朋友Jim Jeffers,感謝他又一次成為完美搭檔。
Jim Jeffers感謝妻子Laura一如既往的支持和鼓勵。Jim感謝孩子(包括孩子們的配偶)Tim、Patrick、Colleen、Sarah、Jon,尤其是剛出生的孫女Hannah,他們無時無刻不在鼓舞著他。最后,Jim非常感謝合著者和朋友James Reinders,感謝他的專業(yè)技能和指導(dǎo),感謝他堅(jiān)定地恪守承諾使這本書從概念變成現(xiàn)實(shí)。
感謝Joe Curley、Bob Burroughs、Herb Hinstorff、Rob Farber和Nathan Schultz提供的支持、指導(dǎo)和反饋。
感謝整個Morgan Kaufmann團(tuán)隊(duì)的辛勤工作,包括與我們直接合作的三個人:Todd Green、Lindsay Lawrence和Priya Kumaraguruparan。
許多同事提供了信息、建議和想法。當(dāng)然,還有很多人直接或間接地提供了幫助,對此我們深表感激。感謝所有幫助過我們的人,并對我們忘記提到名字的所有人表示歉意。
感謝所有人。
——Jim JeffersJames ReindersIntel公司2014年11月
目 錄
High Performance Parallelism Pearls: Multicore and Many-core Programming Approaches
出版者的話
譯者序
推薦序
前 言
作者簡介
第1章 引言 1
1.1 學(xué)習(xí)成功經(jīng)驗(yàn) 1
1.2 代碼現(xiàn)代化 1
1.3 并發(fā)算法現(xiàn)代化 1
1.4 向量化和數(shù)據(jù)局部性現(xiàn)代化 2
1.5 理解功耗使用 2
1.6 ISPC和OpenCL 2
1.7 Intel Xeon Phi協(xié)處理器特性 2
1.8 眾核和新異構(gòu)系統(tǒng) 2
1.9 書名中沒有Xeon Phi與新異構(gòu)架構(gòu)編程 3
1.10 眾核的未來 3
1.11 下載 3
1.12 更多信息 4
第2章從正確到正確&高效:Godunov
格式的Hydro2D案例學(xué)習(xí) 5
2.1 現(xiàn)代計(jì)算機(jī)上的科學(xué)計(jì)算 5
2.1.1 現(xiàn)代計(jì)算環(huán)境 6
2.1.2 CEA的Hydro2D 6
2.2 沖擊流體動力學(xué)的一種數(shù)值方法 7
2.2.1 歐拉方程 7
2.2.2 Godunov方法 7
2.2.3 哪里需要優(yōu)化 9
2.3 現(xiàn)代計(jì)算機(jī)架構(gòu)的特征 9
2.3.1 面向性能的架構(gòu) 9
2.3.2 編程工具和運(yùn)行時 10
2.3.3 計(jì)算環(huán)境 11
2.4 通向高性能的路 11
2.4.1 運(yùn)行Hydro2D 11
2.4.2 Hydro2D的結(jié)構(gòu) 12
2.4.3 優(yōu)化 15
2.4.4 內(nèi)存使用 16
2.4.5 線程級并行 17
2.4.6 算術(shù)效率和指令級并行 24
2.4.7 數(shù)據(jù)級并行 26
2.5 總結(jié) 32
2.5.1 協(xié)處理器與處理器 32
2.5.2 水漲船高 32
2.5.3 性能策略 33
2.6 更多信息 34
第3章HBM上的SIMD與并發(fā)優(yōu)化 36
3.1應(yīng)用程序:HIROMB-BOOS-MODEL 36
3.2 關(guān)鍵應(yīng)用:DMI 36
3.3 HBM執(zhí)行配置文件 37
3.4 HBM優(yōu)化綜述 38
3.5 數(shù)據(jù)結(jié)構(gòu):準(zhǔn)確定位位置 38
3.6 HBM上的線程并行 41
3.7 數(shù)據(jù)并行:SIMD向量化 45
3.7.1 零散的可優(yōu)化部分 46
3.7.2 過早抽象是萬惡之源 48
3.8 結(jié)果 50
3.9 詳情分析 51
3.10 處理器與協(xié)處理器可擴(kuò)展性對比 52
3.11 CONTIGUOUS屬性 53
3.12 總結(jié) 54
3.13 參考文獻(xiàn) 54
3.14 更多信息 55
第4章 流體動力學(xué)方程優(yōu)化 56
4.1 開始 56
4.2 1.0版本:基礎(chǔ)版本 57
4.3 2.0版本:線程盒 59
4.4 3.0版本:棧內(nèi)存 63
4.5 4.0版本:分塊 63
4.6 5.0版本:向量化 64
4.7Intel Xeon Phi協(xié)處理器上的運(yùn)行結(jié)果 68
4.8 總結(jié) 69
4.9 更多信息 70
第5章 分階段準(zhǔn)同步柵欄 71
5.1 如何改善代碼 74
5.2 如何進(jìn)一步改善代碼 74
5.3 超線程方陣 74
5.4關(guān)于該方案哪些地方不是最優(yōu)的 75
5.5 超線程方陣編碼 76
5.5.1如何確定內(nèi)核間兄弟線程和內(nèi)核內(nèi)HT線程 77
5.5.2 超線程方陣手動分區(qū)方法 77
5.5.3 吸取教訓(xùn) 79
5.6 回到工作 80
5.7 數(shù)據(jù)對齊 81
5.7.1 盡可能使用對齊的數(shù)據(jù) 81
5.7.2 冗余未必是件壞事 81
5.8 深入討論分階段準(zhǔn)同步柵欄 84
5.9 如何節(jié)省時間 86
5.10 幾個留給讀者的優(yōu)化思考 90
5.11類似Xeon Phi協(xié)處理器的Xeon主機(jī)性能優(yōu)化 91
5.12 總結(jié) 92
5.13 更多信息 92
第6章 故障樹表達(dá)式并行求解 93
6.1 動機(jī)和背景 93
6.1.1 表達(dá)式 93
6.1.2 表達(dá)式選擇:故障樹 93
6.1.3 程序?qū)嵗械墓收蠘洌夯灸M 93
6.2 實(shí)例實(shí)現(xiàn) 94
6.3 其他因素 101
6.4 總結(jié) 101
6.5 更多信息 101
第7章 深度學(xué)習(xí)的數(shù)值優(yōu)化 102
7.1 擬合目標(biāo)函數(shù) 102
7.2 目標(biāo)函數(shù)與主成分分析 105
7.3 軟件及樣例數(shù)據(jù) 106
7.4 訓(xùn)練數(shù)據(jù) 109
7.5 運(yùn)行時間 109
7.6 擴(kuò)展結(jié)果 111
7.7 總結(jié) 111
7.8 更多信息 112
第8章 優(yōu)化聚集/分散模式 113
8.1 聚集/分散在Intel架構(gòu)下的說明 114
8.2 聚集/分散模式在分子動力學(xué)中的應(yīng)用 115
8.3 優(yōu)化聚集/分散模式 117
8.3.1 提高時間和空間的局部性 117
8.3.2 選擇一種適當(dāng)?shù)臄?shù)據(jù)布局:AoS與SoA 118
8.3.3 AoS和SoA之間的動態(tài)轉(zhuǎn)換 119
8.3.4 分?jǐn)偩奂?分散和轉(zhuǎn)換的開銷 122
8.4 總結(jié) 123
8.5 更多信息 123
第9章N體問題直接法的眾核實(shí)現(xiàn) 125
9.1 N體模擬 125
9.2 初始解決方案 125
9.3 理論極限 126
9.4 降低開銷和對齊數(shù)據(jù) 128
9.5 優(yōu)化存儲層次 131
9.6 改進(jìn)分塊 133
9.7 主機(jī)端的優(yōu)化 135
9.8 總結(jié) 136
9.9 更多信息 136
第10章 N體方法 137
10.1 快速N體方法和直接N體內(nèi)核 137
10.2 N體方法的應(yīng)用 138
10.3 直接N體代碼 138
10.4 性能結(jié)果 141
10.5 總結(jié) 142
10.6 更多信息 142
第11章 使用OpenMP 4.0實(shí)現(xiàn)動態(tài)負(fù)載均衡 144
11.1 最大化硬件利用率 144
11.2 N體內(nèi)核 146
11.3 卸載版本 149
11.4 第一個處理器與協(xié)處理器協(xié)作版本 150
11.5 多協(xié)處理器版本 152
11.6 更多信息 155
第12章 并發(fā)內(nèi)核卸載 156
12.1 設(shè)定上下文 156
12.1.1 粒子動力學(xué) 156
12.1.2 本章結(jié)構(gòu) 157
12.2 協(xié)處理器上的并發(fā)內(nèi)核 158
12.2.1 協(xié)處理器設(shè)備劃分和線程關(guān)聯(lián) 158
12.2.2 并發(fā)數(shù)據(jù)傳輸 163
12.3 在PD中使用并發(fā)內(nèi)核卸載進(jìn)行作用力計(jì)算 166
12.3.1 使用牛頓第三定律并行評估作用力 166
12.3.2 實(shí)現(xiàn)作用力并發(fā)計(jì)算 167
12.3.3 性能評估:之前與之后 171
12.4 總結(jié)