亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種面向多核平臺(tái)的多線程劃分及靜態(tài)均衡調(diào)度策略的制作方法

文檔序號(hào):9921923閱讀:328來(lái)源:國(guó)知局
一種面向多核平臺(tái)的多線程劃分及靜態(tài)均衡調(diào)度策略的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種面向多核平臺(tái)的多線程劃分及靜態(tài)均衡調(diào)度策略,屬于并行計(jì)算 領(lǐng)域。
【背景技術(shù)】
[0002] 提高處理器性能一般取決于兩個(gè)方面:一方面是處理器的體系結(jié)構(gòu)的發(fā)展;另一 個(gè)方面是半導(dǎo)體工藝的不斷進(jìn)步。美國(guó)斯坦福大學(xué)提出片上多核處理器,為了提高處理器 計(jì)算能力,將多個(gè)內(nèi)核集成到一個(gè)處理器芯片上,而最容易、最簡(jiǎn)單、最基本的一種實(shí)現(xiàn)方 法就是多核。早在上世紀(jì)末,IBM和惠普就已經(jīng)提出雙核處理器的可行性設(shè)計(jì)。2005年4月, intel全球同步首發(fā)基于多核技術(shù)桌面產(chǎn)品Intel Pentium D處理器,正式宣告x86處理器 多核心時(shí)代來(lái)臨。
[0003] 多核技術(shù)是在一個(gè)處理芯片上包含多個(gè)"執(zhí)行內(nèi)核",使處理器能完全并行的執(zhí)行 程序的多線程。如果從操作系統(tǒng)層面來(lái)看,多核就是指多個(gè)處理器,而每個(gè)處理器都獨(dú)立擁 有全部的計(jì)算資源。
[0004] 處理器架構(gòu)從單核發(fā)展到多核架構(gòu)的過(guò)程中,極大地提高了處理器的性能,同時(shí) 也帶來(lái)了一些問(wèn)題。如任務(wù)調(diào)度和負(fù)載均衡問(wèn)題、節(jié)點(diǎn)間的通信、Cache-致性問(wèn)題以及系 統(tǒng)異構(gòu)性問(wèn)題等。
[0005] 其中解決負(fù)載均衡問(wèn)題通常有兩種方案,一種是靜態(tài)調(diào)度,另外一種是動(dòng)態(tài)調(diào)度。 靜態(tài)調(diào)度是指程序在編譯階段,就將循環(huán)迭代任務(wù)近乎平均分配到各個(gè)線程上。而動(dòng)態(tài)調(diào) 度則要到運(yùn)行階段才動(dòng)態(tài)地將任務(wù)分配給空閑的線程,動(dòng)態(tài)調(diào)度無(wú)需過(guò)多的關(guān)心循環(huán)體大 小以及循環(huán)迭代任務(wù)規(guī)模,就能獲得好的負(fù)載均衡性能,同時(shí),也會(huì)帶來(lái)一定的調(diào)度開(kāi)銷。 而且現(xiàn)有的并行計(jì)算過(guò)程中,由于每次線程創(chuàng)建撤銷以及調(diào)度均有一定開(kāi)銷,有些計(jì)算任 務(wù)采用多線程并行后,程序性能會(huì)大幅度下降;另外針對(duì)適合多線程并行的計(jì)算任務(wù),在進(jìn) 行任務(wù)調(diào)度時(shí),需要為多線程分配任務(wù),靜態(tài)調(diào)度在程序運(yùn)行前,就將任務(wù)分解并近乎平均 得分配給各個(gè)線程,當(dāng)分解的任務(wù)大小差異很大時(shí),會(huì)造成各個(gè)線程之間負(fù)載極不平衡,影 響程序運(yùn)行性能。

【發(fā)明內(nèi)容】

[0006] 本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種面向多核平臺(tái)的多線程劃分及靜態(tài)均衡 調(diào)度策略,采用全新設(shè)計(jì)思路,能夠主動(dòng)判斷待處理任務(wù)是否適合多線程并行處理,并針對(duì) 多線程并行處理,實(shí)現(xiàn)任務(wù)調(diào)度時(shí)多線程之間任務(wù)分配的負(fù)載均衡,能夠有效提高程序運(yùn) 行的性能。
[0007] 本發(fā)明為了解決上述技術(shù)問(wèn)題采用以下技術(shù)方案:本發(fā)明設(shè)計(jì)了一種面向多核平 臺(tái)的多線程劃分及靜態(tài)均衡調(diào)度策略,包括如下步驟:
[0008] 步驟001.初始化系統(tǒng)各線程上所對(duì)應(yīng)的負(fù)載G_loadm=0,G_load m表示系統(tǒng)第m個(gè) 線程上所對(duì)應(yīng)的負(fù)載,111={1,一,1},1表示系統(tǒng)線程的數(shù)量;然后針對(duì)待處理任務(wù)進(jìn)行劃 分,獲得計(jì)算邏輯相互獨(dú)立的各個(gè)任務(wù)塊,構(gòu)成任務(wù)塊集合,并且各個(gè)任務(wù)塊不可進(jìn)一步劃 分,并進(jìn)入步驟002;
[0009] 步驟002.針對(duì)任務(wù)塊集合,獲取各個(gè)任務(wù)塊的計(jì)算時(shí)間,分別作為對(duì)應(yīng)任務(wù)塊的 粒度值,并進(jìn)入步驟003;
[0010] 步驟003.獲得任務(wù)塊集合中所有任務(wù)塊粒度值所對(duì)應(yīng)的粒度平均值,并判斷粒度 平均值是否小于等于預(yù)設(shè)粒度平均值,是則將任務(wù)塊集合中所有任務(wù)塊所對(duì)應(yīng)的待處理任 務(wù),任意分配至其中一個(gè)線程上,由該線程針對(duì)該待處理任務(wù)進(jìn)行串行處理,針對(duì)該待處理 任務(wù)的調(diào)度策略結(jié)束;否則進(jìn)入步驟004;
[0011] 步驟004.根據(jù)任務(wù)塊集合中所有任務(wù)塊粒度值所對(duì)應(yīng)的粒度平均值,獲得任務(wù)塊 集合中所有任務(wù)塊粒度值所對(duì)應(yīng)的粒度值方差,并判斷粒度值方差是否小于預(yù)設(shè)方差閾 值,是則進(jìn)入步驟005;否則進(jìn)入步驟006;
[0012] 步驟005.判斷系統(tǒng)線程的數(shù)量Μ是否大于等于任務(wù)塊集合中任務(wù)塊的數(shù)量N,是則 將任務(wù)塊集合中各個(gè)任務(wù)塊一一對(duì)應(yīng)任意分配至各線程當(dāng)中,由該各線程分別針對(duì)所分配 的任務(wù)塊進(jìn)行處理,針對(duì)任務(wù)塊集合中所有任務(wù)塊所對(duì)應(yīng)的待處理任務(wù)的調(diào)度策略結(jié)束; 否則將第i個(gè)任務(wù)塊分配至第m個(gè)線程上,i = {m,m+M,···,m+KM},Κ為大于等于1的整數(shù),m+KM < N,實(shí)現(xiàn)針對(duì)任務(wù)塊集合中各個(gè)任務(wù)塊的分配,由系統(tǒng)各個(gè)線程分別針對(duì)所分配的任務(wù)塊 進(jìn)行處理,針對(duì)任務(wù)塊集合中所有任務(wù)塊所對(duì)應(yīng)的待處理任務(wù)的調(diào)度策略結(jié)束;
[0013] 步驟006.獲得任務(wù)塊集合中所有任務(wù)塊粒度值的總和平均分配至系統(tǒng)Μ個(gè)線程的 平均值,作為系統(tǒng)單線程負(fù)載范圍標(biāo)準(zhǔn)值G_thread avg,同時(shí)判斷任務(wù)塊集合中各任務(wù)塊所 對(duì)應(yīng)的最大粒度值是否大于G_threadavg,是則獲取任務(wù)塊集合中各任務(wù)塊所對(duì)應(yīng)的最大粒 度值與G_thread avg之間的差值,作為系統(tǒng)單線程負(fù)載波動(dòng)范圍值Δ G_thread,然后進(jìn)入步 驟007;否則預(yù)設(shè)系統(tǒng)單線程負(fù)載波動(dòng)范圍值Δ G_thread,然后進(jìn)入步驟007;
[0014]步驟007.提取任務(wù)塊集合中所有大于系統(tǒng)單線程負(fù)載范圍標(biāo)準(zhǔn)值G_threadavd9 粒度值所對(duì)應(yīng)的各個(gè)任務(wù)塊,將該各個(gè)任務(wù)塊一一對(duì)應(yīng)任意分配至各線程當(dāng)中,用該各個(gè) 任務(wù)塊的粒度值分別更新對(duì)應(yīng)各線程上所對(duì)應(yīng)的負(fù)載,并在任務(wù)塊集合中刪除該各個(gè)任務(wù) 塊,將任務(wù)塊集合中剩余各個(gè)任務(wù)塊按其所對(duì)應(yīng)的粒度值由大至小的順序進(jìn)行排序,更新 任務(wù)塊集合,獲得任務(wù)塊集合中任務(wù)塊的數(shù)量Ν',然后進(jìn)入步驟008;
[0015] 步驟〇〇8 ·初始化m = 1,η ' = 1,進(jìn)入步驟009;
[0016] 步驟009 ·判斷G_loadm+G_Cn'是否小于等于G_threadavg+ Δ G_thread,是則將任務(wù) 塊集合中第η '個(gè)任務(wù)塊分配至第m個(gè)線程當(dāng)中,用G_loadm+G_Cn,的值更新第m個(gè)線程上所對(duì) 應(yīng)的負(fù)載6_1 〇&(^,并在任務(wù)塊集合中刪除該任務(wù)塊,更新任務(wù)塊集合,然后進(jìn)入步驟011; 否則進(jìn)入步驟010;其中,G_C n,表示任務(wù)塊集合中粒度值按由小至大順序第η'個(gè)任務(wù)塊所對(duì) 應(yīng)的粒度值;
[0017] 步驟010.判斷η'是否等于Ν',是則進(jìn)入步驟013;否則用n' + l的值更新η',返回步 驟009;
[0018] 步驟011.判斷第m個(gè)線程上所對(duì)應(yīng)的負(fù)載6_1〇8(1111是否大于等于G_threadavg- Δ G_ thread,是則進(jìn)入步驟012;否則令η' =1,并返回步驟009;
[0019]步驟012.判斷m是否等于Μ,是則針對(duì)任務(wù)塊集合中所有任務(wù)塊所對(duì)應(yīng)的待處理任 務(wù)的調(diào)度策略結(jié)束;否則用m+1的值更新m,并令η'=1,然后返回步驟009;
[0020] 步驟013.判斷第m個(gè)線程上所對(duì)應(yīng)任務(wù)塊的數(shù)量是否大于1,是則將第m個(gè)線程上 最后所分配的任務(wù)塊退回至任務(wù)塊集合當(dāng)中,并更新任務(wù)塊集合,然后進(jìn)入步驟014;否則 進(jìn)入步驟015;
[0021] 步驟014.判斷任務(wù)塊集合中是否存在位于步驟013中所退回任務(wù)塊下一個(gè)位置的 任務(wù)塊,是則將任務(wù)塊集合中步驟013中所退回任務(wù)塊的下一個(gè)任務(wù)塊分配至第m個(gè)線程當(dāng) 中,用G_loadm加該任務(wù)塊粒度值的和更新第m個(gè)線程上所對(duì)應(yīng)的負(fù)載6_1<^(1 111,并在任務(wù)塊 集合中刪除該任務(wù)塊,更新任務(wù)塊集合,然后進(jìn)入步驟011;否則返回步驟013;
[0022]步驟015.判斷第m個(gè)線程上所對(duì)應(yīng)任務(wù)塊的數(shù)量是否等于1,是則進(jìn)入步驟016;否 則進(jìn)入步驟017;
[0023]步驟016.判斷第m個(gè)線程上是否存在大于系統(tǒng)單線程負(fù)載范圍標(biāo)準(zhǔn)值6_1:11^3(1£^ 的粒度值所對(duì)應(yīng)的任務(wù)塊,是則進(jìn)入步驟017;否則將第m個(gè)線程上最后所分配的任務(wù)塊退 回至任務(wù)塊集合當(dāng)中,并更
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1