欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種支持多核幫助線程的低開銷的塊同步方法

文檔序號(hào):6618936閱讀:355來源:國(guó)知局
專利名稱:一種支持多核幫助線程的低開銷的塊同步方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種支持多核幫助線程的低開銷的塊同步方法,屬于多核計(jì)算 機(jī)技術(shù)領(lǐng)域。
背景技術(shù)
片上多核處理器(Chip Multi-Processor)技術(shù)是將多個(gè)計(jì)算內(nèi)核有機(jī)集 成在一個(gè)處理器芯片中,利用多線程技術(shù),提高應(yīng)用程序的并行執(zhí)行性能的一 項(xiàng)技術(shù)。依據(jù)Amdahl定律,程序并行執(zhí)行的性能最終是由其串行部分執(zhí)行的性 能所決定的,而串行部分中長(zhǎng)延遲訪存引發(fā)的開銷嚴(yán)重地影響著應(yīng)用程序的性 能。
通常,片上多核處理器架構(gòu)具有共享的二級(jí)緩存(Level 2 Cache)或最后 一級(jí)緩存(Last level Cache)。傳統(tǒng)硬件預(yù)取技術(shù)可對(duì)應(yīng)用程序中的規(guī)則數(shù)據(jù) (如規(guī)則數(shù)組)進(jìn)行預(yù)取,并提前送至共享緩存中,當(dāng)應(yīng)用程序的當(dāng)前計(jì)算線 程訪問到這些規(guī)則數(shù)據(jù)時(shí),往往在共享緩存中就會(huì)訪問到所需數(shù)據(jù),而不用再 進(jìn)行存儲(chǔ)器訪問。然而,對(duì)地址不連續(xù)的非規(guī)則數(shù)據(jù)(如非規(guī)則鏈表、數(shù)組的 非規(guī)則訪問),由于訪問數(shù)據(jù)地址的不連續(xù)性,傳統(tǒng)硬件預(yù)取技術(shù)就無法準(zhǔn)確獲 取到預(yù)取數(shù)據(jù)的地址信息,因此它不會(huì)有預(yù)取效果。這種情況下,預(yù)取幫助線 程的方法被提出。該方法為計(jì)算線程抽取其預(yù)取幫助線程,并通過使用空閑核, 使預(yù)取幫助線程動(dòng)態(tài)保持在計(jì)算線程之前訪問數(shù)據(jù),以使該數(shù)據(jù)在被計(jì)算線程 訪問之前被及時(shí)推送到共享緩存之中,以提高串行代碼執(zhí)行性能。
編譯器或程序員可為應(yīng)用程序生成計(jì)算線程和預(yù)取幫助線程,預(yù)取幫助線 程在一個(gè)計(jì)算核中運(yùn)行,計(jì)算線程在另一個(gè)計(jì)算核中運(yùn)行,計(jì)算線程所需要的 非規(guī)則數(shù)據(jù)可被預(yù)取幫助線程推送到共享緩存中。通常,計(jì)算線程與預(yù)取幫助 線程間需要協(xié)同,以防止預(yù)取幫助線程執(zhí)行的太快,造成預(yù)取的數(shù)據(jù)過早,出 現(xiàn)需要用時(shí)可能已被緩存替換算法所替換的情況;也要防止預(yù)取幫助線程太慢, 計(jì)算線程已訪問過,使得預(yù)取數(shù)據(jù)已無用的情況。計(jì)算線程需要知道其預(yù)取幫 助線程的執(zhí)行情況,反之,預(yù)取幫助線程也需要知道其計(jì)算線程的執(zhí)行情況。 為了確定對(duì)方的運(yùn)行位置,在計(jì)算線程和預(yù)取幫助線程中需要加入同步操作。 目前的傳統(tǒng)同步方法,在不考慮線程調(diào)度的代價(jià)下,對(duì)于每一次數(shù)據(jù)訪問,預(yù)取幫助線程都會(huì)與計(jì)算線程進(jìn)行一次同步,這種精確同步方式帶來了嚴(yán)重的同 步開銷,并且有可能抵消預(yù)取幫助線程在降低非規(guī)則的數(shù)據(jù)缺失和減小長(zhǎng)延遲 訪存上的性能獲益,使得計(jì)算線程的執(zhí)行性能無法得以提高。

發(fā)明內(nèi)容
本發(fā)明的目的是為克服上述問題,針對(duì)非規(guī)則數(shù)據(jù)預(yù)取而提出一種支持多 核幫助線程的低開銷的塊同步方法。其基本思想是在共享緩存的多核架構(gòu)基 礎(chǔ)上,針對(duì)多核應(yīng)用中非規(guī)則數(shù)據(jù)缺失的問題,通過為預(yù)取幫助線程引入提前 量和低開銷的塊同步機(jī)制,達(dá)到降低計(jì)算線程執(zhí)行時(shí)的數(shù)據(jù)缺失、減少預(yù)取幫 助線程與計(jì)算線程同步的開銷,提高計(jì)算線程執(zhí)行性能的目的。本發(fā)明可廣泛 應(yīng)用于多核編譯器優(yōu)化及數(shù)據(jù)庫性能優(yōu)化等。
為了解釋我們方法所涉及的步驟中有關(guān)的術(shù)語含義,首先給出這些技術(shù)術(shù) 語的定義
定義l:當(dāng)前預(yù)取位置
在一個(gè)計(jì)算線程代碼中,將當(dāng)前需要進(jìn)行預(yù)取的非規(guī)則數(shù)據(jù)的地址稱為當(dāng) 前預(yù)取位置;
定義2:當(dāng)前預(yù)取位置的計(jì)算工作量
在一個(gè)計(jì)算線程代碼中,將當(dāng)前預(yù)取位置和下一個(gè)預(yù)取位置間的代碼執(zhí)行 時(shí)間稱為當(dāng)前預(yù)取位置的計(jì)算工作量。其中,如果這個(gè)時(shí)間為O,屬于沒有計(jì)算 工作量的情況;如果這個(gè)時(shí)間很小,如小于幾十個(gè)時(shí)鐘周期,屬于少計(jì)算工作 量的情況;
定義3:計(jì)算線程的計(jì)算分片
在一個(gè)計(jì)算線程中,將含有大量非規(guī)則數(shù)據(jù)缺失的代碼區(qū)域稱為計(jì)算線程 的計(jì)算分片;
定義4:共享緩_存缺失的數(shù)據(jù)流
對(duì)一個(gè)計(jì)算線程的計(jì)算分片,如果它連續(xù)地大量引發(fā)了共享緩存的數(shù)據(jù)缺 失,用missl, miss2,…,missN代表缺失數(shù)據(jù)的地址,則稱從missl到missN形 成的地址流所對(duì)應(yīng)的數(shù)據(jù)訪問序列為共享緩存缺失的數(shù)據(jù)流。
定義5:歷史地址信息
在計(jì)算線程或幫助預(yù)取線程中,為了使其相關(guān)指針進(jìn)行高效地跳轉(zhuǎn),需要 部分記住那些跳轉(zhuǎn)指針的地址,我們把這些保留的地址就稱為歷史地址信息。 具體來說,對(duì)一個(gè)鏈表需要保存(鏈表長(zhǎng)度/k)個(gè)指針(小數(shù)部分需要進(jìn)位取整),即頭指針,第k+l個(gè)指針,第2k+l個(gè)指針等,另外數(shù)組的下標(biāo)也可看作這種
情況的特例。這里,k為一個(gè)正整數(shù),可通過下面具體實(shí)現(xiàn)步驟里的步驟一求得。 本發(fā)明的一種支持多核幫助線程的低開銷塊同步方法的整體框架設(shè)計(jì)流程
如圖1所示,具體實(shí)現(xiàn)步驟如下
步驟一、構(gòu)造預(yù)取幫助線程的提前量
在上述相關(guān)術(shù)語定義的基礎(chǔ)上,構(gòu)造預(yù)取幫助線程的提前量?;舅枷胧? 在預(yù)取非規(guī)則數(shù)據(jù)時(shí),借助已有的歷史地址信息,動(dòng)態(tài)保持預(yù)取幫助線程的預(yù)取 工作指針總提前于計(jì)算線程的當(dāng)前工作指針k個(gè)位置,這樣,無論在計(jì)算線程和 預(yù)取幫助線程是處于開始或同步狀態(tài)時(shí),預(yù)取幫助線程可動(dòng)態(tài)保持在計(jì)算線程 之前訪問數(shù)據(jù),并使該數(shù)據(jù)能在被計(jì)算線程訪問之前被及時(shí)推送到共享緩存之 中。其主要構(gòu)造步驟如下
第(1)步在計(jì)算線程中,對(duì)當(dāng)前預(yù)取位置的計(jì)算工作量進(jìn)行估算,如果 屬于沒有計(jì)算工作量或少計(jì)算工作量的情況,轉(zhuǎn)第(2)步,否則轉(zhuǎn)第(4)步;
第(2)步為保證預(yù)取幫助線程領(lǐng)先于計(jì)算線程At時(shí)間,在計(jì)算線程的 當(dāng)前預(yù)取位置,找到提前At代碼計(jì)算量的位置,并在預(yù)取幫助線程代碼中調(diào)整 當(dāng)前預(yù)取工作指針提前于計(jì)算線程的當(dāng)前工作指針k個(gè)位置(對(duì)于數(shù)組的下標(biāo)調(diào) 整為這個(gè)下標(biāo)值加k ;對(duì)于鏈表,預(yù)取工作指針調(diào)整為當(dāng)前鏈表指針后的第k個(gè)指 針);這里At和k有下式關(guān)系
△ t=f (k) =k*MissPenalty+cO
其中k代表一個(gè)正整數(shù),可依據(jù)At的估計(jì)值或測(cè)量值來確定; MissPenalty代表一次長(zhǎng)延遲訪存的開銷; c0代表一個(gè)設(shè)定的常數(shù)值;
第(3)步當(dāng)計(jì)算線程本次數(shù)據(jù)推送的分片結(jié)束,轉(zhuǎn)第(4)步;當(dāng)同步 時(shí),轉(zhuǎn)第(2)步;
第(4)步結(jié)束。
步驟二、選擇低開銷的塊同步機(jī)制
在步驟一構(gòu)造預(yù)取幫助線程的提前量基礎(chǔ)上,步驟二選擇一種低開銷的塊 同步機(jī)制。
該低開銷的塊同步機(jī)制分為兩種情況,可依據(jù)測(cè)試情況選擇其中之一a. 雙計(jì)數(shù)器的塊同步機(jī)制
低開銷的塊同步機(jī)制的基本思想是塊同步機(jī)制將計(jì)算線程中引發(fā)共享緩 存缺失的數(shù)據(jù)訪問流,按先后順序劃分為若干塊,每個(gè)塊的大小依據(jù)應(yīng)用實(shí)例 的選擇測(cè)試效果情況來設(shè)定具體值;并且同步操作僅僅發(fā)生在塊的邊界,以減 小同步的精度來降低同步代價(jià);預(yù)取幫助線程的提前量及其動(dòng)態(tài)的保持可由步 驟二來完成,對(duì)于每一個(gè)塊用pushsize表示塊的大小,計(jì)算線程和預(yù)取幫助線 程都擁有自己的計(jì)數(shù)器,當(dāng)它們每訪問共享緩存缺失數(shù)據(jù)流中的一項(xiàng)數(shù)據(jù),就 會(huì)對(duì)其計(jì)數(shù)器加l,當(dāng)計(jì)數(shù)器的數(shù)值達(dá)到pushsize時(shí),其線程間必須進(jìn)行同步, 如果另一線程沒有與其達(dá)到同一進(jìn)度,此線程必須被阻塞并等待直到另一線程 與之同步。塊同步機(jī)制的操作步驟由計(jì)算線程的計(jì)算分片操作步驟和預(yù)取幫助 線程的操作步驟組成
① 計(jì)算線程的計(jì)算分片具體操作步驟如下-第(l)步開始;
第(2)步計(jì)數(shù)器置O,計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步讀數(shù)據(jù),計(jì)數(shù)器加l,執(zhí)行計(jì)算; 第(4)步如果計(jì)算分片結(jié)束,轉(zhuǎn)第(6)步;
第(5)步如果計(jì)數(shù)器值大于piishsize,轉(zhuǎn)第(2)步,否則轉(zhuǎn)第(3)步;
第(6)步結(jié)束。
② 預(yù)取幫助線程的具體操作步驟如下 第(l)步開始;
第(2)步計(jì)數(shù)器置O,計(jì)算線程與預(yù)取幫助線程開始協(xié)作;
第(3)步如果是同步的開始,按幫助預(yù)取線程調(diào)整提前量后的當(dāng)前工作指
針推送預(yù)取數(shù)據(jù),否則按幫助預(yù)取線程新的當(dāng)前工作指針推送預(yù)取數(shù)據(jù),計(jì)數(shù)
器加1;
第(4)步如果計(jì)算結(jié)束,轉(zhuǎn)第(6)步;
第(5)步如果計(jì)數(shù)器值大于pushsize,轉(zhuǎn)第(2)步,否則轉(zhuǎn)第(3)步;
第(6)步結(jié)束。
b. 單計(jì)數(shù)器的塊同步機(jī)制
單計(jì)數(shù)器的塊同步機(jī)制的基本思想是計(jì)算線程不會(huì)被同步所阻塞,也沒 有加入額外的同步操作,只有預(yù)取幫助線程擁有一個(gè)計(jì)數(shù)器,當(dāng)計(jì)數(shù)器的值達(dá)
到pushsize,預(yù)取幫助線程會(huì)將推送數(shù)據(jù)的指針與計(jì)算線程設(shè)為相同,預(yù)取幫
9助線程的提前量及其動(dòng)態(tài)的保持可由步驟一來完成。單計(jì)數(shù)器的塊同步機(jī)制的 操作步驟,由計(jì)算線程的計(jì)算分片操作步驟和預(yù)取幫助線程的操作步驟組成
① 計(jì)算線程的計(jì)算分片具體操作步驟如下-第(l)步開始;
第(2)步計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步讀數(shù)據(jù),執(zhí)行計(jì)算;
第(4)步如果計(jì)算分片結(jié)束,轉(zhuǎn)第(5)步,否則轉(zhuǎn)第(3)步; 第(5)步結(jié)束。
② 預(yù)取幫助線程的具體操作步驟如下 第(l)步開始;
第(2)步計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步計(jì)數(shù)器置O,獲取計(jì)算線程的當(dāng)前工作指針;
第(4)步如果是同步的開始,按幫助預(yù)取線程調(diào)整提前量后的當(dāng)前工作指 針推送預(yù)取數(shù)據(jù),否則按幫助預(yù)取線程新的當(dāng)前工作指針推送預(yù)取數(shù)據(jù),計(jì)數(shù) 器加l;
第(5)步如果計(jì)算結(jié)束,轉(zhuǎn)第(7)步;
第(6)步如果計(jì)數(shù)器值大于pushsize,轉(zhuǎn)第(3)步,否則轉(zhuǎn)第(4)步; 第(7)步結(jié)束。
單計(jì)數(shù)器的塊同步機(jī)制可克服雙計(jì)數(shù)器的塊同步機(jī)制在同步點(diǎn)阻塞的特殊 情況,它保障了計(jì)算線程的可持續(xù)運(yùn)行能力。雙計(jì)數(shù)器的塊同步機(jī)制與單計(jì)數(shù) 器的塊同步機(jī)制可在具體應(yīng)用環(huán)境、應(yīng)用程序中測(cè)試后,擇優(yōu)使用。
有益效果
①本發(fā)明采用低開銷的可選擇的塊同步機(jī)制,它包括雙計(jì)數(shù)器的塊同步和 單計(jì)數(shù)器的塊同步,有效的減少了傳統(tǒng)精確同步機(jī)制所造成的同步開銷。與每
次預(yù)取都需要同步的傳統(tǒng)精確同步方式來說,有著不可比擬的低開銷特點(diǎn)選 擇適合的Pushsize值,可有效平衡過大的pushsize導(dǎo)致的緩存污染,也可有 效平衡過小pushsize帶來的同步開銷,有效地提高了計(jì)算線程的執(zhí)行性能。單 計(jì)數(shù)器的塊同步機(jī)制可克服雙計(jì)數(shù)器的塊同步機(jī)制在同步點(diǎn)阻塞的特殊情況, 它保障了計(jì)算線程的可持續(xù)運(yùn)行能力。這兩種機(jī)制可在具體應(yīng)用環(huán)境和應(yīng)用程 序中測(cè)試后,擇優(yōu)使用。②為預(yù)取幫助線程引入了提前量,使得在計(jì)算線程的當(dāng)前工作位置中,無 論有無足夠的計(jì)算工作,都能讓低開銷的塊同步機(jī)制得到有效地執(zhí)行。提前量 構(gòu)造方法可動(dòng)態(tài)保持預(yù)取幫助線程的工作指針總提前于計(jì)算線程的當(dāng)前指針K 個(gè)計(jì)算工作量,它是低開銷的雙計(jì)數(shù)器的塊同步和單計(jì)數(shù)器的塊同步機(jī)制的實(shí) 現(xiàn)基礎(chǔ)。在較少計(jì)算量的情況下,它具有計(jì)算線程和預(yù)取幫助線程兩者仍可進(jìn) 行交迭計(jì)算的特點(diǎn)。


圖1為本發(fā)明的整體框架設(shè)計(jì)流程圖;
具體實(shí)施例方式
根據(jù)上述技術(shù)方案,下面結(jié)合實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。 以下面簡(jiǎn)單程序?yàn)槔?,在頭文件ldsHeader.h中添加ADDSCALE變量,通過
改變?cè)撟兞康闹祦砜刂奇湵碇忻總€(gè)結(jié)點(diǎn)的計(jì)算工作量,鏈表結(jié)點(diǎn)的計(jì)算為-while(iterator){
temp = iterator-〉i一data; while(i++<ADDSCALE){ temp+=l;
res+=temp; i = 0;
iterator = iterator—〉next;
通過不斷改變ADDSCALE的值來調(diào)節(jié)計(jì)算工作量,從ADDSCALE為0時(shí)開始, 每次ADDSCALE的值增加5,這樣我們有ADDSCALE為0, 5, 10, 15, 20等。 結(jié)合上述舉例,給出相關(guān)術(shù)語的定義如下
定義l:當(dāng)前預(yù)取位置
在一個(gè)計(jì)算線程代碼中,將當(dāng)前需要進(jìn)行預(yù)取的非規(guī)則數(shù)據(jù)的地址稱為當(dāng) 前預(yù)取位置;
通過以下代碼計(jì)算當(dāng)前預(yù)取位置-temp 二 iterator—〉i—data;
li定義2:當(dāng)前預(yù)取位置的計(jì)算工作量
在一個(gè)計(jì)算線程代碼中,將當(dāng)前預(yù)取位置和下一個(gè)預(yù)取位置間的代碼執(zhí)行 時(shí)間稱為當(dāng)前預(yù)取位置的計(jì)算工作量。其中,如果這個(gè)時(shí)間為o,屬于沒有計(jì)算 工作量的情況;如果這個(gè)時(shí)間很小,如小于幾十個(gè)時(shí)鐘周期,屬于少計(jì)算工作 量的情況;
通過以下代碼計(jì)算當(dāng)前預(yù)取位置的計(jì)算工作量
while(i十+〈ADDSCALE) { temp+二l;
res+=temp; i = 0;
定義3:計(jì)算線程的計(jì)算分片
在一個(gè)計(jì)算線程中,將含有大量非規(guī)則數(shù)據(jù)缺失的代碼區(qū)域稱為計(jì)算線程 的計(jì)算分片;
通過以下代碼計(jì)算當(dāng)前預(yù)取位置的計(jì)算線程的計(jì)算分片 while (iterator) {
temp 二 iterator-M—data;
while(i++<ADDSCALE) { temp+=l;
res+=temp; i = 0;
iterator = iterator-〉next; 定義4:共享緩存缺失的數(shù)據(jù)流
對(duì)一個(gè)計(jì)算線程的計(jì)算分片,如果它連續(xù)地大量引發(fā)了共享緩存的數(shù)據(jù)缺 失,用missl, miss2,…,missN代表缺失數(shù)據(jù)的地址,則稱從missl到missN形
成的地址流所對(duì)應(yīng)的數(shù)據(jù)訪問序列為共享緩存缺失的數(shù)據(jù)流。
上述程序中的itemtor, iterator-〉next等所指數(shù)據(jù)即為共享緩存缺失的 數(shù)據(jù)流。定義5:歷史地址信息
在計(jì)算線程或幫助預(yù)取線程中,為了使其相關(guān)指針進(jìn)行高效地跳轉(zhuǎn),需要 部分記住那些跳轉(zhuǎn)指針的地址,我們把這些保留的地址就稱為歷史地址信息。
對(duì)本例中的iterator鏈表,如果鏈表長(zhǎng)度二IOOOO, k=20,需要保存500個(gè)指針, 即頭指針,第21個(gè)指針,第41個(gè)指針等。
步驟一、構(gòu)造預(yù)取幫助線程的提前量
第(1)步在計(jì)算線程中,對(duì)當(dāng)前預(yù)取位置的工作量進(jìn)行估算,如果ADDSCALE 為0或5或10,這屬于幾乎完全沒有計(jì)算工作量或較少計(jì)算工作量的情況, 轉(zhuǎn)第(2)步;否則,如果ADDSCALE為15或20,轉(zhuǎn)第(4)步;
第(2)步為保證預(yù)取幫助線程領(lǐng)先于計(jì)算線程At時(shí)間,在計(jì)算線程的 當(dāng)前預(yù)取位置,找到提前At代碼計(jì)算量的位置,并在預(yù)取幫助線程代碼中調(diào)整
當(dāng)前預(yù)取工作指針提前于計(jì)算線程的當(dāng)前工作指針k個(gè)位置;
當(dāng)At =6000, MissPenalty-300時(shí)鐘周期,c(^0時(shí) k= △ t/MissPenalty=6000/300=20
第(3)步當(dāng)計(jì)算線程本次數(shù)據(jù)推送的分片結(jié)束,轉(zhuǎn)第(4)步,當(dāng)需要 同步時(shí),轉(zhuǎn)第(2)步; 第(4)步結(jié)束。
步驟二、低開銷的可選擇的塊同步機(jī)制
a.以main計(jì)算線程一個(gè)計(jì)算分片Pl為例,其預(yù)取幫助線程為push,構(gòu)造 其雙計(jì)數(shù)器的塊同步機(jī)制過程為
① main計(jì)算線程的計(jì)算分片Pl具體操作步驟如下 第(l)步開始main;
第(2)步計(jì)數(shù)器counter置0, sem一post (&main) , sem一wait (&push) , main 計(jì)算線程與push預(yù)取幫助線程開始協(xié)作;
第(3)步讀數(shù)據(jù),計(jì)數(shù)器ccmnter加l,執(zhí)行計(jì)算; 第(4)步如果main計(jì)算分片Pl結(jié)束,轉(zhuǎn)第(6)步; 第(5)步如果計(jì)數(shù)器counter值大于pushsize,轉(zhuǎn)第(2)步,否則轉(zhuǎn)第 (3)步;
第(6)步結(jié)束。
② push預(yù)取幫助線程的具體操作步驟如下-第(l)步開始PUsh;
第 (2) 步計(jì)數(shù)器 push—counter 置 0 ,sem一post (&push), sem_wait (&main) , push線程與main線程開始協(xié)作;
第(3)步如果是同步的開始,按push幫助預(yù)取線程調(diào)整提前量后的當(dāng)前 工作指針推送預(yù)取數(shù)據(jù),否則按幫助預(yù)取線程push新的當(dāng)前工作指針推送預(yù)取 數(shù)據(jù),計(jì)數(shù)器push—counter力口 1;
第(4)步如果push計(jì)算結(jié)束,轉(zhuǎn)第(6)步;
第(5)步如果計(jì)數(shù)器push—counter值大于pushsize,轉(zhuǎn)第(2)步,否則 轉(zhuǎn)第(3)步;
第(6)步結(jié)束。
b .以main計(jì)算線程一個(gè)計(jì)算分片P2為例,其預(yù)取幫助線程為piish。構(gòu)造
其單計(jì)數(shù)器的塊同步機(jī)制過程為
① main計(jì)算線程的計(jì)算分片P2具體操作步驟如下-第(l)步開始main;
第(2)步sem—post (&main) , sem—wait (&push) , main計(jì)算線程與push予頁 取幫助線程開始協(xié)作;
第(3)步讀數(shù)據(jù),執(zhí)行計(jì)算;
第(4)步如果main計(jì)算分片P2結(jié)束,轉(zhuǎn)第(5)步,否則轉(zhuǎn)第(3)步; 第(5)步結(jié)束。
② push預(yù)取幫助線程的具體操作步驟如下 第(l)步開始pUSh;
第(2)步sem—post (&push) , sem一wait (&main) , push線禾呈與main線程開始 協(xié)作;
第(3)步計(jì)數(shù)器push—counter置0,獲取main線程的當(dāng)前工作指針; 第(4)步如果是同步的開始,按push幫助預(yù)取線程調(diào)整提前量后的當(dāng)前
工作指針推送預(yù)取數(shù)據(jù),否則按幫助預(yù)取線程push新的當(dāng)前工作指針推送預(yù)取
數(shù)據(jù),計(jì)數(shù)器push—counter力卩l(xiāng);
第(5)步如果push計(jì)算結(jié)束,轉(zhuǎn)第(7)步;
第(6)步如果計(jì)數(shù)器push—counter值大于pushsize,轉(zhuǎn)第(3)步,否則 轉(zhuǎn)第(4)步;
第(7)步:結(jié)束。上述舉例的綜合測(cè)試結(jié)果如下:
0(k=20, pushsize=600) 120. 175
80. 117
5(k=20, pushsize=600) 121.627
82,474
ADDSCALE (規(guī)模變量)
無預(yù)取幫助線程
的執(zhí)行時(shí)間 有預(yù)取幫助線程 的執(zhí)行時(shí)間 (本發(fā)明方法)
通過測(cè)試結(jié)果可以看到使用本發(fā)明方法,程序的執(zhí)行時(shí)間明顯縮短,
10(k=20, pushsize=600) 135. 234
89.839
15(k=0, pushsize=600) 153.057
118.076
20(k=0, pushsize=600) 171.058
117.697
1權(quán)利要求
1.一種支持多核幫助線程的低開銷的塊同步方法,其特征在于其基本思想是在共享緩存的多核架構(gòu)基礎(chǔ)上,針對(duì)多核應(yīng)用中非規(guī)則數(shù)據(jù)缺失的問題,通過為預(yù)取幫助線程引入提前量和低開銷的塊同步機(jī)制,達(dá)到降低計(jì)算線程執(zhí)行時(shí)的數(shù)據(jù)缺失、減少預(yù)取幫助線程與計(jì)算線程同步的開銷,提高計(jì)算線程執(zhí)行性能的目的;具體實(shí)現(xiàn)步驟如下步驟一、構(gòu)造預(yù)取幫助線程的提前量在預(yù)取非規(guī)則數(shù)據(jù)時(shí),借助歷史地址信息,動(dòng)態(tài)保持預(yù)取幫助線程的預(yù)取工作指針總提前于計(jì)算線程的當(dāng)前工作指針k個(gè)位置,這樣,無論在計(jì)算線程和預(yù)取幫助線程是處于開始或同步狀態(tài)時(shí),預(yù)取幫助線程可動(dòng)態(tài)保持在計(jì)算線程之前訪問數(shù)據(jù),并使該數(shù)據(jù)能在被計(jì)算線程訪問之前被及時(shí)推送到共享緩存之中;步驟二、選擇低開銷的塊同步機(jī)制在步驟一構(gòu)造預(yù)取幫助線程的提前量基礎(chǔ)上,步驟二選擇一種低開銷的塊同步機(jī)制;該低開銷的塊同步機(jī)制分為兩種情況,可依據(jù)測(cè)試情況擇優(yōu)選擇其中之一a.雙計(jì)數(shù)器的塊同步機(jī)制塊同步機(jī)制將計(jì)算線程中引發(fā)共享緩存缺失的數(shù)據(jù)訪問流,按先后順序劃分為若干塊,每個(gè)塊的大小依據(jù)應(yīng)用實(shí)例的選擇測(cè)試效果情況來設(shè)定具體值;并且同步操作僅僅發(fā)生在塊的邊界,以減小同步的精度來降低同步代價(jià);預(yù)取幫助線程的提前量及其動(dòng)態(tài)的保持可由步驟一來完成,對(duì)于每一個(gè)塊用pushsize表示塊的大小,計(jì)算線程和預(yù)取幫助線程都擁有自己的計(jì)數(shù)器,當(dāng)它們每訪問共享緩存缺失數(shù)據(jù)流中的一項(xiàng)數(shù)據(jù),就會(huì)對(duì)其計(jì)數(shù)器加1,當(dāng)計(jì)數(shù)器的數(shù)值達(dá)到pushsize時(shí),其線程間必須進(jìn)行同步,如果另一線程沒有與其達(dá)到同一進(jìn)度,此線程必須被阻塞并等待直到另一線程與之同步;b.單計(jì)數(shù)器的塊同步機(jī)制計(jì)算線程不會(huì)被同步所阻塞,也沒有加入額外的同步操作,只有預(yù)取幫助線程擁有一個(gè)計(jì)數(shù)器,當(dāng)計(jì)數(shù)器的值達(dá)到pushsize,預(yù)取幫助線程會(huì)將推送數(shù)據(jù)的指針與計(jì)算線程設(shè)為相同,預(yù)取幫助線程的提前量及其動(dòng)態(tài)的保持可由步驟一來完成。
2. 根據(jù)權(quán)利要求1所述的一種支持多核幫助線程的低開銷的塊同步方法,其特征在于步驟一中構(gòu)造預(yù)取幫助線程的提前量步驟為 第(1)步在計(jì)算線程中,對(duì)當(dāng)前預(yù)取位置的計(jì)算工作量進(jìn)行 估算,如果屬于沒有計(jì)算工作量或少計(jì)算工作量的情況,轉(zhuǎn)第(2)步,否則轉(zhuǎn)第(4)步;第(2)步為保證預(yù)取幫助線程領(lǐng)先于計(jì)算線程At時(shí)間,在計(jì) 算線程的當(dāng)前預(yù)取位置,找到提前At代碼計(jì)算量的位置,并在預(yù)取 幫助線程代碼中調(diào)整當(dāng)前預(yù)取工作指針提前于計(jì)算線程的當(dāng)前工作 指針k個(gè)位置(對(duì)于數(shù)組的下標(biāo)調(diào)整為這個(gè)下標(biāo)值加k;對(duì)于鏈表,預(yù) 取工作指針調(diào)整為當(dāng)前鏈表指針后的第k個(gè)指針);這里At和k有下式關(guān)系A(chǔ)t=f (k) =k*MissPenalty+cO其中k代表一個(gè)正整數(shù),可依據(jù)At的估計(jì)值或測(cè)量值來確定; MissPenalty代表一次長(zhǎng)延遲訪存的開銷; c0代表一個(gè)設(shè)定的常數(shù)值;第(3)步當(dāng)計(jì)算線程本次數(shù)據(jù)推送的分片結(jié)束,轉(zhuǎn)第(4)步; 當(dāng)同步時(shí),轉(zhuǎn)第(2)步;第(4)步結(jié)束。
3. 根據(jù)權(quán)利要求1所述的一種支持多核幫助線程的低開銷的塊同步方法,其特征在于步驟二選擇低開銷的塊同步機(jī)制中,雙計(jì)數(shù)器 的塊同步機(jī)制由計(jì)算線程的計(jì)算分片操作步驟和預(yù)取幫助線程的操 作步驟組成-①計(jì)算線程的計(jì)算分片具體操作步驟如下-第(l)步開始;第(2)步計(jì)數(shù)器置0,計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步讀數(shù)據(jù),計(jì)數(shù)器加l,執(zhí)行計(jì)算; 第(4)步如果計(jì)算分片結(jié)束,轉(zhuǎn)第(6)步;第(5)步如果計(jì)數(shù)器值大于pushsize,轉(zhuǎn)第(2)步,否則轉(zhuǎn)第(3)步;第(6)步結(jié)束;②預(yù)取幫助線程的具體操作步驟如下 第(l)步開始;第(2)步計(jì)數(shù)器置0,計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步如果是同步的開始,按幫助預(yù)取線程調(diào)整提前量后的當(dāng)前工作指針推送預(yù)取數(shù)據(jù),否則按幫助預(yù)取線程新的當(dāng)前工作指針推送預(yù)取數(shù)據(jù),計(jì)數(shù)器加l;第(4)步如果計(jì)算結(jié)束,轉(zhuǎn)第(6)步;第(5)步如果計(jì)數(shù)器值大于pushsize,轉(zhuǎn)第(2)步,否則轉(zhuǎn) 第(3)步;第(6)步結(jié)束。
4.根據(jù)權(quán)利要求1所述的一種支持多核幫助線程的低開銷的塊同步方法,其特征在于步驟二選擇低開銷的塊同步機(jī)制中,單計(jì)數(shù)器 的塊同步機(jī)制由計(jì)算線程的計(jì)算分片操作步驟和預(yù)取幫助線程的操作步驟組成① 計(jì)算線程的計(jì)算分片具體操作步驟如下 第(l)步開始;第(2)步計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步讀數(shù)據(jù),執(zhí)行計(jì)算;第(4)步如果計(jì)算分片結(jié)束,轉(zhuǎn)第(5)步,否則轉(zhuǎn)第(3)步; 第(5)步結(jié)束;② 預(yù)取幫助線程的具體操作步驟如下-第(l)步開始;第(2)步計(jì)算線程與預(yù)取幫助線程開始協(xié)作; 第(3)步計(jì)數(shù)器置0,獲取計(jì)算線程的當(dāng)前工作指針; 第(4)步如果是同步的開始,按幫助預(yù)取線程調(diào)整提前量后的當(dāng)前工作指針推送預(yù)取數(shù)據(jù),否則按幫助預(yù)取線程新的當(dāng)前工作指針推送預(yù)取數(shù)據(jù),計(jì)數(shù)器加l;第(5)步如果計(jì)算結(jié)束,轉(zhuǎn)第(7)步;第(6)步如果計(jì)數(shù)器值大于pushsize,轉(zhuǎn)第(3)步,否則轉(zhuǎn)第(4)步;第(7)步結(jié)束。
全文摘要
本發(fā)明涉及一種支持多核幫助線程的低開銷的塊同步方法,屬于多核計(jì)算機(jī)技術(shù)領(lǐng)域。本發(fā)明在共享緩存的多核架構(gòu)基礎(chǔ)上,針對(duì)多核應(yīng)用中非規(guī)則數(shù)據(jù)缺失的問題,通過為預(yù)取幫助線程引入提前量和低開銷的塊同步以及循環(huán)控制的機(jī)制,降低了計(jì)算線程執(zhí)行的數(shù)據(jù)缺失,減少了共享緩存的污染,提高了計(jì)算線程的執(zhí)行性能,實(shí)現(xiàn)了異核協(xié)同的非規(guī)則數(shù)據(jù)推送。本發(fā)明可廣泛應(yīng)用于未來多核編譯器優(yōu)化及數(shù)據(jù)庫性能優(yōu)化。
文檔編號(hào)G06F9/46GK101561766SQ20091008560
公開日2009年10月21日 申請(qǐng)日期2009年5月26日 優(yōu)先權(quán)日2009年5月26日
發(fā)明者劉昌定, 古志民, 周偉峰, 潔 唐, 博 張, 軼 張, 鄭寧漢, 嘉 陳, 艷 黃 申請(qǐng)人:北京理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
浦东新区| 龙山县| 东明县| 昭觉县| 隆德县| 平顶山市| 公安县| 斗六市| 石河子市| 宁乡县| 东城区| 如东县| 饶河县| 云阳县| 贡嘎县| 石楼县| 平乡县| 庆元县| 平邑县| 崇阳县| 库伦旗| 确山县| 安达市| 清涧县| 鞍山市| 乐昌市| 辽宁省| 晋江市| 双柏县| 洞头县| 南涧| 沙田区| 安泽县| 松阳县| 商都县| 玉溪市| 宜兰县| 曲阜市| 库伦旗| 蒙城县| 平原县|