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