用于轉(zhuǎn)換多線程程序代碼的設(shè)備和方法
【專利摘要】提供了一種用于轉(zhuǎn)換多線程程序代碼的設(shè)備和方法。所述方法包括:根據(jù)同步點將多線程程序代碼劃分為多個語句;通過基于在所述多個語句中包括的指令的數(shù)量合并一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組;擴展或重命名所述多個語句中的每個語句中的變量,使得在所述至少一個循環(huán)組中包括的每個語句針對不同工作組的工作項被執(zhí)行;用工作項合并循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組。
【專利說明】用于轉(zhuǎn)換多線程程序代碼的設(shè)備和方法
[0001]本申請要求于2013年5月3日提交到韓國知識產(chǎn)權(quán)局的第10-2013-0050251號韓國專利申請的優(yōu)先權(quán),該申請整個公開通過引用全部合并于此。
【技術(shù)領(lǐng)域】
[0002]與示例性實施例一致的設(shè)備和方法涉及對程序進行編譯,更具體地,涉及轉(zhuǎn)換多線程程度代碼。
【背景技術(shù)】
[0003]多核或眾核技術(shù)已有了顯著的發(fā)展。另外,在高性能計算領(lǐng)域中,用于執(zhí)行數(shù)據(jù)并行程序的異構(gòu)系統(tǒng)現(xiàn)在正引起注意。在這種情況下,開放計算語言(OpenCL)被提議以滿足要求。OpenCL是用于在諸如中央處理單元(CPU)、圖形處理單元(GPU)、數(shù)字信號處理器(DSP)和其它處理器的異構(gòu)處理平臺上進行并行編程的標(biāo)準(zhǔn)。OpenCL允許在各種平臺上使用同一程序源碼,以便給予軟件開發(fā)者可移植性,并且使他們能夠容易地使用平臺的處理能力。
【發(fā)明內(nèi)容】
[0004]一個或更多個示例性實施例的各方面提供了一種用于轉(zhuǎn)換多線程程序代碼的設(shè)備和方法。
[0005]根據(jù)示例性實施例的一方面,提供了一種用于轉(zhuǎn)換多線程程序代碼的方法,所述方法包括:根據(jù)同步點將多線程程序代碼劃分為多個語句;通過基于在所述多個語句中包括的指令的數(shù)量合并一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組;擴展或重命名所述多個語句中的每個語句中的變量,使得在產(chǎn)生的所述至少一個循環(huán)組中包括的每個語句針對不同工作組的工作項被執(zhí)行;用工作項合并(coalesce)循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組。
[0006]多線程程序代碼可以是OpenCL內(nèi)核代碼或統(tǒng)一計算裝置架構(gòu)(CUDA)內(nèi)核代碼。
[0007]同步點可包括:多線程程序代碼的入口點、屏障函數(shù)和控制結(jié)構(gòu)的入口點中的至少一個。
[0008]所述方法還可包括:基于由多線程程序代碼所使用的存儲器的容量來計算在單個循環(huán)組內(nèi)可交替執(zhí)行的工作組的數(shù)量,其中,產(chǎn)生所述至少一個循環(huán)組的步驟可包括:通過合并所述一個或更多個相鄰語句來產(chǎn)生所述至少一個循環(huán)組,使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組中的指令的數(shù)量接近或等于另一個循環(huán)組,且使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組的語句的數(shù)量不超過計算出的工作組的數(shù)量。
[0009]所述方法還可包括:以預(yù)定方案對轉(zhuǎn)換后的代碼進行優(yōu)化。
[0010]所述方法還可包括:添加在每個語句中設(shè)置變量以指示存儲了將要執(zhí)行的工作組的存儲器偏移量的變量輪換代碼。
[0011]所述方法還可包括:轉(zhuǎn)換語句的代碼,使得所述語句僅僅針對有效的工作組被執(zhí)行。
[0012]轉(zhuǎn)換語句的代碼的步驟可包括:使用條件語句或論斷(predicat1n)來轉(zhuǎn)換語句的代碼。
[0013]所述方法還可包括:用工作組交錯循環(huán)來封閉工作項合并循環(huán)和變量輪換代碼,使得每個語句針對所有工作組被執(zhí)行。
[0014]根據(jù)另一示例性實施例的一方面,提供了一種用于轉(zhuǎn)換多線程程序代碼的設(shè)備,所述設(shè)備包括:代碼劃分器,被配置為根據(jù)同步點將多線程程序代碼劃分為多個語句;循環(huán)組產(chǎn)生器,被配置為通過基于在所述多個語句中包括的指令的數(shù)量合并一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組;變量擴展器(expander) /重命名器,被配置為擴展或重命名所述多個語句中的每個語句中的變量,使得同一循環(huán)組中的語句針對不同的工作組的工作項被序列地執(zhí)行;工作項合并循環(huán)添加器,被配置為用工作項合并循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組。
[0015]多線程程序代碼可以是OpenCL內(nèi)核代碼或CUDA內(nèi)核代碼。
[0016]同步點可包括:多線程程序代碼的入口點、屏障函數(shù)和控制結(jié)構(gòu)的入口點中的至少一個。
[0017]所述設(shè)備還可包括:工作組數(shù)量計算器,被配置為基于由多線程程序代碼所使用的存儲器的容量來計算循環(huán)組中的可執(zhí)行的工作組的數(shù)量,其中,循環(huán)組產(chǎn)生器還被配置為:通過合并所述一個或更多個相鄰語句來產(chǎn)生所述至少一個循環(huán)組,使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組中的指令的數(shù)量接近或等于另一個循環(huán)組,且使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組的語句的數(shù)量不超過計算出的工作組的數(shù)量。
[0018]所述設(shè)備還可包括:代碼優(yōu)化器,被配置為以預(yù)定方案對轉(zhuǎn)換后的代碼進行優(yōu)化。
[0019]所述設(shè)備還可包括:變量輪換代碼添加器,被配置為添加在每個語句中設(shè)置變量以指示存儲了將要執(zhí)行的工作組的存儲器偏移量的變量輪換代碼。
[0020]所述設(shè)備還可包括:代碼轉(zhuǎn)換器,被配置為轉(zhuǎn)換語句的代碼,使得語句僅僅針對有效的工作組被執(zhí)行。
[0021]代碼轉(zhuǎn)換器還可被配置為:使用條件語句或論斷來轉(zhuǎn)換語句的代碼。
[0022]所述設(shè)備還可包括:工作組交錯循環(huán)添加器,被配置為用工作組交錯循環(huán)來封閉工作項合并循環(huán)和變量輪換代碼,使得每個語句針對所有工作組被執(zhí)行。
[0023]根據(jù)另一示例性實施例的一方面,提供了一種用于轉(zhuǎn)換多線程程序代碼的方法,所述方法包括:通過基于在從多線程程序代碼劃分的多個語句中包括的指令的數(shù)量合并所述多個語句之中的一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組;修改所述多個語句,使得在產(chǎn)生的所述至少一個循環(huán)組中包括的每個語句針對不同工作組的工作項被執(zhí)行;用工作項合并循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組。
[0024]其它特征和方面可從下面的詳細描述、附圖和權(quán)利要求變得清楚。
【專利附圖】
【附圖說明】
[0025]通過以下結(jié)合附圖的對示例性實施例的描述,以上和/或其它方面將變得清楚且更容易理解,其中:
[0026]圖1是示出多線程程序執(zhí)行模型的示圖;
[0027]圖2A是示出包括屏障函數(shù)的內(nèi)核代碼的示例的示圖;
[0028]圖2B是示出通過基于工作組要素使工作項序列化從圖2A中的內(nèi)核代碼進行轉(zhuǎn)換而產(chǎn)生的代碼的示例的示圖;
[0029]圖2C是示出圖2B中的產(chǎn)生的代碼的針對工作項的執(zhí)行順序的示圖;
[0030]圖3是示出根據(jù)示例性實施例的用于轉(zhuǎn)換代碼的設(shè)備的框圖;
[0031]圖4A是示出根據(jù)示例性實施例的從圖2A中的內(nèi)核代碼進行轉(zhuǎn)換而產(chǎn)生的代碼的示圖;
[0032]圖4B是示出圖4A中的產(chǎn)生的代碼的針對工作項的執(zhí)行順序的示圖;
[0033]圖4C是示出表示圖4A中的產(chǎn)生的代碼的助記碼的示圖;
[0034]圖5是示出根據(jù)示例性實施例的表示當(dāng)待處理的工作組被動態(tài)分配時的轉(zhuǎn)換結(jié)果的助記碼的示圖;
[0035]圖6是示出根據(jù)示例性實施例的存儲空間的布局的示例的示圖;
[0036]圖7是示出根據(jù)示例性實施例的用于轉(zhuǎn)換內(nèi)核代碼的方法的流程圖。
【具體實施方式】
[0037]提供下面的描述來幫助讀者獲得對描述于此的方法、設(shè)備和/或系統(tǒng)的全面理解。因此,本領(lǐng)域普通技術(shù)人員將會理解描述于此的方法、設(shè)備和/或系統(tǒng)的各種改變、修改和等同物。另外,為了更加清楚和簡明,可省略對公知的功能和構(gòu)造的描述。
[0038]貫穿附圖和詳細描述,除非另有描述,否則相同的附圖標(biāo)號將被理解為表示相同的元件、特征和結(jié)構(gòu)。為了清楚、示意和方便,可夸大這些元件的相對大小和描繪。在下文中,當(dāng)諸如“中的至少一個”的表達位于一列元素之后時,所述表達修飾整列元素而不修飾所述列中的單個元素。
[0039]圖1是示出多線程程序執(zhí)行模型的示圖。
[0040]多線程程序是以共享程序代碼的細粒度(fine-grained)多線程編程語言(諸如OpenCL和CUDA)編寫的程序。例如,多線程程序可包括細粒度單程序多數(shù)據(jù)線程程序。多線程程序代碼包括以O(shè)penCL或CUDA編寫的內(nèi)核代碼,參照內(nèi)核代碼來提供以下描述。
[0041]內(nèi)核代碼可包括一個或更多個語句。語句是構(gòu)成程序的單個指令或有意義的表達,并可包括指令序列。
[0042]在多線程程序執(zhí)行模型中,執(zhí)行域被劃分為多個工作項(例如,工作項111、工作項112和工作項113),使得內(nèi)核代碼可針對每個工作項(例如,工作項111、工作項112和工作項113)被執(zhí)行。這里,可在獨立的線程中交替執(zhí)行每個工作項(例如,工作項111、工作項112和工作項113)。
[0043]當(dāng)工作項將要被同步以共享數(shù)據(jù)時,待同步的工作項(例如,工作項111和工作項112)可被分類在一個工作組110中。也就是說,工作組是待同步的工作項的組,并可包括一個或更多個工作項。能夠在屬于同一工作組的工作項(例如,工作項111和工作項112)之間進行同步,而無法在屬于不同的工作組的工作項(例如,工作項112和工作項113)之間進行同步。圖1展示執(zhí)行域被劃分為15X15個工作項或5X5個工作組的情況。
[0044]同時,內(nèi)核代碼可包括屏障函數(shù)(B卩,屏障指令)。屏障函數(shù)用于使同一工作組中的工作項進行同步。屏障函數(shù)可被稱為同步屏障函數(shù)、同步函數(shù)或屏障。如果內(nèi)核代碼包括屏障函數(shù),則每個工作組中的所有工作項將會被同步,并且無法進行至在屏障函數(shù)之外的語句,直到工作組中的所有工作項到達屏障函數(shù)。
[0045]在下文中,將在待處理的多個工作項在單個處理元件中進行操作的假設(shè)下,詳細描述轉(zhuǎn)換用于并行處理的內(nèi)核代碼的方法。
[0046]圖2A是示出包括屏障函數(shù)的內(nèi)核代碼的示例的示圖,圖2B是示出通過基于工作組單元使工作項序列化從圖2A中的內(nèi)核代碼進行轉(zhuǎn)換而產(chǎn)生的代碼的示例的示圖,圖2C是示出圖2B中的產(chǎn)生的代碼的針對工作項的執(zhí)行順序的示圖。
[0047]在多線程程序執(zhí)行模型的執(zhí)行域被劃分為N個工作組且每個工作組包括M個工作項的假設(shè)下,工作項可由T(i,j)表示,其中,i表示指示相應(yīng)的工作組的在OS i <N的范圍內(nèi)的數(shù)值,j表示指示相應(yīng)的工作項的在范圍O < j < M內(nèi)的數(shù)值。
[0048]為了在低級并行處理器(或者具有少量處理元件的處理器)中執(zhí)行所有NXM個工作項,在單個處理元件中處理各個工作項。為此,工作項將在被稱為工作項序列化、結(jié)構(gòu)化微線程或者工作項合并的處理中被序列化。
[0049]工作項序列化是通過用迭代語句封閉內(nèi)核代碼來轉(zhuǎn)換內(nèi)核代碼,使得內(nèi)核代碼可被執(zhí)行與待序列化的工作項的數(shù)量相等的次數(shù)的處理。此時,迭代語句可被稱為工作項合并循環(huán)(WCL)或線程循環(huán)。
[0050]如圖2A中所示,如果內(nèi)核代碼參照屏障函數(shù)230被劃分為語句S1220和語句S2240,則工作項序列化可基于工作組單元被執(zhí)行,使得參照屏障函數(shù)230被分隔的語句S1220和語句S2240分別被轉(zhuǎn)換為語句SI’ 261和語句S2’ 271,其中,語句SI’ 261和語句S2’ 271產(chǎn)生與語句S1220和語句S2240相同的結(jié)果。可選地,產(chǎn)生兩個工作項合并循環(huán)260和270來分別封閉語句SI’ 261和語句S2’ 271,其中,工作項合并循環(huán)260和270中的每個迭代地執(zhí)行語句SI’ 261和語句S2’ 270。
[0051]已經(jīng)通過基于工作組單元執(zhí)行工作項序列化而被轉(zhuǎn)換的代碼250執(zhí)行每個工作組的工作項。因此,針對如圖2C中所示的序列中的每個工作項執(zhí)行圖2B中的語句S1’261和語句S2’ 271。也就是說,針對屬于工作組i的所有工作項(從T(i,O)到T (i,M-1))執(zhí)行語句SI’ 261,并隨后針對屬于工作組i的所有工作項(從T(i,0)到T(i,M-l))執(zhí)行語句S2’ 271。另外,對屬于工作組i+Ι的所有工作項(從T(i+1,0)到T(i+1,M-1))依次執(zhí)行語句SI,261和語句S2’ 271。這樣,提供基于上述序列中的工作組單元執(zhí)行了工作項序列化的轉(zhuǎn)換后的代碼。
[0052]也就是說,如果通過基于工作組單元執(zhí)行工作項序列化來轉(zhuǎn)換內(nèi)核代碼,則具有屏障函數(shù)的內(nèi)核代碼被轉(zhuǎn)換為各種小尺寸的迭代語句(也就是說,每個都具有較少的指令的多個迭代語句)。迭代語句中的指令數(shù)量的減少導(dǎo)致不太可能找到使得編譯器的指令調(diào)度器或者中央處理單元(CPU)的無序調(diào)度器同時進行執(zhí)行的指令,但是還增加用于具有語義(例如,指令變量的比較、指令變量的增加和分支)的指令的迭代的開銷,使得指令級并行性(ILP)會降低。
[0053]圖3是示出根據(jù)示例性實施例的用于轉(zhuǎn)換代碼的設(shè)備300的框圖。
[0054]參照圖3,用于轉(zhuǎn)換代碼的設(shè)備300包括代碼劃分器310、循環(huán)組產(chǎn)生器320、變量擴展器/重命名器330和工作項合并循環(huán)添加器340。
[0055]代碼劃分器310可根據(jù)同步點將輸入的內(nèi)核代碼劃分為一個或更多個語句。這里,同步點可包括內(nèi)核代碼的入口點、屏障函數(shù)和控制結(jié)構(gòu)的入口點。
[0056]例如,如果內(nèi)核代碼不包括屏障函數(shù),則可將內(nèi)核代碼本身確定為單個語句。在這種情況下,內(nèi)核代碼成為單個語句。
[0057]在另一示例中,如果內(nèi)核代碼包括屏障函數(shù),則可參照屏障函數(shù)將內(nèi)核代碼劃分為兩個語句(即,屏障函數(shù)之前的一個語句和屏障函數(shù)之后的另一語句)。
[0058]可選地,在另一示例中,如果屏障函數(shù)被包括在條件語句中,則可將條件語句的外部劃分為條件語句之前的語句和條件語句之后的語句。另外,可參照屏障函數(shù)將條件語句的內(nèi)部劃分為屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
[0059]另外,在另一示例中,如果屏障函數(shù)被包括在循環(huán)語句中,則循環(huán)語句外部的代碼針對每個工作項被執(zhí)行一次,而循環(huán)語句內(nèi)部的代碼針對每個工作項被執(zhí)行與循環(huán)語句的迭代數(shù)量相等的次數(shù)。因此,循環(huán)語句外部的代碼和循環(huán)語句內(nèi)部的代碼可被分離。換言之,針對循環(huán)語句的外部,可將內(nèi)核代碼劃分為循環(huán)語句之前的語句和循環(huán)語句之后的語句。另外,針對循環(huán)語句的內(nèi)部,可將內(nèi)核代碼劃分為指定循環(huán)條件的語句、屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
[0060]循環(huán)組產(chǎn)生器320可基于由代碼劃分器310劃分的語句中的指令的數(shù)量來產(chǎn)生包括將由工作項合并循環(huán)封閉的一個或更多個語句的循環(huán)組。
[0061]在示例性實施例中,循環(huán)組產(chǎn)生器320可通過基于每個單獨的語句中的指令的數(shù)量合并相鄰語句來產(chǎn)生循環(huán)組,使得每個循環(huán)組中的指令的數(shù)量可變得彼此接近或相等。
[0062]例如,假設(shè)將內(nèi)核代碼劃分為五個語句且可在一個循環(huán)內(nèi)交替執(zhí)行三個工作組,其中,所述五個語句包括具有100個指令的語句S1、具有20個指令的語句S2、具有30個指令的語句S3、具有30個指令的語句S4和具有110個指令的語句S5。在這種情況下,為了使每個循環(huán)組中的指令的數(shù)量彼此接近或相等,循環(huán)組產(chǎn)生器320可產(chǎn)生包括語句SI的第一循環(huán)組(指令的數(shù)量=100)、包括語句S2、S3和S4的第二循環(huán)組(指令的數(shù)量=20+30+30=80)以及包括語句S5的第三循環(huán)組(指令的數(shù)量=110)。
[0063]針對由循環(huán)組產(chǎn)生器320產(chǎn)生的循環(huán)組中的每一個,變量擴展器/重命名器330可擴展或重命名每個語句中的變量,使得同一循環(huán)組中的語句針對不同工作組的工作項被序列地執(zhí)行。
[0064]在示例性實施例中,變量擴展器/重命名器330可對每個語句中的變量執(zhí)行標(biāo)量擴展或者重命名所述變量,使得同一循環(huán)組中的每個語句針對不同工作組的工作項被序列地執(zhí)行。在這種情況下,執(zhí)行了標(biāo)量擴展的變量可以是由每個工作項專有地使用的私有變量,并且將要被重命名的變量可以是在每個工作組內(nèi)共享的局部變量。
[0065]由于標(biāo)量擴展,屬于每個工作組的工作項可在不同的位置具有變量。另外,通過重命名變量,可針對每個語句為將要執(zhí)行的工作組設(shè)置不同的數(shù)據(jù)位置。
[0066]同時,為了保持內(nèi)核代碼的語義完整,當(dāng)在單個循環(huán)組內(nèi)執(zhí)行多個語句時,可以以針對所有工作組執(zhí)行所有語句的方式或者針對不同的工作組執(zhí)行每個語句的方式執(zhí)行轉(zhuǎn)換后的代碼。因此,將針對同一工作組執(zhí)行屬于轉(zhuǎn)換后的代碼的不同循環(huán)組的相鄰語句。另夕卜,將針對不同工作組執(zhí)行屬于轉(zhuǎn)換后的代碼的同一循環(huán)組的相鄰語句,使得語句越快出現(xiàn)在內(nèi)核代碼中,給予針對其執(zhí)行所述語句的工作組的數(shù)量就越多。例如,假設(shè)語句Si屬于第一循環(huán)組,語句S2、語句S3和語句S4屬于第二循環(huán)組,語句S5屬于第三循環(huán)組,且針對工作組i執(zhí)行語句S2。在這種情況下,在第二循環(huán)組的語句S2、語句S3和語句S4之中,語句S2最早出現(xiàn)在內(nèi)核代碼中,使得針對工作組1-Ι和工作組i_2分別執(zhí)行語句S3和S4。另外,語句SI和語句S2是屬于不同循環(huán)組的相鄰語句,因此針對同一工作組i執(zhí)行語句SI和語句S2,類似地,針對同一工作組1-2執(zhí)行語句S4和語句S5。
[0067]在示例性實施例中,當(dāng)擴展或重命名每個語句中的變量時,變量擴展器/重命名器330可考慮每個語句的工作組。
[0068]工作項合并循環(huán)添加器340可產(chǎn)生并添加封閉在循環(huán)組產(chǎn)生器320中產(chǎn)生的每個循環(huán)組的工作項合并循環(huán)。
[0069]另外,設(shè)備300還可包括工作組數(shù)量計算器315,工作組數(shù)量計算器315被配置為計算在同一工作項合并循環(huán)內(nèi)可交替執(zhí)行的工作組的數(shù)量。
[0070]在示例性實施例中,通過考慮由代碼劃分器310分隔的語句的數(shù)量和用于每個工作組的存儲器空間,工作組數(shù)量計算器315可計算可同時交替執(zhí)行的工作組的數(shù)量。例如,如果可自由使用的存儲器大小足夠大,則工作組數(shù)量計算器315可確定可交替執(zhí)行的工作組的數(shù)量接近或等于單獨的語句的數(shù)量??蛇x地,如果可自由使用的存儲器大小不足夠大,則工作組數(shù)量計算器315可相應(yīng)地減少可交替執(zhí)行的工作組的數(shù)量,并通過考慮可自由使用的存儲器大小來合理地計算可交替執(zhí)行的工作組的數(shù)量。
[0071]在這種情況下,為了防止在單個循環(huán)組中包括的語句的數(shù)量超出由工作組數(shù)量計算器315計算出的可同時交替執(zhí)行的工作組的數(shù)量,循環(huán)組產(chǎn)生器320在產(chǎn)生循環(huán)組時可考慮計算出的工作組的數(shù)量。
[0072]另外,設(shè)備300還可包括代碼轉(zhuǎn)換器350,代碼轉(zhuǎn)換器350被配置為添加或轉(zhuǎn)換代碼,使得每個語句僅針對有效的工作組被執(zhí)行。例如,假設(shè)語句SI針對工作組i被執(zhí)行,語句S2針對工作組1-Ι被執(zhí)行,且工作組在O < i < N的范圍內(nèi)。在這種情況下,在i = O的條件下,語句S2將針對工作組-1被執(zhí)行,但是工作組-1不存在。另外,在條件i = N下,語句SI將針對工作組N被執(zhí)行,但是工作組N不存在。因此,在i = O的條件下,語句S2無法被執(zhí)行,且在i = N的條件下,語句SI無法被執(zhí)行。因此,代碼轉(zhuǎn)換器350可添加條件語句以使每個語句僅針對有效的工作組被執(zhí)行,或者可轉(zhuǎn)換相應(yīng)的語句的代碼以使用論斷。
[0073]另外,設(shè)備300還可包括代碼優(yōu)化器360,代碼優(yōu)化器360被配置為對轉(zhuǎn)換后的代碼進行優(yōu)化。
[0074]在示例性實施例中,代碼優(yōu)化器360可使用各種預(yù)設(shè)的循環(huán)優(yōu)化方案或標(biāo)量優(yōu)化方案對代碼進行優(yōu)化。例如,如果代碼已經(jīng)被轉(zhuǎn)換為使得每個語句僅針對有效的工作組被執(zhí)行,則代碼優(yōu)化器360可通過循環(huán)外提(unswitching)對轉(zhuǎn)換后的代碼進行優(yōu)化,或者可通過標(biāo)量替換將私有變量從陣列變?yōu)槠胀ㄗ兞俊?br>
[0075]另外,設(shè)備300還可包括變量輪換(rotat1n)代碼添加器370,變量輪換代碼添加器370被配置為添加使得每個語句中的變量指示存儲了將要執(zhí)行的工作組的存儲器偏移量的變量輪換代碼。也就是說,變量輪換代碼是用于每個語句中設(shè)置變量來指示存儲了將要執(zhí)行的工作組的存儲器偏移量的代碼。
[0076]另外,設(shè)備300還可包括工作組交錯循環(huán)添加器380,工作組交錯循環(huán)添加器380被配置為產(chǎn)生并添加工作組交錯循環(huán),以封閉所有工作項合并循環(huán)和變量輪換代碼,使得語句可針對所有工作組被執(zhí)行。
[0077]圖4A是示出從圖2A中的內(nèi)核代碼進行轉(zhuǎn)換而產(chǎn)生的代碼的示圖,圖4B是所述產(chǎn)生的代碼的針對工作項的執(zhí)行順序的示圖,圖4C是示出表示圖4A中的產(chǎn)生的代碼的助記碼的示圖。
[0078]參照圖4A至圖4C,示出根據(jù)示例性實施例進行轉(zhuǎn)換而產(chǎn)生的代碼410。
[0079]換言之,在圖4A中的產(chǎn)生的代碼410中,交替執(zhí)行兩個工作組。也就是說,按照針對工作組i_l的工作項(T(1-1,0))執(zhí)行語句S2’’ 443并隨后針對工作組i的工作項0(T(i,0))執(zhí)行語句SI’’ 441的順序,而不是按照針對工作組i的工作項0(T(i,0))執(zhí)行語句SI’ ’ 441并隨后針對工作組i的工作項I (T(1-1,O))執(zhí)行語句SI’ ’ 441的順序來執(zhí)行產(chǎn)生的代碼。換言之,后面的語句執(zhí)行具有與前面的語句所執(zhí)行的工作項的數(shù)值相比減小了 I的數(shù)值的工作項。這樣的執(zhí)行順序可被表示為單個迭代語句(也就是說,工作項合并循環(huán)),并因此可在序列化處理期間產(chǎn)生較少的迭代語句。
[0080]同時,語句SI’’ 441和語句S2’’ 443可被依次安排在代碼中,但是使用獨立的數(shù)據(jù),使得數(shù)據(jù)級并行性(DLP)可被達到。
[0081]變量輪換代碼430是在每個語句中設(shè)置變量以指示存儲了將要執(zhí)行的工作組的存儲器偏移量的代碼,并且變量輪換代碼430由變量輪換代碼添加器370來添加。
[0082]在示例性實施例中,在所有工作組除了存儲器偏移量以外具有相同的變量布局的情況下,變量輪換代碼430可被配置為調(diào)整變量的引用/指針的偏移量。例如,在代碼包括兩個變量X和I的情況下,可通過聲明與具有X和I的字段的結(jié)構(gòu)類似的具有χΙΡ I,的字段的結(jié)構(gòu)來執(zhí)行重命名,并隨后分別將X’和y’的字段中的變量輸入到X和y的字段。在這種情況下,變量輪換代碼可以是將特定偏移地址輸入到在保持變量的過程中使用的結(jié)構(gòu)的引用/指針的代碼。
[0083]同時,工作組交錯循環(huán)420是被插入以針對所有工作組執(zhí)行所有語句441和語句443的循環(huán)。在某些情況下,在構(gòu)成工作組交錯循環(huán)420的迭代語句的開頭和結(jié)尾處,語句SI’’ 441或語句S2’’ 443將不被執(zhí)行。例如,如果工作組在O < i < N的范圍內(nèi),如果工作組i是0,工作組I不存在,則語句S2’’ 443無法被執(zhí)行。另外,如果工作組i是N且工作組N不存在,則語句SI’’ 441無法被執(zhí)行。因此,為了使語句SI’’ 441或語句S2’’ 443滿足各自的執(zhí)行條件,代碼轉(zhuǎn)換器450對語句Sl’’441或語句S2’’443的每個代碼進行轉(zhuǎn)換。在這種情況下,就像如圖4C中所示的代碼那樣,可利用條件語句或論斷。
[0084]也就是說,當(dāng)使用條件語句時,代碼優(yōu)化器360可通過循環(huán)外提對轉(zhuǎn)換后的代碼進行優(yōu)化,當(dāng)使用論斷時,代碼優(yōu)化器360可通過論斷分析對轉(zhuǎn)換后的代碼進行優(yōu)化。
[0085]圖5是示出根據(jù)示例性實施例的表示當(dāng)待處理的工作組被動態(tài)分配時的轉(zhuǎn)換后的代碼的助記碼的示圖。圖4C示出待處理的工作組被賦予從O到N-1的數(shù)值的示例,且相同的處理方法可適用于待處理的工作組被動態(tài)地賦予的情況。在圖5中,假設(shè)工作組(WG)(在第三行)響應(yīng)于空隊列被設(shè)為無效,且如果工作組(WG)被設(shè)為無效,則一組變量(Vl)(在第五行)被設(shè)為無效。
[0086]圖6是示出根據(jù)示例性實施例的存儲器空間的布局的示圖。
[0087]為了實現(xiàn)多線程程序,可將系統(tǒng)存儲器地址空間劃分為全局存儲器、局部存儲器和私有存儲器。全局存儲器是在整個域的所有工作組/工作項之間共享的用于存儲數(shù)據(jù)的存儲器,局部存儲器是在同一工作組的工作項之間共享的用于存儲數(shù)據(jù)的存儲器,私有存儲器是由單個工作組專有地使用的用于存儲數(shù)據(jù)的存儲器。
[0088]不同組的局部存儲器和私有存儲器被分配到每個工作組,并在相應(yīng)的工作組的生命期內(nèi)使用。因此,如果局部存儲器和私有存儲器在相應(yīng)的工作組的生命期過去之后被重新分配到不同的工作組,則各個工作組可使用局部存儲器和私有存儲器。因此,如圖6的示例中所示,可執(zhí)行所有工作組,使得三組局部存儲器LMl和私有存儲器PMl、局部存儲器LM2和私有存儲器PM2以及局部存儲器LM3和私有存儲器PM3被保護并依次分配到相應(yīng)的工作組。
[0089]例如,可這樣執(zhí)行工作組:工作組O被分配有局部存儲器LMl和私有存儲器PM1,工作組I被分配有局部存儲器LM2和私有存儲器PM2,工作組2被分配有局部存儲器LM3和私有存儲器PM3。在這種情況下,當(dāng)工作組O被完成時,局部存儲器LMl和私有存儲器PMl被重新分配到下一個工作組(例如,工作組3)。
[0090]圖7是示出根據(jù)示例性實施例的用于轉(zhuǎn)換內(nèi)核代碼的方法的流程圖。
[0091]參照圖7,用于轉(zhuǎn)換內(nèi)核代碼的方法包括在操作710根據(jù)同步點將內(nèi)核代碼劃分為一個或更多個語句。同步點可包括內(nèi)核代碼的入口點、屏障函數(shù)和控制結(jié)構(gòu)的入口點。
[0092]例如,如果內(nèi)核代碼不包括屏障函數(shù),則參照內(nèi)核代碼的入口點,整個內(nèi)核代碼被視為單個語句。
[0093]在另一示例中,如果內(nèi)核代碼包括屏障函數(shù),則可參照屏障函數(shù)將內(nèi)核代碼劃分為屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
[0094]另外,在另一示例中,如果屏障函數(shù)被包括在條件語句中,則可將條件語句的外部劃分為條件語句之前的語句和條件語句之后的語句。另外,可參照屏障函數(shù)將條件語句的內(nèi)部劃分為屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
[0095]另外,在另一示例中,如果屏障函數(shù)被包括在循環(huán)語句中,則循環(huán)語句外部的代碼針對每個工作項被執(zhí)行一次,而循環(huán)語句內(nèi)部的代碼針對每個工作組被執(zhí)行與循環(huán)語句的迭代數(shù)量相等的次數(shù)。因此,可將循環(huán)語句的外部劃分為循環(huán)語句之前的語句和循環(huán)語句之后的語句。另外,可將循環(huán)語句的內(nèi)部劃分為指定循環(huán)條件的語句、屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
[0096]在操作720,基于在每個單獨的語句中包括的指令的數(shù)量來產(chǎn)生包括一個或更多個語句且將由工作項合并循環(huán)封閉的循環(huán)組。
[0097]在示例性實施例中,通過基于每個單獨的語句中的指令的數(shù)量合并相鄰語句來產(chǎn)生循環(huán)組,使得在每個循環(huán)組中包括的指令的數(shù)量可變得彼此接近或相等。
[0098]例如,假設(shè)將內(nèi)核代碼劃分為五個語句且可在一個循環(huán)內(nèi)交替執(zhí)行三個工作組,其中,所述五個語句包括具有100個指令的S1、具有20個指令的語句S2、具有30個指令的語句S3、具有30個指令的語句S4和具有110個指令的語句S5。在這種情況下,為了使在每個循環(huán)組中的指令的數(shù)量彼此接近或相等,可產(chǎn)生包括語句SI的第一循環(huán)組(指令的數(shù)量=100)、包括語句S2、S3和S4的第二循環(huán)組(指令的數(shù)量=20+30+30 = 80)以及包括語句S5的第三循環(huán)組(指令的數(shù)量=110)。
[0099]在操作730,可使用標(biāo)量擴展來擴展每個語句中的變量,或者重命名所述變量。
[0100]在示例性實施例中,可使用標(biāo)量擴展來擴展循環(huán)組中的每個語句中的變量,或者可重命名所述變量,使得循環(huán)組的每個語句針對不同工作組的工作項被序列地執(zhí)行。在這種情況下,將要被擴展的變量可以是由每個工作項專有地使用的私有變量,將要被重命名的變量可以是僅僅在同一工作組內(nèi)共享的局部變量。
[0101]由于標(biāo)量擴展,同一工作組的每個工作項可在不同位置具有變量??蛇x地,由于重命名變量,每個語句可指定將要執(zhí)行的工作組的不同的數(shù)據(jù)位置。
[0102]同時,為了保持內(nèi)核代碼的語義完整,當(dāng)在單個循環(huán)組內(nèi)執(zhí)行多個語句時,將以針對所有工作組執(zhí)行所有語句的方式或者針對不同的工作組執(zhí)行每個語句的方式執(zhí)行轉(zhuǎn)換后的代碼。因此,將針對同一工作組執(zhí)行屬于轉(zhuǎn)換后的代碼的不同循環(huán)組的相鄰語句。另夕卜,將針對不同工作組執(zhí)行屬于轉(zhuǎn)換后的代碼的同一循環(huán)組的相鄰語句,使得語句越快出現(xiàn)在內(nèi)核代碼中,給予針對其執(zhí)行所述語句的工作組的數(shù)量就越多。例如,假設(shè)語句Si屬于第一循環(huán)組,語句S2、語句S3和語句S4屬于第二循環(huán)組,語句S5屬于第三循環(huán)組,且針對工作組i執(zhí)行語句S2。在這種情況下,在第二循環(huán)組的語句S2、語句S3和語句S4之中,語句S2最早出現(xiàn)在內(nèi)核代碼中,使得針對工作組1-Ι和工作組i_2分別執(zhí)行語句S3和S4。另外,語句SI和語句S2是屬于不同循環(huán)組的相鄰語句,因此針對同一工作組i執(zhí)行語句SI和語句S2,類似地,針對同一工作組1-2執(zhí)行語句S4和語句S5。
[0103]在示例性實施例中,當(dāng)使用標(biāo)量擴展來擴展每個語句中的變量或者重命名所述變量時,可考慮上述的每個語句的工作組。
[0104]在操作740,由工作項合并循環(huán)來封閉每個產(chǎn)生的循環(huán)組。
[0105]另外,用于轉(zhuǎn)換代碼的方法還可包括在操作715計算在單個工作項合并循環(huán)內(nèi)可交替執(zhí)行的工作組的數(shù)量。在示例性實施例中,通過考慮在操作710中分隔的語句的數(shù)量和用于每個工作組的存儲器大小,可計算交替執(zhí)行的工作組的數(shù)量。例如,如果可自由使用的存儲器大小足夠大,則可確定可交替執(zhí)行的工作組的數(shù)量等于單獨的語句的數(shù)量??蛇x地,如果可自由使用的存儲器大小不足夠大,則可根據(jù)可自由使用的存儲器大小合理地減少交替執(zhí)行的工作組的數(shù)量。
[0106]在這種情況下,在產(chǎn)生循環(huán)組的操作720期間,考慮在操作715計算出的工作組的數(shù)量,使得屬于單個循環(huán)組的語句的數(shù)量不會超出計算出的工作組的數(shù)量。
[0107]另外,用于轉(zhuǎn)換代碼的方法還可包括添加或轉(zhuǎn)換代碼以使得每個語句可針對有效的工作組被執(zhí)行的操作750。例如,假設(shè)語句SI和語句S2分別針對工作組i和工作組i_l被執(zhí)行,且每個工作組在O < i < N的范圍內(nèi)。此時,如果給定i = O的條件,則語句S2將針對工作組-1被執(zhí)行,但是工作組-1無效。因此,在i = 0的條件下,語句S2無法被執(zhí)行,類似地,在i = N的條件下(工作組N無效),語句SI無法被執(zhí)行。在這種情況下,可使用條件語句或使用論斷僅針對有效的工作組執(zhí)行每個語句。
[0108]另外,用于轉(zhuǎn)換代碼的方法還可包括以預(yù)定的方案對代碼進行優(yōu)化的操作760。在示例性實施例中,可采用循環(huán)優(yōu)化和標(biāo)量優(yōu)化中的至少一種。例如,如果代碼已經(jīng)被轉(zhuǎn)換為使得每個語句僅針對有效的工作組被執(zhí)行,則可通過循環(huán)外提對轉(zhuǎn)換后的代碼進行優(yōu)化,或者可通過標(biāo)量替換將一些私有變量從陣列變?yōu)槠胀ㄗ兞俊?br>
[0109]用于轉(zhuǎn)換代碼的方法還可包括添加變量輪換代碼的操作770,其中,變量輪換代碼在每個語句中設(shè)置變量,以指示存儲了將要執(zhí)行的工作組的存儲偏移量。
[0110]另外,用于轉(zhuǎn)換代碼的方法還可包括:操作780,用工作組交錯循環(huán)來封閉所有工作項合并循環(huán),使得語句能夠針對所有工作組被執(zhí)行。此時,如果變量輪換代碼被添加,則工作組交錯循環(huán)可將變量輪換代碼和工作項合并循環(huán)封閉在一起。
[0111]通過根據(jù)一個或更多個示例性實施例使OpenCL或CUDA程序代碼序列化,可能在具有數(shù)量相對少的處理元件的裝置中依次執(zhí)行多個工作組。
[0112]另外,由于根據(jù)一個或更多個示例性實施例,在序列化期間產(chǎn)生較低數(shù)量的迭代語句,因此可減少由迭代語句導(dǎo)致的開銷。
[0113]另外,由于根據(jù)一個或更多個示例性實施例,在迭代語句中包括的指令的數(shù)量增力口,且內(nèi)核代碼中的每個部分使用不同的數(shù)據(jù)執(zhí)行計算,因此有更大的可能性找到可同時執(zhí)行的指令,引起處理性能改進。
[0114]可在一個或更多個計算機可讀存儲介質(zhì)中記錄、存儲或固定上述方法和/操作,其中,計算機可讀存儲介質(zhì)包括將由計算機實現(xiàn)以促使處理器運行或執(zhí)行程序指令的程序指令。所述介質(zhì)還可單獨地或與程序指令結(jié)合地包括數(shù)據(jù)文件、數(shù)據(jù)結(jié)構(gòu)等。
[0115]計算機可讀存儲介質(zhì)的示例包括:磁介質(zhì)(諸如硬盤、軟盤和磁帶)、磁光介質(zhì)(諸如光磁盤)、專門被配置為存儲并執(zhí)行程序指令的硬件裝置(諸如只讀存儲器(ROM)、隨機存取存儲器(RAM)、閃存等)。程序指令的示例包括諸如由編輯器生成的機器代碼和包含可由計算機使用解釋器執(zhí)行的更高級代碼的文件。描述的硬件裝置可被配置為用作一個或更多個軟件模塊,以便執(zhí)行上述操作和方法,反之亦然。另外,計算機可讀存儲介質(zhì)可被分布在通過網(wǎng)絡(luò)連接的計算機系統(tǒng)之中,且計算機可讀代碼或程序指令可以以分散的方式存儲和執(zhí)行。另外,本領(lǐng)域的程序員可容易地推斷出用于實現(xiàn)這些示例性實施例的功能程序、代碼或代碼段。
[0116]本領(lǐng)域的技術(shù)人員可理解:在不修改本發(fā)明構(gòu)思的技術(shù)思想或?qū)嵸|(zhì)特性的情況下,可作出各種特定修改。因此,以上公開的示例性實施例將被視為說明性的。本發(fā)明的范圍在權(quán)利要求及其等同物中限定。
【權(quán)利要求】
1.一種用于轉(zhuǎn)換多線程程序代碼的方法,所述方法包括: 根據(jù)同步點將多線程程序代碼劃分為多個語句; 通過基于在所述多個語句中包括的指令的數(shù)量合并一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組; 擴展或重命名所述多個語句中的變量,使得在產(chǎn)生的所述至少一個循環(huán)組中包括的每個語句針對不同工作組的工作項被執(zhí)行; 用工作項合并循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組。
2.如權(quán)利要求1所述的方法,其中,多線程程序代碼是開放計算語言(OpenCL)內(nèi)核代碼或統(tǒng)一計算裝置架構(gòu)(CUDA)內(nèi)核代碼。
3.如權(quán)利要求1所述的方法,其中,同步點包括:多線程程序代碼的入口點、屏障函數(shù)和控制結(jié)構(gòu)的入口點中的至少一個。
4.如權(quán)利要求1所述的方法,還包括: 基于由多線程程序代碼所使用的存儲器的容量來計算產(chǎn)生的所述至少一個循環(huán)組的可執(zhí)行的工作組的數(shù)量, 其中,產(chǎn)生所述至少一個循環(huán)組的步驟包括:通過根據(jù)計算出的可執(zhí)行的工作組的數(shù)量合并所述一個或更多個相鄰語句來產(chǎn)生所述至少一個循環(huán)組,使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組中的指令的數(shù)量接近或等于另一個循環(huán)組,且使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組的語句的數(shù)量不超過計算出的工作組的數(shù)量。
5.如權(quán)利要求1所述的方法,還包括: 以預(yù)定方案對轉(zhuǎn)換后的代碼進行優(yōu)化。
6.如權(quán)利要求5所述的方法,其中,優(yōu)化的步驟包括:通過采用循環(huán)優(yōu)化和標(biāo)量優(yōu)化中的至少一種對轉(zhuǎn)換后的代碼進行優(yōu)化。
7.如權(quán)利要求1所述的方法,還包括: 添加用于在所述多個語句中設(shè)置變量以指示存儲了將要執(zhí)行的工作組的存儲器偏移量的變量輪換代碼。
8.如權(quán)利要求1所述的方法,還包括: 轉(zhuǎn)換所述多個語句之中的語句的代碼,使得所述語句僅僅針對有效的工作組被執(zhí)行。
9.如權(quán)利要求8所述的方法,其中,轉(zhuǎn)換語句的代碼的步驟包括:使用條件語句或論斷來轉(zhuǎn)換語句的代碼。
10.如權(quán)利要求7所述的方法,還包括: 用工作組交錯循環(huán)來封閉工作項合并循環(huán)和變量輪換代碼,使得所述多個語句中的每個語句針對所有工作組被執(zhí)行。
11.如權(quán)利要求1所述的方法,其中,劃分的步驟包括:當(dāng)多線程程序代碼包括屏障函數(shù)時,將多線程程序代碼劃分為屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
12.如權(quán)利要求1所述的方法,其中,劃分的步驟包括:當(dāng)多線程程序代碼包括在條件語句中包含的屏障函數(shù)時,將多線程程序代碼劃分為條件語句之前的語句和條件語句之后的語句,并將條件語句的內(nèi)部劃分為屏障函數(shù)之前的語句和屏障函數(shù)之后的語句。
13.一種用于轉(zhuǎn)換多線程程序代碼的設(shè)備,所述設(shè)備包括: 代碼劃分器,被配置為根據(jù)同步點將多線程程序代碼劃分為多個語句; 循環(huán)組產(chǎn)生器,被配置為通過基于在所述多個語句中包括的指令的數(shù)量合并一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組; 變量擴展器/重命名器,被配置為擴展或重命名所述多個語句中的變量,使得同一循環(huán)組中的每個語句針對不同工作組的工作項被序列地執(zhí)行; 工作項合并循環(huán)添加器,被配置為用工作項合并循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組。
14.如權(quán)利要求13所述的設(shè)備,其中,多線程程序代碼是開放計算語言(OpenCL)內(nèi)核代碼或統(tǒng)一計算裝置架構(gòu)(CUDA)內(nèi)核代碼。
15.如權(quán)利要求13所述的設(shè)備,其中,同步點包括:多線程程序代碼的入口點、屏障函數(shù)和控制結(jié)構(gòu)的入口點中的至少一個。
16.如權(quán)利要求13所述的設(shè)備,還包括: 工作組數(shù)量計算器,被配置為基于由多線程程序代碼所使用的存儲器的容量來計算產(chǎn)生的所述至少一個循環(huán)組的可執(zhí)行的工作組的數(shù)量, 其中,循環(huán)組產(chǎn)生器還被配置為:通過根據(jù)計算出的可執(zhí)行的工作組的數(shù)量合并所述一個或更多個相鄰語句來產(chǎn)生所述至少一個循環(huán)組,使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組中的指令的數(shù)量接近或等于另一個循環(huán)組,且使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組的語句的數(shù)量不超過計算出的工作組的數(shù)量。
17.如權(quán)利要求13所述的設(shè)備,還包括: 代碼優(yōu)化器,被配置為以預(yù)定方案對轉(zhuǎn)換后的代碼進行優(yōu)化。
18.如權(quán)利要求13所述的設(shè)備,還包括: 變量輪換代碼添加器,被配置為添加用于在所述多個語句中設(shè)置變量以指示存儲了將要執(zhí)行的工作組的存儲器偏移量的變量輪換代碼。
19.如權(quán)利要求13所述的設(shè)備,還包括: 代碼轉(zhuǎn)換器,被配置為轉(zhuǎn)換所述多個語句之中的語句的代碼,使得所述語句僅僅針對有效的工作組被執(zhí)行。
20.如權(quán)利要求19所述的設(shè)備,其中,代碼轉(zhuǎn)換器還被配置為:使用條件語句或論斷來轉(zhuǎn)換語句的代碼。
21.如權(quán)利要求18所述的設(shè)備,還包括: 工作組交錯循環(huán)添加器,被配置為用工作組交錯循環(huán)來封閉工作項合并循環(huán)和變量輪換代碼,使得所述多個語句中的每個語句針對所有工作組被執(zhí)行。
22.一種用于轉(zhuǎn)換多線程程序代碼的方法,所述方法包括: 通過基于在從多線程程序代碼劃分的多個語句中包括的指令的數(shù)量合并所述多個語句之中的一個或更多個相鄰語句來產(chǎn)生至少一個循環(huán)組; 修改所述多個語句,使得在產(chǎn)生的所述至少一個循環(huán)組中包括的每個語句針對不同工作組的工作項被執(zhí)行; 用工作項合并循環(huán)分別封閉產(chǎn)生的所述至少一個循環(huán)組中的每個循環(huán)組。
23.如權(quán)利要求22所述的方法,還包括: 基于由多線程程序代碼所使用的存儲器的容量來計算產(chǎn)生的所述至少一個循環(huán)組的可執(zhí)行的工作組的數(shù)量, 其中,產(chǎn)生所述至少一個循環(huán)組的步驟包括:通過根據(jù)計算出的可執(zhí)行的工作組的數(shù)量合并所述一個或更多個相鄰語句來產(chǎn)生所述至少一個循環(huán)組,使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組中的指令的數(shù)量接近或等于另一個循環(huán)組,且使得產(chǎn)生的所述至少一個循環(huán)組中的每一個循環(huán)組的語句的數(shù)量不超過計算出的工作組的數(shù)量。
24.如權(quán)利要求22所述的方法,還包括: 添加用于在所述多個語句中設(shè)置變量以指示存儲了將要執(zhí)行的工作組的存儲器偏移量的變量輪換代碼。
【文檔編號】G06F9/44GK104133668SQ201410184147
【公開日】2014年11月5日 申請日期:2014年5月4日 優(yōu)先權(quán)日:2013年5月3日
【發(fā)明者】金圣建, 劉東勛, 李振錫, 黃錫重 申請人:三星電子株式會社