多核怎么編程_多核應(yīng)用編程實(shí)戰(zhàn) 前言
本文關(guān)鍵詞:多核應(yīng)用編程實(shí)戰(zhàn),由筆耕文化傳播整理發(fā)布。
前言
多年以來(lái),家用電腦總是給人以同時(shí)處理多任務(wù)的錯(cuò)覺(jué)。這是因?yàn)樘幚砥髅棵腌娔茉诓煌倪\(yùn)行任務(wù)之間切換很多次,于是給人多個(gè)任務(wù)同時(shí)運(yùn)行的表象,但也僅僅是表象。實(shí)際上,當(dāng)計(jì)算機(jī)處理某個(gè)任務(wù)時(shí),其他任務(wù)不會(huì)有任何進(jìn)展。對(duì)于一次只能執(zhí)行一個(gè)任務(wù)的電腦,我們可以說(shuō)它只有一個(gè)處理器、CPU("核心")。核心是處理器中承擔(dān)實(shí)際工作的部分。
近來(lái),即使是家用電腦也配備了多核處理器,F(xiàn)在已經(jīng)很難買到非多核計(jì)算機(jī)了。在多核機(jī)上,每個(gè)核心執(zhí)行一個(gè)任務(wù),從而真正做到了同時(shí)處理多任務(wù)。
要理解多核的意義,最好假設(shè)要通過(guò)一臺(tái)電腦把攝像機(jī)里的電影轉(zhuǎn)換為適合DVD刻錄的格式。這個(gè)過(guò)程需要大量計(jì)算(密集地讀寫磁盤),而解壓輸入視頻和將之轉(zhuǎn)換為要刻錄成盤的壓縮輸出視頻會(huì)占用處理器的絕大部分時(shí)間。
如果忽略磁盤和內(nèi)存的問(wèn)題,那么也許可以在單核系統(tǒng)上同時(shí)轉(zhuǎn)換兩部電影。這兩個(gè)任務(wù)可同時(shí)開始,但處理器會(huì)先用一段時(shí)間轉(zhuǎn)換一個(gè)視頻,然后再用一段時(shí)間轉(zhuǎn)換另一個(gè)。因?yàn)樘幚砥魍粫r(shí)刻只能執(zhí)行一個(gè)任務(wù),所以實(shí)際只有一個(gè)視頻被壓縮。如果用進(jìn)度條顯示轉(zhuǎn)換過(guò)程的話,那么可以看到兩個(gè)進(jìn)度條都朝著100%完成的方向前進(jìn),但實(shí)際上轉(zhuǎn)換兩個(gè)視頻所用的時(shí)間約為轉(zhuǎn)換一個(gè)視頻的兩倍。
多核系統(tǒng)則不同,進(jìn)行視頻轉(zhuǎn)換的核心是兩個(gè)或更多,而每個(gè)核心都可處理一項(xiàng)任務(wù)。因此,讓系統(tǒng)在同一時(shí)間處理兩部電影將使用兩個(gè)核心,且轉(zhuǎn)換時(shí)間與轉(zhuǎn)換一部電影時(shí)相同,即同樣時(shí)間內(nèi)可以完成兩倍的工作量。
多核系統(tǒng)能在單位時(shí)間內(nèi)完成更多工作,比如用單核系統(tǒng)轉(zhuǎn)換一部電影的時(shí)間轉(zhuǎn)換兩部電影。此外,多核系統(tǒng)也能用不同的方式來(lái)分解工作。例如,多個(gè)核心可以共同轉(zhuǎn)換同一部電影。在這種情況下,雙核系統(tǒng)轉(zhuǎn)換一部電影比單核系統(tǒng)快一倍。
本書講解如何利用多核系統(tǒng)進(jìn)行開發(fā)。人們常說(shuō)這個(gè)話題復(fù)雜或難以理解,某種意義上這么說(shuō)沒(méi)有錯(cuò)。與任何一種編程技術(shù)一樣,多核編程很難同時(shí)做到正確和高性能。但另一方面,利用多核系統(tǒng)顯著提升應(yīng)用程序性能或提高單位時(shí)間內(nèi)所完成工作量的方式也有很多,只是實(shí)現(xiàn)的難易程度不同。
也許說(shuō)"多核編程很容易"過(guò)于樂(lè)觀,比較切合實(shí)際的說(shuō)法是:多核編程不見(jiàn)得比從結(jié)構(gòu)化編程轉(zhuǎn)向面向?qū)ο缶幊谈y。本書將幫助你了解編寫多核系統(tǒng)的應(yīng)用程序涉及的難點(diǎn),使你能寫出功能正確、性能優(yōu)越,且適合擴(kuò)展為在多個(gè)CPU核心運(yùn)行的應(yīng)用程序。
讀者對(duì)象
既然已經(jīng)讀到這里,那么你很可能就是本書的目標(biāo)讀者。本書是一本實(shí)用指南,指導(dǎo)你編寫能充分利用多核系統(tǒng)優(yōu)勢(shì)的應(yīng)用程序。本書并不專門描述并行處理的某個(gè)具體方法,而是涵蓋了各種方法。本書也并未拘泥于某個(gè)特定的平臺(tái),而是給出了多種操作系統(tǒng)和處理器的程序示例。本書還涵蓋了某些高級(jí)主題,但都給出了足夠的背景知識(shí),保證讀者能夠理解。
本書是為熟悉C語(yǔ)言并有相當(dāng)編程能力的讀者而作。本書的目的并非教授編程語(yǔ)言,而是從更高層次考量如何編寫功能正確、性能優(yōu)良、可擴(kuò)展為在多個(gè)CPU核心運(yùn)行的代碼。
本書的示例使用了SPARC或x86匯編語(yǔ)言。示例簡(jiǎn)單、有清晰的注釋,重點(diǎn)突出,讀者無(wú)需熟悉匯編語(yǔ)言就能看明白。
本書目標(biāo)
閱讀本書之后,讀者將了解為類UNIX操作系統(tǒng)(Linux、Oracle Solaris、OS X)和Windows系統(tǒng)編寫多核程序的方法,理解多核的硬件實(shí)現(xiàn)對(duì)應(yīng)用程序的影響(好壞都有),知曉編寫并行應(yīng)用程序時(shí)的注意事項(xiàng),并弄清如何編寫可擴(kuò)展為大量并行線程的應(yīng)用程序。
本書內(nèi)容
以下是本書各章的簡(jiǎn)介。
第1章介紹將涉及的硬件和軟件概念,概述了處理器的內(nèi)部結(jié)構(gòu)。對(duì)于讀者來(lái)說(shuō),要編寫利用多核系統(tǒng)的程序不一定非得了解硬件的工作原理,但理解了處理器架構(gòu)的基礎(chǔ)知識(shí)更容易理解后面有關(guān)應(yīng)用程序正確性、性能和擴(kuò)展的概念。這一章還討論了線程和進(jìn)程的概念。
第2章討論應(yīng)用程序分析和優(yōu)化。在把精力花在將應(yīng)用程序修改為利用多核的程序之前,了解應(yīng)用程序目前將時(shí)間用在哪里至關(guān)重要。這一章介紹了應(yīng)用程序開發(fā)周期中的主要性能因素,并探討如何才能提升性能。
第3章介紹如何利用多核系統(tǒng)在單位時(shí)間內(nèi)執(zhí)行更多工作,或者說(shuō)如何減少完成一個(gè)任務(wù)所需的時(shí)間。首先介紹虛擬化,因?yàn)樘摂M化可以在一個(gè)系統(tǒng)中模擬多個(gè)系統(tǒng),且無(wú)需修改軟件。重點(diǎn)在于多核系統(tǒng)代表了一個(gè)機(jī)會(huì),讓我們無(wú)需修改軟件即可改變其工作方式。然后,這一章描述可用于編寫并行應(yīng)用程序的各種模式,并討論這些模式適用的情況。
第4章闡述如何在多個(gè)線程之間安全地共享數(shù)據(jù)。這一章以討論數(shù)據(jù)爭(zhēng)用開篇,它在多線程代碼中最容易導(dǎo)致問(wèn)題。這一章特別在抽象層面上詳述了安全共享數(shù)據(jù)和同步線程的方法,后續(xù)幾章針對(duì)具體操作系統(tǒng)再詳述細(xì)節(jié)。
第5章介紹如何使用POSIX線程編寫并行應(yīng)用程序。POSIX線程是在類UNIX操作系統(tǒng)(如Linux、Mac OS X和Solaris)上實(shí)現(xiàn)的標(biāo)準(zhǔn)。POSIX線程庫(kù)提供了許多對(duì)于編寫并行應(yīng)用程序很實(shí)用的構(gòu)建模塊,,為開發(fā)提供了極大的靈活性和便利。
第6章介紹如何使用Windows本地線程為Windows編寫并行應(yīng)用程序。Windows提供了與POSIX類似的同步和數(shù)據(jù)共享原語(yǔ),但Windows和POSIX對(duì)這些功能的接口和要求不同。
第7章描述編譯器提供的自動(dòng)并行化機(jī)會(huì)和限制。這一章還介紹了OpenMP規(guī)范,這一規(guī)范使編寫利用多核處理器的應(yīng)用程序變得相對(duì)簡(jiǎn)單。
第8章探討如何拋開操作系統(tǒng)或編譯器提供的庫(kù)功能來(lái)編寫并行應(yīng)用程序。我們有充分的理由為同步或共享數(shù)據(jù)編寫自定義代碼,比如想要獲得更好的控制或更出色的性能。但要編寫正常運(yùn)行的代碼,也有不少需要避免的陷阱。
第9章討論如何對(duì)應(yīng)用程序加以改進(jìn)以提高其擴(kuò)展性,從而使多核系統(tǒng)完成的工作盡可能多。這一章介紹了限制擴(kuò)展性的常見(jiàn)領(lǐng)域,闡述了確定擴(kuò)展性限制范圍的方式。面向多核系統(tǒng)進(jìn)行開發(fā)和面向多處理器系統(tǒng)進(jìn)行開發(fā)的不同之處恰恰在于擴(kuò)展,而這一章還討論了硬件實(shí)現(xiàn)帶來(lái)的這一重要差別。
第10章涵蓋編寫并行應(yīng)用程序的多種方式。隨著多核處理器成為主流,人們也在嘗試其他方法,以便克服障礙編寫出正確、快速、可擴(kuò)展的并行代碼。
第11章是最后一章,對(duì)全書內(nèi)容進(jìn)行了總結(jié)。
【責(zé)任編輯:book TEL:(010)68476606】
回書目 下一節(jié)
原文:多核應(yīng)用編程實(shí)戰(zhàn) 前言 返回讀書頻道首頁(yè)
本文關(guān)鍵詞:多核應(yīng)用編程實(shí)戰(zhàn),由筆耕文化傳播整理發(fā)布。
本文編號(hào):208295
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/208295.html