為計算密集型應(yīng)用選擇最佳多核架構(gòu)
從微小而且集成度非常高的片上系統(tǒng),到大型數(shù)據(jù)中心,多核革命已經(jīng)呈現(xiàn)出烽火燎原之勢。那么,當(dāng)你在設(shè)計自己的系統(tǒng)時,怎樣才能把多核技術(shù)發(fā)揮到極致呢?另外需要注意的是,要在一個多核系統(tǒng)中把每一份計算能力都充分利用起來,并不是一件容易的事。
本文引用地址:http://m.ptau.cn/article/201809/388262.htm當(dāng)今的多核處理器絕不僅僅是把多個處理器放進(jìn)同一個芯片那么簡單。領(lǐng)先的處理器提供商在其產(chǎn)品中植入了很多有用的特殊功能。例如,散列(hashing)、高速緩存(caching)、處理器間通信、中斷管理和內(nèi)存管理等。這些功能特性如果能夠善加利用,就會讓AMP架構(gòu)高效率地運行起來,這就需要在軟件上進(jìn)行專門的優(yōu)化。
我們知道,多核處理架構(gòu)基本上可以分為對稱多處理(SMP)和非對稱多處理(AMP)兩種。SMP架構(gòu)的特征是同等地看待每一個處理器內(nèi)核,不會特別指定哪個內(nèi)核或者哪些內(nèi)核去執(zhí)行哪個特定的任務(wù),完全由操作系統(tǒng)來平均地分配和協(xié)調(diào)內(nèi)核之間的工作。AMP架構(gòu)的特征是與SMP相反,不是同等地看待每一個處理器內(nèi)核,而是把特定的任務(wù)分配給特定的內(nèi)核來運行。這樣做的好處是減少了重復(fù)性工作的相關(guān)數(shù)據(jù)切換,從而獲得較高的運行效率。
例如,你可以拿到某一款典型的多核處理器--例如Freescale T4240,它具備12個多線程的內(nèi)核,每個內(nèi)核可供2個線程來調(diào)度共享。12個內(nèi)核被分為3組,每4個內(nèi)核為一組,共享2MB的Cache。相信你已經(jīng)感覺到,這個系統(tǒng)還是挺復(fù)雜的。那么,你要讓所有的內(nèi)核都來運行單一一個OS Domain,并由它來調(diào)度所有的線程,還是把全部的計算能力劃分成多個獨立的OS Domain,各自承擔(dān)不同的任務(wù)?哪一種方案會比較好呢?實際上,這必須根據(jù)應(yīng)用類型來進(jìn)行取舍。這個應(yīng)用在并行處理時是否足夠安全?它屬于數(shù)據(jù)密集型應(yīng)用嗎?能否發(fā)揮共享Level 2 Cache所具備的優(yōu)勢,很可能是你做出判斷時應(yīng)該重點考慮的一個因素。
采用內(nèi)置GPU的一組標(biāo)準(zhǔn)CPU,例如Intel Core i7,也是常用的硬件方案。這類系統(tǒng)可在4個內(nèi)核中實現(xiàn)8個超線程,并且利用GPU來實現(xiàn)復(fù)雜的通用計算。對于典型的計算密集型應(yīng)用來說,盡管開發(fā)這種CPU-GPU混合異構(gòu)架構(gòu)會增加系統(tǒng)的復(fù)雜度,但由此帶來的性能提升仍然具有很大的吸引力,這讓我們不厭其煩地進(jìn)行嘗試。
一旦理解了對應(yīng)用如何進(jìn)行分解,我們就有了選擇何種方法和語言來開發(fā)這個應(yīng)用的依據(jù)。如果采用多操作系統(tǒng)架構(gòu),不論是SMP還是AMP,通常都必須利用共享內(nèi)存在不同OS Domain之間傳遞數(shù)據(jù)。雖然這不是僅有的方式,但卻是常用方式--把帶有一些數(shù)據(jù)的命令傳遞給某個OS Domain,然后由一個中斷程序來做出相應(yīng)的處理。但是,有什么API可以使用呢?
這里有好幾種選擇。多核聯(lián)盟(Multicore Association)推出了MCAPI (Multicore Communication API)標(biāo)準(zhǔn),如圖1所示。這是專為multi-OS環(huán)境而設(shè)計的,可以建構(gòu)在相關(guān)的技術(shù)規(guī)范和MRAPI (Multicore Resource API)之上。MRAPI作為一種資源,為多OS Domain之間提供了共享內(nèi)存。

圖1:基本的多核軟件配置
對于這種架構(gòu),其他可供選擇的架構(gòu)是類似的自帶專用API。無論你做出何種選擇,都希望它是便于配置和維護(hù)的,這樣才是最有利于長遠(yuǎn)發(fā)展的最佳方案。其中一個重要的影響因素是所選接口自身的資源消耗情況。系統(tǒng)中眾多的內(nèi)核通常都是共享內(nèi)存的,其數(shù)據(jù)傳輸速度遠(yuǎn)遠(yuǎn)高于以太網(wǎng)。如果你把應(yīng)用分割為在多個OS Domain中運行的原因之一是防止Cache Thrashing (多個線程在執(zhí)行中讀寫同一個cache line,進(jìn)入競爭狀態(tài)),那么降低接口對資源的消耗占用就顯得尤為必要。
評論