TWI455025B - 根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體 - Google Patents

根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體 Download PDF

Info

Publication number
TWI455025B
TWI455025B TW100147402A TW100147402A TWI455025B TW I455025 B TWI455025 B TW I455025B TW 100147402 A TW100147402 A TW 100147402A TW 100147402 A TW100147402 A TW 100147402A TW I455025 B TWI455025 B TW I455025B
Authority
TW
Taiwan
Prior art keywords
loop
processor
data
guess
index
Prior art date
Application number
TW100147402A
Other languages
English (en)
Other versions
TW201246070A (en
Inventor
Jin Lin
Nishkam Ravi
Xinmin Tian
John L Ng
Renat V Valiullin
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of TW201246070A publication Critical patent/TW201246070A/zh
Application granted granted Critical
Publication of TWI455025B publication Critical patent/TWI455025B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (AREA)

Description

根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體
本發明大致關係於計算的領域。更明確地說,本發明之實施例大致關於根據迴路分裂及/或索引陣列的迴路並列化。
一種增加計算速度的方式為利用並列計算。大量真實世界應用具有不規則控制流量或資料流量對現行先進最佳化編譯器的漸進改良造成很大挑戰,因為這些不規則控制流量及資料流量可能經常不是編譯時間可分析的。這隨後可能禁止或減少重要的迴路最佳化,例如並列化及向量化。
在並列化迴路上之一般看法,具有此不規則控制流量及/或資料流量主要是針對免除或減少迴路承載執行控制流量或資料流量相關性。因此,對於如何有效完成一般迴路最佳化的控制及資料猜想議題(例如並列化、向量化、迴路分佈、及融合)仍待解決。
在以下說明中,各種特定細節係加以說明,以提供對各種實施例之全盤了解。然而,本發明之各種實施例可以在沒有這些特定細節下實施。在其他例子中,已知方法、程序、組件及電路並未加以詳細說明,以避免模糊本發明 之特定實施例。再者,本發明之實施例之各種態樣可以使用各種手段,例如積體半導體電路(”硬體”)、電腦可讀取指令組織成一或更多程式(“軟體”)或硬體及軟體的部份組合。為了本案揭示之目的參考”邏輯”應表示硬體、軟體(包含例如微碼,其控制處理器的操作者)、或其部份組合者。
於此討論的部份實施例可以根據迴路分裂及/或索引陣列提供迴路並列化。如上所討論,有關如何有效地使用於一般迴路最佳化的控制與資料猜想議題(例如並列化、向量化、迴路分佈、及融化)仍待解決。為此,迴路並列化在一實施例中可以根據迴路分裂加以完成。在部份實施例中,編譯器框架可以延伸以統一控制及資料猜想,這完成更多迴路最佳化,特別是並列化。同時,迴路分裂技術(例如根據誤猜驅動迴路分裂)可能允許更多迴路被猜想最佳化。再者,(懶惰)檢視碼產生方案可能使隨後分析及最佳化,而不必任何改變,以容許猜想資訊。
另外,為了改良速度,部份處理器可以利用多個/許多處理核心。通常,為了運用多個/許多核心架構,碼必須並列執行。寫入並列程式可以是很難工作,並且因此程式/應用程式本質上係串列的。對於具有零資料相依性的迴路中,自動並列可以用以切段的碼,其可以是禁止並列。對於沒有資料相依性的迴路這通常為真。具有資料/控制相依性的自動並列化迴路係困難的問題。
在一實施例中,常見的具有某類型之資料/控制相關性的自動並列化迴路的問題是可以根據索引陣列加以解決。在部份實施例中,索引陣列可以被產生(例如,藉由編譯器)並被使用以分割(及可能重新排列)遞迴空間,以並列化/最佳化迴路。例如,資料/控制流量分析(及碼轉換)可以在編譯時間完成,同時遞迴次空間的值係在運行時間產生(例如透過一預計算迴路)。這提供一通用技術,以中斷控制/資料流量相依性並完成更多迴路最佳化,例如並列化。在一實施例中並不需要一簡介資訊,但為了效率也可以使用。因此,一實施例可以僅使用軟體作運行時間檢查,但並不需要特殊硬體支援。
通常,現行實施法不能容易地應用至包含不規則控制及/或資料流的迴路。例如,考量由工業標準基準SPECCPU2006/454.calculix抽出的以下熱迴路:
上述迴路可能不是並列,因為編譯器分析假設指標a、c及總和點為要設定的相同點及在迴路內的分支可以被採用。然而,如果公式 a、 c及 sum間之相依性可以被猜想地忽略及條件式!f[i]被假設一直為FALSE,則迴路將被並列。因此,編譯器可以產生兩版本的迴路,一個並列 版及一個順序版。為了保證在運行時間程式的正確性,產生一檢視迴路以決定是否這些指標被假化,及是否分支被採用。如果表示式證明為獨立及分支從未在運行時間採用,則並列版將被執行以替代順序版。
圖1顯示依據一實施例之猜想迴路並列化框架的流程圖。在一實施例中,擴充編譯器框架構支援控制及資料猜想,以使得相對漸進迴路最佳化,例如,使用一軟體猜想法。
再者,迴路並列化可以分割為兩階段:分析階段及轉換階段。分析階段根據控制及資料相依性資訊,指明迴路並列最佳化機會。如果迴路被決定為可並列的並有利於並列,則轉換修改內部代表(IR)以產生並列碼。如於此所討論,一迴路可以被認為是有利於並列,如果並列迴路將造成速度上之加快(例如較短執行期間)。
參考圖1,編譯器框架包含以下運算。在程式於運算102輸入後,編譯器指明/選出一迴路(巢),其係藉由分析控制及資料(相依性)資訊,例如根據編譯器分析的最佳啟發及/或簡介資訊,在運算104,而決定有利於猜想並列。在運算106,在早先編譯階段,編譯器對選定/指明迴路巢產生猜想迴路佔位。在一實施例中,編譯器使用啟發規則及/或簡介資訊以(猜想地)更新用於猜想佔位的控制及資料相依圖表,藉由免除一或更多似乎極不可能採用分支,以重建程式及忽略來自最佳化的低或然率資料相依性。
在一實施例中(例如在運算106),編譯器產生一或更 多猜想保護,以保留猜想資訊,其隨後可以用於促成檢視碼的產生。在一實施例中,該隨後階段中,編碼分析及轉換然後可以被應用,透過猜想保護而未有任何改變以收容猜想資訊。在運算108,編譯器執行感應變數分析,這可以用以找出在每一迴路中之所有感應變數並執行所需之轉換及替代。在運算110中,一套迴路最佳化技術可以被使用,包含迴路分佈、迴路交換、迴路融合等等。
在運算112,編譯器評估/決定是否目標迴路(例如在運算104的選擇/指定迴路)有利於產生檢視碼。如果有利(在運算114決定),則運行時間檢視碼,在運算116根據猜想保護產生(及執行),例如收集/決定控制及資料猜想的統一誤猜資訊。在一實施例中,猜想及/或誤猜資訊係用以更新用於猜想佔位的控制表示式。在一些實施例中,對於例如相較於一臨限值的少量的誤猜情況,編譯器更產生一或更多分裂迴路(對應於運算104的選定/指定迴路)。當相較於原始選定/指定迴路,分裂迴路(其可以藉由執行選定/指定迴路,完成予以導出之結果)可以具有互斥索引集、較少分支、及/或較少迴路承載相依性。在運行時間未有誤猜的迴路因此在運算120安全地並列化。編譯器根據該簡介或樣本編譯器啟發,選擇一迴路(巢),其係有利於猜想並列化。如果用於猜想佔位之迴路目標並未考量並列化,則將會在運算122刪除死碼。
在部份實施例中,以下之一或多者可以被利用以提供有效並列化:(A)(懶惰)檢視碼產生方案;(B)根據檢視碼 的猜想保護產生虛擬碼(例如,當編碼器產生檢視碼係被使用以收集用於資料及控制猜想的統一誤猜資訊);及(C)根據用於少量誤猜的統一誤猜資訊,誤猜驅動迴路分裂。
有關於懶惰檢視碼產生,傳統迴路多版本技術可以依靠單一編譯階段,以產生該迴路的多版本、檢視碼、及分支檢查碼,其選擇原始迴路或最佳化予以於運行時間執行的迴路。圖2依據部份實施例係顯示兩迴路版本的例子,針對於迴路(a),標示為迴路(b)及迴路(c)。在一實施例中,多版本迴路的碼產生及檢視碼係被解耦並在不同編譯階段執行。檢視碼可以只有當猜想迴路版本可被並列化且有利於產生檢視碼才可以並列產生,例如,參考圖1討論。如果檢視碼係早產生,則這些產生碼可以增加編譯時間並禁止隨後分析及最佳化。
假定一迴路決定有利於猜想並列化,例如根據簡介及編譯啟發,則編譯器在較早編譯階段產生兩版本,其中一版本係猜想迴路佔位(例如迴路(c))及其他版本係為原始版本(例如迴路(b))。控制及資料猜想可以用以更新用於猜想版本的控制及資料相依性。在相同時間,猜想保護可以引入以保留猜想資訊。如果猜想版本係被隨後被決定為並列,則編譯器在轉換發生前,產生檢視碼。否則,猜想版本被刪除為死碼。
在一實施例中,猜想迴路佔位產生,具有軟體猜想為主的迴路並列的語意,例如,如果-則-否則控制流程結構係被示於圖2迴路(c)。如果條件檢查是否猜想成功。如 果成功,則猜想版本會被執行。否則,原始版本將被執行。因為誤猜必須罕見以便作出猜想值得進行,所以如果條件係被設定很可能發生。根據此明確代表,隨後分析及最佳化可能處理它,如同任何其他高度偏差化的如果方塊。其中在分析及最佳化時,將不需區別猜想與非猜想碼。
有關於猜想保護產生,在編譯分析中,根據邊緣/路徑簡介及啟發規則,控制猜想可以為檢測程式控制結構所支援並免除可能執行路徑。試著加入控制猜想的最佳化可以被修改並得知註解控制猜想資訊。同時,資料猜想資訊可以經由在相依圖中之猜想相依邊緣或猜想弱更新加以明確註解。試著去加入資料猜想的最佳化可以被修改,以處理註解猜想資訊。
在一實施例中,控制猜想資訊係藉由假想極不可能取用分支為假,免除這些分支及重建控制流量圖,而整合入控制流量圖中。在一些實施例中,用於分支的或然率可以透過邊緣/路徑簡介及/或編譯器啟發取得。分支的或然率的靜態評估可以藉由一組預測啟發加以執行,其經常認出在該程式之控制流量圖中之符合結構。例如,對於每一分支,此一啟發預測一分支係極可能被採用(未採用)或簡單地放棄。在一實例中,迴路分支被預測採用,因為迴路持續係較離開它的可能性高。其他分支可以根據該組啟發加以評估;例如,是否控制被傳送的控制方塊包含一功能呼叫等。如果主要的啟發並沒有用,則分支預測可以關閉至90/50,這並未提供理由以選擇執行的一或另一方式基礎 。邊緣/路徑簡介也可以用以提供此或然資訊。假設分支處理的條件表示式係為以非線性陣列表示形式之迴路變數。為了隨後產生檢視碼,此條件表示式在部份實施例中,並沒有迴路承載資料相依性。如果條件表示式為線性或迴路變數,則其可以被視為極端例子。
用於部份實施例的兩簡單啟發規則如下。(1)分支,其主體包含例外控制流量宣告,包含“傳回”、“放棄”、“離開”、或“中斷”係被指明為極不可能發生;或(2)分支,其主體只包含“繼續”宣告係被指明為極不可能發生。
因為檢視碼可以在編譯階段較晚產生,所以,產生檢視碼並不重要,因為迴路可以以一套迴路最佳化,包含迴路互換、迴路分佈等加以應用。為此,猜想保護可以引入以保留猜想資訊。因為迴路並列需要猜想,所以在例子1應每遞迴成功,同時,在例子2中,允許少量的誤猜,兩類型的猜想保護係對應兩例子被引入。在圖3(a)中,在迴路內之迴路變數分支條件!a[i]禁止迴路並列化。刪除此分支猜想使該迴路可並列化。因為條件!a[i]係高度可能為FALSE,則編譯器以0更換如果條件,並將猜想保護ctrl_guard_false插入表示此猜想需要每一遞迴均成功。猜想保護的參數a[i]可以協助編譯器容易產生檢視碼。圖3(c)顯示不同情況,其中允許少量誤猜。
在一實施例中,另一猜想保護ctrl_guard_maybe_false被引入對應於如圖3(d)所示之情況。同時,資料猜想可以藉由忽略來自最佳化之低或然迴路承載資料相依性,而引 入猜想資料相依分析。資料相依邊緣的或然可以藉由資料相依簡介或編譯啟發而取得。部份簡單編譯啟發規則係被使用以指明高度不可能相依記憶體參考。
例如,在以下四情況中之迴路承載相依性可以在其他實施例中忽略。假定一迴路巢開始於迴路索引i1,線性陣列下標係為a1*i1+a2*i2+...+an*in的形式,其中i1、i2,...、in為迴路索引變數及a1不等於0。
情況1:在具有線性陣列下標的儲存器與具有非線性陣列下標的負載間之迴路承載相依性邊緣;情況2:在具有非線性陣列下標的儲存器與具有線性陣列下標的負載間之迴路承載相依性邊緣;情況3:在具有非線性陣列下標的儲存器與具有非線性陣列下標間之迴路承載相依性邊緣;情況4:在具有非線性陣列下標的儲存器與具有非線性陣列下標的其他儲存器間之迴路承載相依性邊緣。
在一些實施例中,迴路並列利用資料猜想以成功地用於情況2、3、及4的每一遞迴及允許少量的情況1的誤猜。猜想保護可以用於不同情況,使得運行時間檢測碼可以更直接的方式產生。所產生之猜想保護可以更特殊地於資料相依性分析及陣列簡化分析中處理。例如,資料相依性分析改變所有涉及猜想保護以迴路無關相依性的迴路承載相依性。此陣列簡化分析可以忽略所有邊緣涉及猜想保護,使得簡化候選可以被有效地認出。
圖4(a)顯示一迴路,其中表示式a[i]不太可能重疊該 表示式a[b[i]]。在一實施例中,編譯器移除對應迴路承載相依性邊緣並插入新本質a[b[i]]=data_guard_maybe_false(a[i])。圖4(c)顯示一迴路,其中,表示式a[b[i]]係以表示式c[i]假化。這低或然率相依性可以因此忽略表示式a[b[i]]被認為陣列簡化候選及迴路可以並列化。在懶惰檢視碼產生中,編譯器將猜想保護資料_保護_故障插入,以表示猜想應成功用於每一迴路遞迴。在圖4(c)中,在這兩表示式間之相依性邊緣係猜想地忽略後,表示式a[b[i]]及c[d[i]]可以被認為陣列簡化候選。
有關於猜想保護為主檢視碼產生,因為編譯器在編譯階段的早先產生兩版本之迴路,所以,更多迴路並列化機會可以藉由現行迴路分析及最佳化加以曝露,而不需任何改變以容納此等猜想資訊。如果猜想版本不能被猜想地並列,則編譯器可以簡單地如死碼般地將之移除。否則,編譯器產生檢視碼給每一猜想保護,以保證猜想並列迴路的正確性。猜想保護係隨後在檢視碼產生後由IR移除。此誤猜資訊為檢視碼所收集於運行時間並可以用於選擇正確予以執行之版本。在一實施例中,統一誤猜資訊係被用以控制及資料猜想。如果猜想需要每一遞迴都成功,則一誤猜旗標可以代表該誤猜資訊。否則,誤猜表可以使用以處理少量的誤猜,其中誤猜表的大小係等於迴路跳脫計數及此誤猜表的每一元件的值表示用於對應遞迴是否猜想為成功。
圖5係依據一實施例顯示一虛擬碼係如何例如根據猜 想保護產生檢視碼。圖6列出例子,其依據一實施例,如何產生用於不同猜想保護的檢視碼。違反控制相依性係被表示為猜想保護ctrl_guard_false或ctrl_guard_maybe_false於編譯器IR(中間代表值)。在圖6(a)中,猜想保護ctrl_guard_false(a[i])假想每一遞迴表示式!a[i]為假。在猜想迴路產生中,如果猜想係一直成功的話,誤猜旗標係被建構以選擇並列化版本。圖6(b)顯示用於猜想保護ctrl_guard_maybe_false(a[i])的檢視迴路產生之例子,其中誤猜表係被建構以記錄其中誤猜發生處的遞迴。編譯器也可以建構一計數器mis_count,以記錄誤猜的數目。用於猜想保護ctrl_guard_maybe_false(a[i])的誤猜係為條件表示式a[i]為假。類似機制可以應用於揮發資料相依性。
在圖6(c)中,猜想保護a[b[i]]=data_guard_maybe_false(a[i])假設陣列參考a[i]及a[b[i]]為不可能相依。遞迴i的誤猜表示當在a[i]及a[b[j]]對相同記憶體位址的存取,其中,保持表示條件0<=i,j<n。為了有效收集誤猜資訊,編譯器建構256輸入項位址表於一實施例中,例如,其中,位址&a[b[j]]係被使用作為一鑰,以映圖至在位址表中之輸入項之一。然後,一迴路係被建構以檢測是否&a[i]映圖至已經為部份位址&a[b[j]]所映圖的輸入項。如果位址表的相同輸入項係為位址&a[i]及&a[b[j]]所映圖,則遞迴i係被表示為具有誤猜。誤猜表的對應元件可以被設定為真。
再者,猜想保護e[i]=data_guard_false(a[b[i]])在圖6(d)中,假設表示式a[b[i]]不太可能予以以表示式e[i]假化。由於表示式a[b[i]]為儲存運算,編譯器可以檢查是否所有以形式a[b[i]]=...形式之儲存宣告係被標示為稀疏陣列簡化。如果否,則編譯器重設用於多版迴路之條件表示式及迴路並列化將為依據部份實施例為該迴路所放棄。否則,編譯器產生一迴路,以收集參考a[b[i]]的邊界資訊。用於參考e[i]的陣列邊界資訊可以由迴路下界及上界推導出。如果陣列段a及e彼此重疊,則誤猜旗標係被設定為真。
圖6(e)顯示另一情況,依據一實施例其中表示式a[b[i]]係被假設為編譯器分析以c[d[i]]假化。如果稀疏陣列簡化分析檢測表示式a[b[i]]及c[d[i]]為陣列簡化候選,編譯器可以簡單地檢查是否它們的對準在檢視碼產生中為相同,而不是產生一迴路以檢測是否該陣列部為彼此重疊否。其然後更新誤猜旗標,使得如果猜想成功,則猜想並列化碼可以被執行。
有關於誤猜驅動迴路分裂,當猜想版決定為並列化及允許少量的誤猜時,編譯器產生第三版,用以依據一實施例進一步迴路分裂如圖7所示。編譯器假想猜想迴路並列係有利的,如果誤猜的數量係低於部份臨限值T。因為誤猜表的每一元件的值表示對應遞迴是否猜想為成功,所以,該迴路可以根據誤猜表簡單地分裂。在一實施例中,迴路被分裂為多互斥迴路,其具有較小索引組。沒有誤猜的 較小迴路在運算時間因此安全地並列化。依據一實施例,圖8顯示編譯器如何產生碼,以分裂該圖7中之迴路(版本3)。在圖8中,編譯器建立一迴路,以遍歷誤猜表的每一元件並計算沒有誤猜的間距。如果沒有誤猜的間距及間距長度係大於部份臨限T1,則用於對應索引組的迴路可以被猜想地並列化。因此,如圖8所示,編譯器以索引組建構較小迴路func1及由版本1(猜想版本)複製迴路本體。否則,編譯器由版本2(原始版本)複製迴路本體,用於此較小迴路func2,如圖8所示。
有關於根據索引陣列迴路最佳化,一實施例利用一新方法以中斷在迴路中之控制及資料流量相依性,例如建立更多用於迴路最佳化或自動並列化的機會。於此所討論,一索引陣列係為藉由選擇一遞迴組建立的迴路的遞迴空間的次組,其具有以下兩特性之一:(1)在迴路中之IF條件永遠為真,如果給定遞迴設定及沒有其他;或(2)在迴路中之流量或逆流量相依邊緣存在用於給定遞迴組及沒有其他。再者,用於具有特性1的遞迴建立的索引陣列協助在迴路中中斷控流量相依性,而用於具有特性2的遞迴在迴路中協助中斷資料流量相依性。在兩情況中,原始迴路可以被轉換為兩或更多迴路(因此稱次迴路),根據該索引陣列藉由分割(及可能重排序)該遞迴空間,使得一或更多次迴路可以被並列化。此隨後允許:(i)致能更多並列化,藉由中斷控制流量及資料流量相依性及/或協助其他迴路最佳化,例如軟體管線化及冗餘消除,而不必簡介資訊, (ii)最小運行時間損耗,(iii)無特殊硬體支援。
因為並列化係大致為控制或資料流量相依性所禁止,所以部份實施例提供迴路結構,其係經常在真實應用及基準中遇到。例如,在迴路中之IF條件出現建立控制流量相依性及禁止迴路最佳化。以下為在規則2006/462.libquantum中之熱迴路之簡化版本:
此迴路不能並列化,因為(j=j+1;B[j]=C[i]..)係依據其條件(A[i]!=0)控制。克服此問題的一方式為使用控制/資料流量猜想。然而,控制/資料流量猜想並未一般通用/有利於部份實施法中一該if條件應多數為真或多數為假(在很多情形下為一直為真或一直為假),用於轉換為可用/有利。同時,其取決於簡介資訊,其係非常有限。然而,用於(A[i]!=0)的遞迴空間的次組係為真並可以並列化。為此,實施例想要指出及分離出遞迴次組。
有關於資料流量相依性禁止並列化,以下為在規格2006/482.sphinx3中之熱迴路的簡化版本:
此迴路不能並列化,因為在A[i]及A[B[i]]間有一資料相依邊緣。注意範圍(B[i]<=range(i),其中range(k)為k可以採用的組值,遞迴空間(range(i)-range(B[i])的次組為可並列化的。在一實施例中,索引陣列係被用以指明及並列化遞迴次組。索引陣列,例如,針對迴路中之中斷一或更多控制流量及資料流量相依性係被用以致能更多並列化。在一或更多實施例中,以下項目可以利用:I.建構用以當可能時中斷控制流量相依性的索引陣列的機制;II.分割(及可能重新排列)迴路遞迴空間(使用索引陣列),用以中斷控制流量相依性,造成次迴路的建立的機制;III.建構用以當可能時中斷資料流量相依性的索引陣列的機制;及/或IV.分割(及可能重新排列)迴路遞迴空間(使用索引陣列),用以中斷資料流量相依性,造成次迴路的建立的機制。
有關於使用機制I、II、III、IV取得之迴路的轉換,以下虛擬碼係想要依據一實施例之表示該方法的高階素描,並且,跳脫在實際實施中之各種細節及合理檢查:
當一if條件具有單一分支時,用以控制流量最佳化的索引陣列法可以被觸發,使得if條件的述語取決於迴路索引變數係被認為負責控制相依性。
於一實施例中,機制1(generate_controlflow_indexarray_loop(if_cond,tripcounter(loop),&index_array))產生以下預計算迴路,用於建立index_array:
因此,如果if條件為真,則索引陣列可以儲存該組索引。因為該組if條件評估為假的遞迴並不會影響在迴路中之計算,所以可以丟棄。只有次組的遞迴空間(如同儲存於索引陣列中)需要於一實施例中遞迴。此次組係無控制相依性並可以並列化。
在一實施例中,機制2(generate_controlflow_loop_transformation(loop,index_array))建立次迴路於原始迴路外,藉由以對應索引陣列更換一或多數索引變數的發生,移除if條件及以索引陣列的大小替換跳脫計數。所得次迴路遞迴索引陣列的元件上(其係為原始遞迴空間的次組)及沒有控制相依性。
在一實施例中,使用虛擬碼(機制1及2),迴路1將被轉換如下:
用於資料流量最佳化的索引陣列法可以當於形式A[i]及A[B[i]]的陣列存取間之資料相依性被發現為禁止並列化的觸發。B可以稱為內陣列。B[i]為i的遞迴空間的次組。這是存在有資料相依性的遞迴空間之次組。剩餘遞迴可以變成無相依性並可以並列。隨後,索引陣列可以儲存為B[i]所達成值。
在一實施例中,機制3(generate_dataflow)indexarray_loop(inner_array,tripcout,&index_array))產生以下兩預計算迴路,用於建構索引陣列:
在一實施例中,機制4(generate_dataflow_loop_transformation(loop,index_array))轉換原始迴路為兩階迴路巢,其可以被視為並列化次迴路的集合。外迴路遞迴於索引陣列的元件,同時,內迴路遞迴於兩連續索引陣列元件間之間距,這係在對應於該索引陣列的元件的單一遞迴後。在兩連續索引陣列元件間之每一間距係沒有資料相依性並可以被並列化。再者,使用虛擬碼(機制3及4),迴路2將會被轉換如下:
因此,部份實施例具有最小運行時間損耗。在一實施例中,索引陣列為主轉換可以為運行時間檢查迴路跳脫計數所保護。只有迴路跳脫計數大於某一臨限時,轉換碼才會被執行。假如跳脫計數在編譯時間為已知,則編譯時間 檢查即可滿足。對索引陣列大小的運行時間檢查可以被用以進一步改良此方法的有利性。同時,如果簡介資訊可用,則此方法可以只應用至熱迴路。
另外,虛擬碼可以被產生,以處理if條件之兩分支。例如,如果兩分支在其間並未有資料相依邊緣,則原始迴路可以分佈為兩迴路,一包含if條件及則分支的主體,及另一分支包含if條件的相反及否則分支主體。於此所述之虛擬碼則可以被分開應用至兩迴路,以得到可並列化次迴路。虛擬碼可以進一步一般化,以處理多數if條件及在相同迴路內的多數資料相依性。這將涉及多數索引陣列的結構及具有可能部份可注意到的運行時間損耗的複雜轉換。
圖9顯示計算系統900的實施例之方塊圖。在各種實施例中,系統900的一或更多元件可以設於各種電子裝置中,其能執行於此討論的參考本發明一些實施例的一或更多運算。例如,系統900的一或更多元件可以被用以參考圖1-8討論的運算,例如,藉由依據於此討論的運算處理指令、執行副常式等。同時,於此討論的各種儲存裝置(例如,參考圖9及/或10)可以用以儲存資料、運算結果等等。
更明確地說,計算系統900可以包含一或更多中央處理單元(CPU)902或處理器,其經由互連網(或匯流排)904相通訊。因此,於此所討論的各種運算在一些實施例中可為CPU所執行。再者,處理器902可以包含一般目的處 理器、網路處理器(其透過電腦網路903通訊處理資料),或其他類型的處理器(包含精簡指令集電腦(RISC)處理器或複雜指令集電腦(CISC))。再者,處理器902可以具有單一或多數核心設計。具有多數核心設計的處理器902可以整合不同類型處理器核心於相同積體電路(IC)晶粒上。同時,具有多數核心設計的處理器902可以實施為對稱或非對稱多處理器。再者,參考圖1至8討論的運算可以為系統900的一或更多元件所執行。
晶片組906也可以以互連網路904通訊。晶片組906可以包含圖形及記憶體控制集線器(GMCH)908。GMCH 908可以包含記憶體控制器910,其與記憶體912通訊。記憶體912可以儲存包含為CPU 902所執行之指令的順序之資料,或包含於計算系統900中之任何其他裝置。在一實施例中,記憶體912可以儲存一編譯器913,其可以相同或類似於參考圖1-8所述之編譯器。相同或至少一部份的此資料(包含指令)可以被儲存於磁碟機928及/或一或更多處理器902內的快取中。在本發明之一實施例中,記憶體912可以包含一或更多揮發儲存(或記憶體)裝置,例如隨機存取記憶體(RAM)、動態RAM(DRAM)、同步DRAM(SDRAM)、靜態RAM(SRAM)、或其他類型的儲存裝置。非揮發記憶體也可以被利用,例如硬碟機。額外裝置可以經由互連網路904,例如多CPU及/或多系統記憶體加以通訊。
GMCH 908也可以包含一圖形介面914,其與顯示器 916通訊。在本發明之一實施例中,圖形介面914可以經由加速圖形埠(AGP)與顯示器916相通訊。在本發明之一實施例中,顯示器916可以為平板顯示器,其透過例如信號轉換器與圖形介面914相通訊,該轉換器將儲存於例如視訊記憶體或系統記憶體的儲存裝置的一影像之數位代表值轉譯為顯示信號,其係為顯示器916所解譯及顯示。為介面914所產生之顯示信號可以在為顯示器916所解譯及隨後顯示之前通過各種控制裝置。在一些實施例中,處理器902及一或更多其他元件(例如記憶體控制器910、圖形介面914、GMCH 908、ICH 920、週邊橋接器924、晶片組906等等)可以設在相同IC晶粒上。
一集線器介面918可以允許GMCH 908及一輸入/輸出控制集線器(ICH)920通訊。ICH 920可以提供一介面至I/O裝置,其與計算系統900通訊。ICH 920可以透過週邊橋接器(或控制器)924(例如週邊組件互連(PCI)橋接器、通用串列匯流排(USB)控制器、或其他類型週邊橋接器或控制器)與匯流排922相通訊。橋接器924可以提供一資料路徑在CPU 902與週邊裝置之間。其他類型的拓樸可以利用。同時,多數匯流可以例如透過多數橋接器或控制器與ICH 920相通訊。再者,其他與ICH 920相通訊的週邊在本發明之各種實施例中可以包含積體驅動電子(IDE)或小電腦系統介面(SCSI)硬碟機、USB埠、鍵盤、滑鼠、並列埠、串列埠、磁碟機、數位輸出支援(例如數位影音介面(DVI)、或其他裝置。
匯流排922可以與音訊裝置926、一或更多磁碟機928、及網路介面裝置930相通訊,其可以與電腦網路903相通訊。在一實施例中,裝置930可以為NIC,其能無線通訊。其他裝置可以經由匯流排922相通訊。同時,(例如網路介面裝置930)的各種元件可以在本發明之一些實施例中與GMCH 908相通訊。另外,處理器902、GMCH 908、及/或圖形介面914可以組合以形成單一晶片。
再者,計算系統900可以包含揮發及/或非揮發記憶體(或儲存器)。例如,非揮發記憶體可以包含以下之一或多者:唯讀記憶體(ROM)、可程式ROM(PROM)、可抹除PROM(EPROM)、電氣EPROM(EEPROM)、磁碟機(例如928)、軟碟機、微碟ROM(CD-ROM)、數位多功能光碟(DVD)、快閃記憶體、磁光碟機、或其他類型的非揮發機器可讀取媒體,其能儲存電子資料(例如包含指令)。在一實施例中,系統900的元件可以安排於一點對點(PtP)架構,例如參考圖10所討論者。例如,處理器、記憶體、及/或輸入/輸出裝置其可以為若干點對點介面所互連。
更明確地說,圖10顯示一計算系統1000,其依據本發明之一實施例係被安排為點對點(PtP)架構。更明確地說,圖10顯示一系統,其中處理器、記憶體及輸入/輸出裝置係為若干點對點介面所互連。參考圖1-9所討論的操作可以為系統1000的一或更多元件所執行。
如於圖10所示,系統1000可以包含幾個處理器,為 了清楚起見,僅顯示其中兩個,處理器1002及1004。處理器1002及1004可以各個包含一本地記憶體控制集線器(MCH)1006及1008(其在一些實施例中,可以相同或類似於圖9的GMCH 908),以耦接至記憶體1010及1012。記憶體1010及/或1012可以儲存各種資料,例如參考圖9的記憶體912所討論者。
處理器1002及1004可以為任何適當處理器,例如參考圖10的處理器1002所討論者。處理器1002及1004可以分別使用PtP介面電路1016及1018經由點對點(PtP)介面1014交換資料。處理器1002及1004可以各使點對點介面電路1026、1028、1030及1032,經由個別PtP介面1022及1024與晶片組1020作資料交換。晶片組1020也可以使用PtP介面電路1037,經由高效圖形介面1036,與高效圖形電路1034作資料交換。
本發明之至少一實施例可以藉由利用處理器1002及1004加以提供。例如,處理器1002及/或1004可以執行圖1-9的一或更多運算。然而,本發明之其他實施例可以存在於其他電路、邏輯單元、或在圖10的系統1000內的裝置。再者,本發明之其他實施例可以分佈於幾個電路、邏輯單元或圖10所示之裝置內。
晶片組1020可以使用PtP介面電路1041耦接至匯流排1040。該匯流排1040可具有一或更多裝置耦接至其上,例如匯流排橋接器1042及I/O裝置1043。經由匯流排1044,匯流排橋接器1043可以耦接至其他裝置,例如鍵 盤/滑鼠1045、參考圖10所討論的網路介面裝置1030(例如數據機、網路介面卡(NIC)等,其可以耦接至電腦網路903)、音訊I/O裝置、及/或資料儲存裝置1048。資料儲存裝置1048可以儲存碼1049,其可以為處理器1002及/或1004所執行。
在本發明之各種實施例中,於此所討論的運算,例如參考圖1-10可以被實施為硬體(例如邏輯電路)、軟體(包含,例如,微碼,其控制例如於此所討論的處理器之處理器的操作)、韌體、或其組合,其可以設置為電腦程式產品,例如包含有形(例如非暫存)機器可讀取或電腦可讀取媒體,其上儲存有指令(或軟體程序),用以規劃一電腦(例如處理器或計算裝置的其他邏輯),以執行於此所討論的運算。機器可讀取媒體可以包含例如於此所討論之儲存裝置。
於說明書中提及”一實施例”或”實施例”表示有關於實施例之特定特性、結構或特徵可以包含在至少一實施法內。說明書中之”在一實施例中”表示可以或可不表示到相同實施例。
同時,在發明說明及申請專利範圍中,”耦接”及”連接”與其他衍生用語可以使用。在本發明之一些實施例中,”連接”可以用以表示兩或更多元件以直接實體或彼此電接觸。”耦接”可以表示兩或更多元件直接實體或電接觸。然而,”耦接”也可以表示兩或更多元件可以不是直接接觸,但仍彼此配合或反應。
另外,此等電腦可讀取媒體可以下載為電腦程式產品,其中程式可以藉由資料信號,例如透過一載波或其他傳遞媒體,經由通訊鏈路(例如匯流排、數據機或網路連接)由一遠端電腦(例如伺服器)傳送至要求電腦(例如客戶)。
因此,雖然本發明之實施例已經以特定結構特徵及/或方法作動加以描述,但可以了解的是所主張標的並不限於所述之特定特性或動作。相反地,特定特性及動作係被揭示作為實施主張標的樣本形式。
900‧‧‧計算系統
902‧‧‧處理器
903‧‧‧電腦網路
904‧‧‧互連網路
906‧‧‧晶片組
908‧‧‧圖形及記憶體控制集線器
910‧‧‧記憶體控制器
912‧‧‧記憶體
913‧‧‧編譯器
914‧‧‧圖形介面
916‧‧‧顯示器
918‧‧‧集線器介面
920‧‧‧輸入/輸出控制集線器
922‧‧‧匯流排
924‧‧‧週邊橋接器
926‧‧‧音訊裝置
928‧‧‧磁碟機
930‧‧‧網路介面裝置
1000‧‧‧計算系統
1002‧‧‧處理器
1004‧‧‧處理器
1006‧‧‧記憶體控制集線器
1008‧‧‧記憶體控制集線器
1010‧‧‧記憶體
1012‧‧‧記憶體
1014‧‧‧點至點介面
1016‧‧‧PtP介面電路
1018‧‧‧PtP介面電路
1020‧‧‧晶片組
1022‧‧‧PtP介面
1024‧‧‧PtP介面
1026‧‧‧點介面電路
1028‧‧‧點介面電路
1030‧‧‧點介面電路
1032‧‧‧點介面電路
1034‧‧‧高效圖形電路
1036‧‧‧高效圖形介面
1037‧‧‧PtP介面電路
1040‧‧‧匯流排
1041‧‧‧PtP介面電路
1042‧‧‧匯流排橋接器
1043‧‧‧匯流排橋接器
1044‧‧‧匯流排
1045‧‧‧鍵盤/滑鼠
1048‧‧‧資料儲存裝置
1049‧‧‧碼
詳細說明係參考附圖加以提供。在圖中,元件符號的最左邊數字表示參考元件符號第一次出現的圖號。在不同圖中的相同元件符號表示類似或相同項目。
圖1顯示依據一實施例之流程圖。
圖2至8顯示依據部份實施例之樣本虛擬碼。
圖9及10顯示計算系統的實施例之方塊圖,其可以被用以實施於此所討論的部份實施例。

Claims (30)

  1. 一種根據迴路分裂的迴路並列化之方法,包含:根據控制及資料相依資訊,指明用於猜想並列化的迴路;回應於決定該迴路為予以並列化,產生一或更多猜想保護,以保留與該迴路相對應的猜想資訊;根據檢視碼的執行,決定用於控制及資料猜想的誤猜資訊,其中該檢視碼係予以根據該一或更多猜想保護產生;及根據該誤猜資訊,產生對應於該迴路的一或更多分裂迴路,其中該迴路係根據在儲存運算與負載運算間之為該迴路所承載的用於相依邊緣的每一遞迴的成功資料猜想加以並列化,該儲存運算具有非線性陣列下標及該負載運算具有線性或非線性陣列下標。
  2. 如申請專利範圍第1項所述之方法,更包含分析最佳化資訊,以產生控制及資料相依資訊。
  3. 如申請專利範圍第2項所述之方法,其中該最佳化資訊係包含一或更多啟發或簡介資訊。
  4. 如申請專利範圍第1項所述之方法,更包含決定是否並列化該迴路,其中決定是否並列化該迴路係根據決定是否並列化該迴路是否造成加速。
  5. 如申請專利範圍第1項所述之方法,更包含產生用於該迴路之佔位。
  6. 如申請專利範圍第5項所述之方法,更包含對應於 該佔位更新控制及資料相依圖表。
  7. 如申請專利範圍第6項所述之方法,其中更新該控制及資料相依圖表包含免除一或更多高度不可能採用分支及忽略低或然率資料相依。
  8. 如申請專利範圍第1項所述之方法,更包含根據該一或更多猜想保護,在編譯器的後期階段應用分析及轉換,而不必改變,以容許該猜想資訊,其中該一或更多猜想保護係在該編譯器的早期階段產生。
  9. 如申請專利範圍第1項所述之方法,更包含根據該一或更多猜想保護,產生該猜想碼。
  10. 如申請專利範圍第1項所述之方法,其中該一或更多分裂迴路當相較於該迴路時,係包含一或更多互斥索引集、較少分支、或較少迴路承載相依。
  11. 一種根據索引陣列的迴路並列化的方法,包含:儲存對於一迴路的if條件只對於一遞迴組永遠為真時的一組索引於索引陣列中;及根據該索引陣列,由該迴路產生多數次迴路,其中該索引陣列係使得在該迴路中之一或更多控制流量及資料流量相依中斷,其中用於該組索引的流量分析係在編譯時間執行,同時,對應於該遞迴組的遞迴次空間的值係在運行時間產生,以中斷控制與資料流量相依。
  12. 如申請專利範圍第11項所述之方法,更包含根據該索引陣列,重新排列該多數該次迴路。
  13. 如申請專利範圍第11項所述之方法,其中該索引 陣列係包含該迴路的次組遞迴空間其係藉由回應只存在於一遞迴組的該迴路中的流量或逆流量相依邊緣而選擇該遞迴組所建構。
  14. 如申請專利範圍第11項所述之方法,其中回應於決定具有單一分支的if條件,產生予以執行之該多數次迴路,使得該if條件的述語取決於迴路索引變數並負責該一或更多控制流量相依。
  15. 如申請專利範圍第11項所述之方法,更包含藉由以對應索引陣列元件替換索引變數的一或更多發生,而根據該迴路產生次迴路。
  16. 如申請專利範圍第11項所述之方法,更包含產生兩預計算迴路,用以建構該索引陣列。
  17. 如申請專利範圍第11項所述之方法,更包含將該迴路轉換為兩層的迴路巢。
  18. 一種包含一或更多指令的電腦可讀取媒體,當指令被執行於處理器時,架構該處理器以執行一或更多運算以:根據控制及資料相依資訊,指明用於猜想並列化的迴路;回應於決定該迴路為予以並列化,產生一或更多猜想保護,以保留與該迴路相對應的猜想資訊;根據檢視碼的執行,決定用於控制及資料猜想的誤猜資訊,其中該檢視碼係予以根據該一或更多猜想保護產生;及 根據該誤猜資訊,產生對應於該迴路的一或更多分裂迴路,其中該迴路係根據在儲存運算與負載運算間之為該迴路所承載的用於相依邊緣的每一遞迴的成功資料猜想加以並列化,該儲存運算具有非線性陣列下標及該負載運算具有線性或非線性陣列下標。
  19. 如申請專利範圍第18項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以分析最佳化資訊,以產生控制及資料相依資訊。
  20. 如申請專利範圍第18項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以根據決定是否並列化該迴路造成加速,決定是否並列化該迴路。
  21. 如申請專利範圍第18項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以產生用於該迴路之佔位。
  22. 如申請專利範圍第21項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以更新對應該佔位的控制及資料相依圖表。
  23. 如申請專利範圍第18項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以根據該一或更多猜想保護,在編譯器的後期階段應用分析及轉換,而不必改變以容許 該猜想資訊,其中該一或更多猜想保護係在該編譯器的早期階段產生。
  24. 如申請專利範圍第18項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以根據該一或更多猜想保護產生該檢視碼。
  25. 一種包含一或更多指令的電腦可讀取媒體,當指令被執行於處理器上時,架構該處理器以執行一或更多運算,以:儲存一組索引於索引陣列中,其中迴路的if條件對於只有一遞迴組永遠為真;及根據該索引陣列,由該迴路產生多數次迴路,其中該索引陣列係使得在該迴路中之一或更多控制流量及資料流量相依中斷,其中用於該組索引的流量分析係在編譯時間執行,同時,對應於該遞迴組的遞迴次空間的值係在運行時間產生,以中斷控制與資料流量相依。
  26. 如申請專利範圍第25項所述之電腦可讀取媒體,更包含一或更多指令,當執行於處理器上時,架構該處理器執行一或更多運算,以根據該索引陣列重新排列該多數次迴路。
  27. 如申請專利範圍第25項所述之電腦可讀取媒體,其中該索引陣列係包含該迴路的次組遞迴空間,其係藉由回應只存在於一遞迴組的該迴路中的流量或逆流量相依邊緣選擇該遞迴組所建構。
  28. 如申請專利範圍第25項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以藉由對應索引陣列元件更換索引變數一或更多發生,而根據該迴路產生次迴路。
  29. 如申請專利範圍第25項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以產生兩預計算迴路,用以建構該索引陣列。
  30. 如申請專利範圍第25項所述之電腦可讀取媒體,更包含一或更多指令,當被執行於處理器上時,架構該處理器以執行一或更多運算,以轉換該迴路為兩層迴路巢。
TW100147402A 2010-12-24 2011-12-20 根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體 TWI455025B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US12/978,465 US8793675B2 (en) 2010-12-24 2010-12-24 Loop parallelization based on loop splitting or index array

Publications (2)

Publication Number Publication Date
TW201246070A TW201246070A (en) 2012-11-16
TWI455025B true TWI455025B (zh) 2014-10-01

Family

ID=46314818

Family Applications (1)

Application Number Title Priority Date Filing Date
TW100147402A TWI455025B (zh) 2010-12-24 2011-12-20 根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體

Country Status (5)

Country Link
US (1) US8793675B2 (zh)
EP (1) EP2656204A4 (zh)
CN (1) CN103282878B (zh)
TW (1) TWI455025B (zh)
WO (1) WO2012087988A2 (zh)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8423983B2 (en) * 2008-10-14 2013-04-16 International Business Machines Corporation Generating and executing programs for a floating point single instruction multiple data instruction set architecture
US8327344B2 (en) * 2008-10-14 2012-12-04 International Business Machines Corporation Array reference safety analysis in the presence of loops with conditional control flow
US9652231B2 (en) * 2008-10-14 2017-05-16 International Business Machines Corporation All-to-all permutation of vector elements based on a permutation pattern encoded in mantissa and exponent bits in a floating-point SIMD architecture
US8589901B2 (en) 2010-12-22 2013-11-19 Edmund P. Pfleger Speculative region-level loop optimizations
US8793675B2 (en) 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array
JP2013171459A (ja) * 2012-02-21 2013-09-02 Toshiba Corp プログラム解析装置、プログラム解析方法および記録媒体
US8893103B2 (en) * 2012-08-16 2014-11-18 Nec Laboratories America, Inc. Automatic asynchronous offload to many-core coprocessors
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
EP2913761A4 (en) 2012-10-25 2016-06-15 Fujitsu Ltd EXECUTION CONTROL METHOD AND INFORMATION PROCESSING DEVICE
US9262139B2 (en) * 2013-01-07 2016-02-16 Advanced Micro Devices, Inc. Layered programming for heterogeneous devices
CN103106067B (zh) * 2013-03-01 2016-01-20 清华大学 处理器循环映射的优化方法及系统
WO2014142972A1 (en) * 2013-03-15 2014-09-18 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
US8997073B2 (en) * 2013-04-25 2015-03-31 Nec Laboratories America, Inc. Semi-automatic restructuring of offloadable tasks for accelerators
US9372678B2 (en) * 2013-06-14 2016-06-21 Intel Corporation Compiler optimization for complex exponential calculations
US9569185B2 (en) * 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
US9489181B2 (en) * 2014-10-09 2016-11-08 National Instruments Corporation Correlation analysis of program structures
US10318297B2 (en) * 2015-01-30 2019-06-11 Huawei Technologies Co., Ltd. Method and apparatus for operating a self-timed parallelized multi-core processor
US9830134B2 (en) * 2015-06-15 2017-11-28 Qualcomm Incorporated Generating object code from intermediate code that includes hierarchical sub-routine information
KR20170047957A (ko) * 2015-10-26 2017-05-08 삼성전자주식회사 반도체 장치의 동작 방법 및 반도체 시스템
US9703537B2 (en) * 2015-11-02 2017-07-11 International Business Machines Corporation Method for defining alias sets
US10310826B2 (en) * 2015-11-19 2019-06-04 Intel Corporation Technologies for automatic reordering of sparse matrices
JP2017107448A (ja) * 2015-12-10 2017-06-15 株式会社デンソー 並列化方法、並列化ツール、車載装置
US10884942B2 (en) * 2016-05-19 2021-01-05 International Business Machines Corporation Reducing memory access latency in scatter/gather operations
US10261831B2 (en) * 2016-08-24 2019-04-16 Qualcomm Incorporated Speculative loop iteration partitioning for heterogeneous execution
US10671361B2 (en) * 2016-10-25 2020-06-02 Paypal, Inc. Automatically determining data dependencies to facilitate code execution
EP3343351B1 (en) * 2016-12-28 2023-04-26 Waseda University Parallel program generating method and parallelization compiling apparatus
US10866790B2 (en) * 2018-11-30 2020-12-15 Advanced Micro Devices, Inc. Transforming loops in program code based on a capacity of a cache
JP7225859B2 (ja) * 2019-02-04 2023-02-21 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
CN116126538A (zh) * 2019-03-07 2023-05-16 创新先进技术有限公司 业务处理方法、装置、设备及存储介质
US11061653B2 (en) * 2019-10-30 2021-07-13 International Business Machines Corporation Dynamic compiling for conditional statements during execution
JP2022182260A (ja) * 2021-05-28 2022-12-08 富士通株式会社 コンパイラ、コンパイル方法、及びコンパイラ装置
US11709662B2 (en) * 2021-11-05 2023-07-25 Tenstorrent Inc. Sparsity uniformity enforcement for multicore processor
US12008352B2 (en) * 2021-11-24 2024-06-11 International Business Machines Corporation Transformation of a loop within computer code to minimize iterations

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080127146A1 (en) * 2006-09-06 2008-05-29 Shih-Wei Liao System and method for generating object code for map-reduce idioms in multiprocessor systems
TWI319851B (en) * 2004-03-29 2010-01-21 Data processing device, data processing program, and storage medium storing the data processing program

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3317825B2 (ja) 1995-09-28 2002-08-26 富士通株式会社 ループ最適化翻訳処理方法
US6038398A (en) 1997-05-29 2000-03-14 Hewlett-Packard Co. Method and apparatus for improving performance of a program using a loop interchange, loop distribution, loop interchange sequence
US6708331B1 (en) * 2000-05-03 2004-03-16 Leon Schwartz Method for automatic parallelization of software
JP2001325109A (ja) 2000-05-16 2001-11-22 Hitachi Ltd ループ最適化方法及びコンパイラ
KR20030042319A (ko) * 2001-11-22 2003-05-28 한국전자통신연구원 병렬 프로그램 수행중 경합 탐지를 위한 병렬 루프 변형방법
US6970985B2 (en) * 2002-07-09 2005-11-29 Bluerisc Inc. Statically speculative memory accessing
US7089545B2 (en) * 2002-12-17 2006-08-08 International Business Machines Corporation Detection of reduction variables in an assignment statement
US20050144602A1 (en) 2003-12-12 2005-06-30 Tin-Fook Ngai Methods and apparatus to compile programs to use speculative parallel threads
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US20060048122A1 (en) 2004-08-30 2006-03-02 International Business Machines Corporation Method, system and computer program product for hierarchical loop optimization of machine executable code
US7603546B2 (en) * 2004-09-28 2009-10-13 Intel Corporation System, method and apparatus for dependency chain processing
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
US7823141B1 (en) * 2005-09-30 2010-10-26 Oracle America, Inc. Using a concurrent partial inspector loop with speculative parallelism
US7797329B2 (en) * 2006-06-09 2010-09-14 Oracle America Inc. Method and system for enabling a synchronization-free and parallel commit phase
US8549499B1 (en) * 2006-06-16 2013-10-01 University Of Rochester Parallel programming using possible parallel regions and its language profiling compiler, run-time system and debugging support
US8151255B2 (en) * 2006-06-26 2012-04-03 Oracle America, Inc. Using police threads to detect dependence violations to reduce speculative parallelization overhead
US8037462B2 (en) * 2006-08-02 2011-10-11 International Business Machines Corporation Framework for parallelizing general reduction
US7890943B2 (en) 2007-03-30 2011-02-15 Intel Corporation Code optimization based on loop structures
US8239843B2 (en) * 2008-03-11 2012-08-07 Oracle America, Inc. Value predictable variable scoping for speculative automatic parallelization with transactional memory
US8359587B2 (en) * 2008-05-01 2013-01-22 Oracle America, Inc. Runtime profitability control for speculative automatic parallelization
US8677337B2 (en) * 2008-05-01 2014-03-18 Oracle America, Inc. Static profitability control for speculative automatic parallelization
US8739141B2 (en) * 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
US8453134B2 (en) * 2008-06-04 2013-05-28 Intel Corporation Improving data locality and parallelism by code replication
US8645933B2 (en) * 2008-08-01 2014-02-04 Leon Schwartz Method and apparatus for detection and optimization of presumably parallel program regions
US8312442B2 (en) * 2008-12-10 2012-11-13 Oracle America, Inc. Method and system for interprocedural prefetching
US8468508B2 (en) * 2009-10-09 2013-06-18 International Business Machines Corporation Parallelization of irregular reductions via parallel building and exploitation of conflict-free units of work at runtime
US9009689B2 (en) * 2010-11-09 2015-04-14 Intel Corporation Speculative compilation to generate advice messages
US8589901B2 (en) 2010-12-22 2013-11-19 Edmund P. Pfleger Speculative region-level loop optimizations
US8793675B2 (en) 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI319851B (en) * 2004-03-29 2010-01-21 Data processing device, data processing program, and storage medium storing the data processing program
US20080127146A1 (en) * 2006-09-06 2008-05-29 Shih-Wei Liao System and method for generating object code for map-reduce idioms in multiprocessor systems

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Riyadh Baghdadi ,Albert Cohen ,Cedric Bastoul ,Louis-Noel Pouchet and Lawrence Rauchwerger ,"The Potential of Synergistic Static, Dynamic and Speculative Loop Nest Optimizations for Automatic Parallelization" ,Parallel Execution of Sequential on Multi-core Architecture , 22 June,2010 Zhao-Hui Du ,Chu-Cheow Lim ,Xiao-Feng Li ,Chen Yang ,Qingyu Zhao and Tin-Fool Ngai ,"A Cost-Driven Compilation Framework for Speculative Parallelization of Sequential Programs" ,The ACM SIGPLAN 2004 conference on Programming language design and implementation , 6 May,2004 ,pages 71 to 81 Christopher Barton, Arie Tal, Bob Blainey and Jos’e Nelson Amaral ,"Generalized Index-Set Splitting" ,the 14th international conference on Compiler Construction , 2005 ,pages 102 to 116 *

Also Published As

Publication number Publication date
WO2012087988A3 (en) 2012-09-27
EP2656204A4 (en) 2015-10-28
TW201246070A (en) 2012-11-16
WO2012087988A2 (en) 2012-06-28
US20120167069A1 (en) 2012-06-28
CN103282878B (zh) 2016-05-04
EP2656204A2 (en) 2013-10-30
CN103282878A (zh) 2013-09-04
US8793675B2 (en) 2014-07-29

Similar Documents

Publication Publication Date Title
TWI455025B (zh) 根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體
US9798528B2 (en) Software solution for cooperative memory-side and processor-side data prefetching
KR101523020B1 (ko) 결합된 분기 타깃 및 프레디킷 예측
CN102298514B (zh) 用于有效动态二进制变换的寄存器映射技术
CN103534686B (zh) 异构核心的自动内核迁移
CN101957773B (zh) 用于多轮次动态概要分析的方法及其系统
US8943484B2 (en) Code generation method and information processing apparatus
JPWO2008120367A1 (ja) 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
Shobaki et al. An exact algorithm for the sequential ordering problem and its application to switching energy minimization in compilers
US9395986B2 (en) Compiling method and compiling apparatus
JP2008059279A (ja) 文字列出力処理を最適化する技術
US9256437B2 (en) Code generation method, and information processing apparatus
JP5244421B2 (ja) 情報処理装置およびプログラム分割方法
TW201232405A (en) Speculative compilation to generate advice messages
CN103314360A (zh) 数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法
Hong et al. Improving simd parallelism via dynamic binary translation
JPWO2009004709A1 (ja) 間接分岐処理プログラムおよび間接分岐処理方法
CN112130848A (zh) 一种面向便笺式存储器的带宽感知循环分块优化技术
JP6160232B2 (ja) コンパイルプログラムおよびコンパイル方法
US20160371066A1 (en) Computer that performs compiling, compiling method and storage medium that stores compiler program
JP2004265279A (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
Youn et al. Fast graph‐based instruction selection for multi‐output instructions
Metzler et al. Efficient verification of program fragments: Eager POR
Chaudhary Custom exact branch predictor for astar benchmark
JP5509694B2 (ja) コンパイル方法、プログラム実行方法及びプログラム

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees