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

使用事務(wù)來并行化順序框架的制作方法

文檔序號:6477413閱讀:228來源:國知局
專利名稱:使用事務(wù)來并行化順序框架的制作方法
使用事務(wù)來并行化順序框架 背景
軟件事務(wù)存儲器(STM)是類似于數(shù)據(jù)庫事務(wù)的、用于在并發(fā)計算中 控制對共享存儲器的訪問的并發(fā)控制機(jī)制。事務(wù)存儲器的上下文中的事務(wù)
是執(zhí)行對共享存儲器的一系列讀取和寫入的一段代碼。STM用作傳統(tǒng)鎖定 機(jī)制的替換。程序員在代碼塊周圍放置聲明性注釋(例如,原子的)以指 示這些代碼塊所需要的安全特性,并且系統(tǒng)自動保證該塊相對于其它受保 護(hù)的代碼區(qū)域原子地執(zhí)行。軟件事務(wù)存儲器編程模型防止了基于鎖的優(yōu)先 級倒置和死鎖問題。
雖然典型的STM系統(tǒng)具有許多優(yōu)點,但它們?nèi)匀恍枰绦騿T仔細(xì)地避 免非預(yù)期的存儲器訪問排序。例如,在典型的STM環(huán)境中提交事務(wù)(即, 提交處理)的次序是不受約束的。各事務(wù)彼此競爭提交,這意味著事務(wù)1 是在事務(wù)2之前還是之后提交通常是程序的動態(tài)調(diào)度的產(chǎn)物(并且通常也 由程序?qū)S眠壿媮碚{(diào)度)。此外,如果兩個事務(wù)沖突,諸如通過試圖向同 一段存儲器寫入等,則它們的提交次序可基于多個可能的爭用管理策略中 的一個來任意決定。在這兩種情況下,不保證任何特定提交次序;因此確 保程序員的程序按任一次序都正確地運作的負(fù)擔(dān)就落在程序員身上。這使 得并行編程非常困難。
其中執(zhí)行次序可能很重要并且其中并行性很有吸引力的一個場景是在 并行地執(zhí)行一循環(huán)的多次迭代時。以典型的"for...each"循環(huán)為例,如下 所示
ForEach (string s in List<string>)
在該循環(huán)的每一迭代期間,都將執(zhí)行該循環(huán)主體中的語句s。這一循
環(huán)被編寫來順序地執(zhí)行,其中該循環(huán)的第一次迭代在第二次迭代開始之前
5結(jié)束,以此類推。如果在沒有處理可能的副作用或次序依賴性的額外預(yù)防 措施的情況下并行地執(zhí)行這一順序循環(huán),則可能發(fā)生意外結(jié)果。
概述
公開了用于對事務(wù)存儲器系統(tǒng)中的事務(wù)應(yīng)用排序的各種技術(shù)和方法。 事務(wù)存儲器系統(tǒng)具備允許為多個事務(wù)指定預(yù)定提交次序的特征。在運行時 使用該預(yù)定提交次序來幫助確定提交事務(wù)存儲器系統(tǒng)中的事務(wù)的次序。在 一個實現(xiàn)中,預(yù)定提交次序可以或者是總體排序或者是部分排序。在總體 排序的情況下,迫使事務(wù)以線性次序來提交。在部分排序的情況下,允許 在多個可接受場景中的一個中提交事務(wù)。在一個實現(xiàn)中,提交仲裁器跟蹤
表示應(yīng)被允許接下來提交的事務(wù)的下一個提交(next-to-commit)值,并且
當(dāng)特定事務(wù)準(zhǔn)備好提交時,該事務(wù)在其提交序號匹配提交仲裁器的下一個 提交值的情況下被允許提交。
當(dāng)在第一事務(wù)和第二事務(wù)之間發(fā)生沖突時調(diào)用爭用管理過程。在爭用 管理過程中使用預(yù)定提交次序來幫助確定第一事務(wù)還是第二事務(wù)應(yīng)當(dāng)贏得 沖突并被允許繼續(xù)。
公開了用于將順序循環(huán)轉(zhuǎn)換成并行循環(huán)以與事務(wù)存儲器系統(tǒng)一起使用 的技術(shù)。提供了一種基于事務(wù)存儲器的系統(tǒng)。將包含原始順序循環(huán)的第一 部分代碼轉(zhuǎn)換成包含使用事務(wù)來保留原始的輸入到輸出映射的并行循環(huán)的 第二部分代碼。例如,可以通過取原始順序循環(huán)的每一迭代并生成遵循預(yù) 定提交次序過程的單獨事務(wù),并隨后將這些事務(wù)分配到不同的線程以使它 們并行執(zhí)行,來將原始順序循環(huán)轉(zhuǎn)換成并行循環(huán)。萬一在執(zhí)行并行循環(huán)時 從特定事務(wù)中檢測到未經(jīng)處理的異常,則提交該特定事務(wù)和任何前導(dǎo)事務(wù) 所作出的狀態(tài)修改并丟棄任何后續(xù)事務(wù)所作出的狀態(tài)修改。否則,所有事 務(wù)提交。
在一個實現(xiàn)中,可以將開放和/或封閉順序循環(huán)轉(zhuǎn)換成并行循環(huán)。例如, 分析包含原始順序循環(huán)的一部分代碼以確定該原始順序循環(huán)的固定迭代次 數(shù)。將原始順序循環(huán)轉(zhuǎn)換成可生成數(shù)量等于固定迭代次數(shù)的事務(wù)的并行循 環(huán)。作為另一示例,可以將開放順序循環(huán)轉(zhuǎn)換成生成包含推測流水線的每一迭代的相應(yīng)工作項的單獨事務(wù)的并行循環(huán)。將這些事務(wù)分配到不同的線 程以允許并行循環(huán)的至少一部分并行執(zhí)行。并行循環(huán)隨后在使用預(yù)定提交 排序的好處的事務(wù)存儲器系統(tǒng)的保護(hù)之下執(zhí)行。
在一個實現(xiàn)中,提供了一種用于執(zhí)行從開放順序循環(huán)生成的并行循環(huán) 的方法。生成估計在并行循環(huán)中執(zhí)行的迭代次數(shù)的推測流水線,該并行循 環(huán)是從開放順序循環(huán)中生成的。系統(tǒng)取推測流水線的每一迭代并生成包含 相應(yīng)工作項的單獨事務(wù)。隨后將這些單獨事務(wù)分配到不同的線程以使它們 最終可以并行執(zhí)行。對每一相應(yīng)工作項評估終止條件。在相應(yīng)工作項中的 特定一個確定到達(dá)了終止并行循環(huán)的時間時,提交前導(dǎo)事務(wù)并丟棄后續(xù)事 務(wù)。
提供本概述以便以簡化形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一 些概念。本概述不旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也 不旨在用于幫助確定所要求保護(hù)的主題的范圍。
附圖簡述


圖1是一個實現(xiàn)的計算機(jī)系統(tǒng)的圖示。
圖2是在圖1的計算機(jī)系統(tǒng)上操作的一個實現(xiàn)的事務(wù)存儲器應(yīng)用程序 的圖示。
圖3是圖1的系統(tǒng)的一個實現(xiàn)的高級處理流程圖。
圖4是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在使用提交仲裁 器來強制實施預(yù)定提交次序時所涉及的各階段。
圖5是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在使用提交仲裁 器來強制實施對多個事務(wù)的總體排序時所涉及的各階段。
圖6是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在使用提交仲裁 器來強制實施對多個事務(wù)的部分排序時所涉及的各階段。
圖7是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在提供使用預(yù)定 提交次序信息來管理沖突的爭用管理過程時所涉及的各階段。
圖8是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在提供使用預(yù)定 提交次序信息來管理關(guān)于嵌套事務(wù)的沖突的爭用管理過程時所涉及的各階段。
圖9是示出頂層先輩具有公共先輩的示例性先輩樹的邏輯圖。
圖IO是示出頂層先輩不具有公共先輩的示例性先輩樹的邏輯圖。
圖11是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在通過在事務(wù)存
儲器系統(tǒng)中使用提交仲裁器來減少浪費的工作量時所涉及的各階段。
圖12是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在爭用管理過程
中分析整個先輩鏈以確定適當(dāng)?shù)臎_突解決方案時所涉及的各階段。
圖13是在圖1的計算機(jī)系統(tǒng)上操作的一個實現(xiàn)的事務(wù)存儲器應(yīng)用程序
的圖示。
圖14是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在將原始順序循
環(huán)轉(zhuǎn)換成并行循環(huán)時所涉及的各階段。
圖15是圖1的一個實現(xiàn)的處理流程圖,其示出在使用預(yù)定提交次序過 程來確保并行循環(huán)中的事務(wù)以正確次序提交時所涉及的各階段。
圖16是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在使用提交仲裁 器來檢測并處理執(zhí)行并行循環(huán)時所發(fā)生的沖突時所涉及的各階段。
圖17是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在檢測并處理執(zhí) 行并行循環(huán)時所發(fā)生的未經(jīng)處理的異常時所涉及的各階段。
圖18A-18B示出從原始順序循環(huán)到并行循環(huán)的示例性轉(zhuǎn)換的假想源代碼。
圖19是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在將封閉順序循 環(huán)轉(zhuǎn)換成并行循環(huán)時所涉及的各階段。
圖20是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在使用推測流水 線將開放順序循環(huán)轉(zhuǎn)換成并行循環(huán)時所涉及的各階段。
圖21是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在執(zhí)行從開放順 序循環(huán)生成的并行循環(huán)時所涉及的各階段。
圖22是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在確保從開放順 序循環(huán)生成的并行循環(huán)中的每一工作項以正確次序提交時所涉及的各階 段。
圖23是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在計算推測流水涉及的各階段。圖24A-24B示出從原始開放順序循環(huán)到并行循環(huán)的示例性轉(zhuǎn)換的假想 源代碼。詳細(xì)描述為促進(jìn)對本發(fā)明的原理的理解,現(xiàn)將對附圖中所示的各實施例加以參 考,同時也將用具體語言描述它們。不過,需要理解的是,并無意由此作 出范圍上的限制。對所述實施例的任何改變和進(jìn)一步更改,以及在此所述 的原理的進(jìn)一步應(yīng)用都可以預(yù)期將是本領(lǐng)域技術(shù)人員通常能想到的。本系統(tǒng)可以在一般上下文中被描述為事務(wù)存儲器系統(tǒng),但是本系統(tǒng)還 用于除此之外的其它目的。在一個實現(xiàn)中,此處所描述的一個或多個技術(shù) 可被實現(xiàn)為諸如微軟⑧.NET框架等框架程序內(nèi)的、或來自為開發(fā)者提供開 發(fā)軟件應(yīng)用程序的平臺任何其它類型的程序或服務(wù)的特征。在另一實現(xiàn)中, 此處所描述的一個或多個技術(shù)被實現(xiàn)為涉及開發(fā)在并發(fā)環(huán)境中執(zhí)行的應(yīng)用 程序的其它應(yīng)用程序的特征。在一個實現(xiàn)中,在事務(wù)存儲器系統(tǒng)中提供允許為多個事務(wù)指定預(yù)定提 交次序的特征。該預(yù)定提交次序用于幫助確定提交事務(wù)的次序。在一個實 現(xiàn)中,當(dāng)在第一事務(wù)和第二事務(wù)之間發(fā)生沖突時調(diào)用爭用管理過程。然后 在爭用管理過程中使用該預(yù)定提交次序來幫助確定第一事務(wù)還是第二事務(wù) 應(yīng)當(dāng)贏得沖突并被允許繼續(xù)。#另一定孤中.沐塞各存儲器系統(tǒng)中提俱將匬始順序循環(huán)轉(zhuǎn)稱成并行循環(huán)的特征。原始順序循環(huán)以確保原始的輸入到輸出映射得到保留的方式 來轉(zhuǎn)換成并行循環(huán)。此處使用的術(shù)語"原始的輸入到輸出映射得到保留" 意味著在執(zhí)行并行化循環(huán)之后程序的狀態(tài)是相同的,如同改為運行了順序 循環(huán)一樣。在一個實現(xiàn)中,通過將原始順序循環(huán)的每一次迭代置于事務(wù)中 并隨后使用此處描述的預(yù)定提交次序過程來確保以正確次序提交事務(wù),來 在并行循環(huán)中保留原始的輸入到輸出映射。盡管此處討論的多個示例是在軟件事務(wù)存儲器系統(tǒng)的上下文中描述 的,但可以理解,在其它實現(xiàn)中,此處所描述的特征/技術(shù)中的一些、全部、或附加特征和/或技術(shù)可以用硬件事務(wù)存儲器系統(tǒng)來與軟件事務(wù)存儲器系統(tǒng) 分開或相結(jié)合地實現(xiàn)。
如圖1所示,用于實現(xiàn)本系統(tǒng)的一個或多個部分的示例性計算機(jī)系統(tǒng) 包括諸如計算設(shè)備100等計算設(shè)備。在其最基本的配置中,計算設(shè)備100
通常包括至少一個處理單元102和存儲器104。取決于計算設(shè)備的確切配置 和類型,存儲器104可以是易失性的(如RAM)、非易失性的(如ROM、 閃存等)或是兩者的某種組合。該最基本配置在圖1中由虛線106來示出。 另外,設(shè)備100還可具有附加特征/功能。例如,設(shè)備100還可包含附 加存儲(可移動和/或不可移動),包括但不限于磁盤、光盤或磁帶。這樣 的附加存儲在圖1中由可移動存儲108和不可移動存儲110示出。計算機(jī) 存儲介質(zhì)包括以用于存儲諸如計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其 它數(shù)據(jù)等信息的任何方法或技術(shù)來實現(xiàn)的易失性和非易失性、可移動和不
可移動介質(zhì)。存儲器104、可移動存儲108和不可移動存儲110都是計算機(jī) 存儲介質(zhì)的示例。計算機(jī)存儲介質(zhì)包括但不限于,RAM、 ROM、 EEPROM、 閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲、 磁帶盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或者可用于存儲所需信息并 且可由設(shè)備100訪問的任何其它介質(zhì)。任何這樣的計算機(jī)存儲介質(zhì)都可以 是設(shè)備IOO的一部分。
計算設(shè)備IOO包括允許計算設(shè)備100與其它計算機(jī)/應(yīng)用程序114進(jìn)行 通信的一個或多個通信連接115。設(shè)備IOO還可以具有諸如鍵盤、鼠標(biāo)、筆、 語音輸入設(shè)備、觸摸輸入設(shè)備等輸入設(shè)備112。還可以包括諸如顯示器、揚 聲器、打印機(jī)等輸出設(shè)備111。這些設(shè)備在本領(lǐng)域中公知且無需在此處詳細(xì) 討論。在一個實現(xiàn)中,計算設(shè)備100包括事務(wù)存儲器應(yīng)用程序200。事務(wù)存 儲器應(yīng)用程序200將在圖2中更詳細(xì)地描述。
現(xiàn)在轉(zhuǎn)向圖2并繼續(xù)參考圖1,示出了在計算設(shè)備100上操作的事務(wù) 存儲器應(yīng)用程序200。事務(wù)存儲器應(yīng)用程序200是駐留在計算設(shè)備100上的 應(yīng)用程序中的一個。然而,可以理解,事務(wù)存儲器應(yīng)用程序200可另選地 或另外地被具體化為一個或多個計算機(jī)上的計算機(jī)可執(zhí)行指令和/或與圖1 所示的不同的變型。另選地或另外地,事務(wù)存儲器應(yīng)用程序200的一個或多個部分可以是系統(tǒng)存儲器104的一部分、可以在其它計算機(jī)和/或應(yīng)用程
序115上、或可以是計算機(jī)軟件領(lǐng)域的技術(shù)人員能想到的其它此類變型。
事務(wù)存儲器應(yīng)用程序200包括負(fù)責(zé)執(zhí)行在此描述的技術(shù)中的一些或全 部的程序邏輯204。程序邏輯204包括用于提供事務(wù)存儲器(STM)系統(tǒng)的 邏輯206;用于提供允許為STM系統(tǒng)中的多個事務(wù)靜態(tài)或動態(tài)地指定預(yù)定 提交次序的提交仲裁器的邏輯208;用于允許提交仲裁器在運行時使用預(yù)定 提交次序來幫助確定提交事務(wù)存儲器系統(tǒng)中的多個事務(wù)的次序的邏輯210; 用于提供當(dāng)在第一事務(wù)和第二事務(wù)之間發(fā)生沖突時調(diào)用的爭用管理過程的 邏輯212;用于在爭用管理過程中使用預(yù)定提交次序來幫助確定第一事務(wù)還 是第二事務(wù)應(yīng)當(dāng)贏得沖突并被允許繼續(xù)(例如,取決于同一事務(wù)組中的兩
個事務(wù)中的哪個事務(wù)具有較低提交序號)的邏輯214;用于允許提交仲裁器
可操作來使用預(yù)定提交排序來跟蹤一個或多個排序值(例如,在總體排序 中,表示多個事務(wù)中應(yīng)被允許提交的下一事務(wù)的下一個提交字段)以及用 于將該一個或多個排序值與給定事務(wù)的特定提交序號進(jìn)行比較以查看該給
定事務(wù)的提交是否是適當(dāng)?shù)?給定應(yīng)強制實施的排序)的邏輯216;以及用
于操作該應(yīng)用程序的其它邏輯220。在一個實現(xiàn)中,程序邏輯204可操作來 通過編程,如使用對程序邏輯204中的一個過程的單一調(diào)用而從另一程序 調(diào)用。
現(xiàn)在轉(zhuǎn)向圖3-10并繼續(xù)參考圖1-2,更詳細(xì)地描述了用于實現(xiàn)事務(wù)存 儲器應(yīng)用程序200的一個或多個實現(xiàn)的各階段。圖3是事務(wù)存儲器應(yīng)用程 序200的高級處理流程圖。在一種形式中,圖3的過程至少部分地在計算 設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點240處開始,在那里提供事 務(wù)存儲器系統(tǒng)(例如,軟件事務(wù)存儲器系統(tǒng))(階段242)。提供允許為多 個事務(wù)指定(例如,動態(tài)或靜態(tài)地分配)預(yù)定提交次序(例如,總體排序 或部分排序)的特征(階段244)。此處所使用的術(shù)語"預(yù)定提交次序"旨 在包括在事務(wù)開始運行之前的任何時刻所確定的特定相關(guān)事務(wù)組應(yīng)被提交 的特定次序。此處所使用的術(shù)語事務(wù)"組"包括由同一個提交仲裁器管理 的特定的一組(例如,多個)事務(wù),以及這些事務(wù)的嵌套子事務(wù)。
在運行時使用預(yù)定提交次序來幫助確定提交事務(wù)存儲器系統(tǒng)中的多個事務(wù)的次序(階段246)。使用預(yù)定提交次序來幫助解決在多個事務(wù)中的兩
個或多個之間發(fā)生的沖突(階段248)。該過程在結(jié)束點250處結(jié)束。
圖4示出了在使用提交仲裁器來強制實施預(yù)定提交次序時所涉及的各 階段的一個實現(xiàn)。在一種形式中,圖4的過程至少部分地在計算設(shè)備100 的操作邏輯中實現(xiàn)。該過程在起始點270處開始,在那里為事務(wù)存儲器系 統(tǒng)提供一個或多個提交仲裁器,該提交仲裁器可操作來允許為多個事務(wù)指 定預(yù)定提交次序(階段272)。此處所使用的術(shù)語"提交仲裁器"旨在包括 負(fù)責(zé)管理應(yīng)當(dāng)相對于彼此來排序的一個或多個事務(wù)組的任何類型的程序、 特征或進(jìn)程。在一個實現(xiàn)中,在任何給定時刻可能存在在程序中活動的一 個或多個提交仲裁器。例如,可創(chuàng)建如所需要的那樣多的提交仲裁器以管 理不同的事務(wù)組。提交仲裁器跟蹤并更新用于確定事務(wù)相對于彼此的正確 排序的一個或多個排序值(階段274)。在總體排序的情況下,可使用下一 個提交字段來表示多個事務(wù)中應(yīng)被下一個提交的下一事務(wù)(階段274)。在 部分排序的情況下,使用排序值來跟蹤不同的可能次序的有向圖。在適當(dāng) 時,提交仲裁器使用預(yù)定提交次序來為多個事務(wù)中的每一個提供提交序號 (階段276)。
當(dāng)多個事務(wù)中的一特定事務(wù)準(zhǔn)備提交時,如果該特定事務(wù)的提交序號 在與一個或多個排序值進(jìn)行比較時揭示該提交是適當(dāng)?shù)?,則提交仲裁器允 許該事務(wù)提交(階段278)。在總體排序的情況下,該情況在下一個提交字 段與該特定事務(wù)的提交序號具有相同的值時發(fā)生。在這種情況下,提交仲 裁器允許該事務(wù)提交并且然后在提交成功的情況下將下一個提交字段遞增 至序列中的下一個數(shù)字(例如,下一個較高的數(shù)字)(階段278)。當(dāng)該多 個事務(wù)中的特定事務(wù)準(zhǔn)備提交時,如果該特定事務(wù)的提交序號在與排序值 進(jìn)行比較時揭示該提交不是適當(dāng)?shù)模瑒t將該特定事務(wù)置于掛起模式中直到 其在前導(dǎo)事務(wù)提交后的稍后時刻被喚醒(階段280)。在總體排序的情況下, 當(dāng)下一個提交字段和該特定事務(wù)的序號不具有相同的值時進(jìn)入該掛起模 式。
在一個實現(xiàn)中,系統(tǒng)可在一事務(wù)的直接前導(dǎo)者被提交后喚醒該事務(wù), 在這種情況下該事務(wù)可嘗試立即提交?;蛘撸到y(tǒng)可選擇在某一非直接前導(dǎo)者被提交后喚醒事務(wù),即使該事務(wù)的直接前導(dǎo)者可能尚未提交。在被喚 醒之后,系統(tǒng)檢査以查看對于該事務(wù)而言真正提交是否適當(dāng)。如果是,則 提交該事務(wù)。該過程在結(jié)束點282處結(jié)束。
圖5示出了在使用提交仲裁器來強制實施對多個事務(wù)的總體排序時所 涉及的各階段的一個實現(xiàn)。在一種形式中,圖5的過程至少部分地在計算 設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點290處開始,在那里提供可 操作來允許為多個事務(wù)指定預(yù)定總體排序的一個或多個提交仲裁器(例如, 指定應(yīng)提交多個事務(wù)的確切次序的提交仲裁器)(階段292)。當(dāng)多個事務(wù) 中的一特定事務(wù)到達(dá)其提交點時,為了強制實施提交次序,將該特定事務(wù) 的提交次序與提交仲裁器的下一個提交字段進(jìn)行比較(階段296)。在一個 實現(xiàn)中,如果系統(tǒng)確定總體排序的強制實施不是必要的(例如,諸如因為 肯定不存在沖突),則可在適當(dāng)時違反總體排序要求(階段294),然后該 過程在結(jié)束點302處結(jié)束。
如果要強制實施提交排序,并且如果該特定事務(wù)的提交次序具有與提 交仲裁器的下一個提交字段相同的值(判定點296),則提交該特定事務(wù), 并且如果提交成功,則遞增該下一個提交字段并喚醒下一后繼者(如果有 的話)(階段298)。如果該特定事務(wù)的提交次序不具有與提交仲裁器的下 一個提交字段相同的值(判定點296),則將該特定事務(wù)置于掛起/休眠模 式中直到其在前導(dǎo)事務(wù)提交后的稍后時刻被喚醒(階段300)。在一個實現(xiàn) 中,在稍后時刻,如果與前導(dǎo)者發(fā)生沖突,則可要求該特定事務(wù)中止并回 退以使得前導(dǎo)者可向前進(jìn)。否則,如果未發(fā)生這樣的沖突,則一旦滿足此 處所描述的提交次序要求,該特定事務(wù)就應(yīng)能夠提交。該過程在結(jié)束點302 處結(jié)束。
圖6示出了在使用提交仲裁器來強制實施對多個事務(wù)的部分排序時所 涉及的各階段的一個實現(xiàn)。在一種形式中,圖6的過程至少部分地在計算 設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點310處開始,在那里提供可 操作來允許為多個事務(wù)指定預(yù)定部分排序的一個或多個提交仲裁器(例如, 指定應(yīng)提交多個事務(wù)的多個可接受次序(例如,以有向圖的形式)的提交 仲裁器)(階段312)。當(dāng)該多個事務(wù)中的一特定事務(wù)到達(dá)其提交點時,為了強制實施提交次序,參考前導(dǎo)事務(wù)的狀態(tài)(例如, 一個或多個排序值) 來尋找特定提交事務(wù)(例如,由提交仲裁器來跟蹤的)(階段314)。如果
該特定事務(wù)的所有前導(dǎo)者都已提交(判定點316),則提交該特定事務(wù)(階 段318)。如果提交成功,則在適當(dāng)時更新由提交仲裁器跟蹤的一個或多個 值,并且喚醒所有可能的下一后繼者(如果有的話)(階段318)。
如果該特定事務(wù)的所有前導(dǎo)者尚未提交(判定點316),則將該特定 事務(wù)置于掛起/休眠模式中直到其在前導(dǎo)事務(wù)提交后的稍后時刻被喚醒(階 段320)。該過程在結(jié)束點322處結(jié)束。
圖7示出了在提供使用預(yù)定提交次序信息來管理沖突的爭用管理過程 時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖7的過程至少部分地在 計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點340處開始,在那里提 供支持用于一個或多個事務(wù)組的預(yù)定提交次序的事務(wù)存儲器系統(tǒng)(階段 342)。提供當(dāng)在第一事務(wù)和第二事務(wù)之間發(fā)生沖突時調(diào)用的爭用管理過程 (階段344)。在爭用管理過程中使用預(yù)定提交次序來幫助確定第一事務(wù)還 是第二事務(wù)應(yīng)當(dāng)贏得沖突并被允許繼續(xù)(階段346)。如果第一事務(wù)和第二 事務(wù)不是同一事務(wù)組的一部分(判定點348),則在這兩個事務(wù)之間不強制 實施預(yù)定提交次序(因為不存在沖突)(階段350)。在這種情況下,因為 這兩個事務(wù)不在同一事務(wù)組中,所以不使用排序因素來幫助解決沖突(階 段350)。
如果第一事務(wù)和第二事務(wù)是同一事務(wù)組的一部分(判定點348),則 系統(tǒng)將第一事務(wù)的第一序號與第二事務(wù)的第二序號進(jìn)行比較(階段352)。 允許具有較低序號的事務(wù)繼續(xù)(或用另一合適的優(yōu)先級排序)(階段354)。 該過程在結(jié)束點356處結(jié)束。
圖8示出了在提供使用預(yù)定提交次序信息來管理關(guān)于嵌套事務(wù)的沖突 的爭用管理過程時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖8的過 程至少部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。在一個實現(xiàn)中,在提交 每一個事務(wù)之前對于該特定事務(wù)考慮整個先輩鏈,以便強制實施存在于該 鏈中的任何排序。該過程在起始點370處開始,在那里提供當(dāng)在第一事務(wù) 和第二事務(wù)之間發(fā)生沖突時調(diào)用的爭用管理過程(階段372)。在爭用管理過程中使用預(yù)定提交次序來幫助確定第一事務(wù)還是第二事務(wù)應(yīng)當(dāng)贏得沖突
并被允許繼續(xù)(階段374)。如果第一和第二事務(wù)不是同一事務(wù)組的一部分 (判定點376),則在這兩個事務(wù)之間不強制實施預(yù)定提交次序(因為不存 在沖突)(階段378)并且該過程在結(jié)束點388處結(jié)束。如果第一和第二事 務(wù)是同一事務(wù)組的一部分(判定點376),則系統(tǒng)檢査以査看是否涉及嵌套 事務(wù)(判定點380)。
如果不涉及嵌套事務(wù)(判定點380),則將第一事務(wù)的序號(或其它 排序指示符)與第二事務(wù)的序號(或其它排序指示符)進(jìn)行比較(階段384)。 允許具有較低序號的事務(wù)繼續(xù)(或者通過使用其它合適的排序準(zhǔn)則被確定
為按次序的下一個的事務(wù))(階段386)。
如果涉及嵌套事務(wù)(判定點380),則將第一事務(wù)的頂層先輩的序號 (或其它排序指示符)與第二事務(wù)的頂層先輩的序號(或其它排序指示符) 進(jìn)行比較(階段382)。此處所使用的術(shù)語"頂層先輩"在涉及公共先輩的 情況下旨在包括公共先輩的直接子事務(wù),而在不涉及公共先輩的情況下旨 在包括每一個事務(wù)的頂層先輩。涉及公共和非公共先輩的這些情況在圖9 和IO中更詳細(xì)地示出。允許具有較低序號的事務(wù)繼續(xù)(例如,與具有較低 序號的先輩相關(guān)的事務(wù)或其它合適的準(zhǔn)則)(階段386)。該過程在結(jié)束點 388處結(jié)束。
圖9是示出頂層先輩具有公共先輩的示例性先輩樹的邏輯圖。在所示 示例中,事務(wù)A是D和E的公共先輩。當(dāng)在D和E之間發(fā)生沖突時,分 析事務(wù)B和C (公共先輩A的直接子事務(wù))的序號以確定哪個事務(wù),艮P, 是D還是E應(yīng)被允許繼續(xù)(圖8中的階段382)。
圖10是示出頂層先輩不具有公共先輩的示例性先輩樹的邏輯圖。在所 示示例中,事務(wù)A是事務(wù)C的先輩。事務(wù)D是事務(wù)F的先輩。當(dāng)在事務(wù)C 和F之間發(fā)生沖突時,則將事務(wù)A和D (各自的頂層先輩)的序號進(jìn)行比 較以確定哪個事務(wù),即,是C還是F應(yīng)被允許繼續(xù)(圖8中的階段382)。
圖11示出了在事務(wù)存儲器系統(tǒng)中通過使用提交仲裁器來減少浪費的 工作量時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖11的過程至少部 分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點400處開始,在那里為事務(wù)存儲器系統(tǒng)提供一個或多個提交仲裁器,該提交仲裁器可操作 來允許為多個事務(wù)指定預(yù)定提交次序(階段402)。提交仲裁器可操作來將 事務(wù)置于休眠/掛起模式中以便阻塞該事務(wù)在前導(dǎo)事務(wù)仍在執(zhí)行時重新執(zhí)行
(例如,通過分析預(yù)定提交次序來確定正確次序)(階段404)。提交仲裁
器還可操作來一旦前導(dǎo)事務(wù)完成則喚醒被置于掛起模式的事務(wù)(例如,通
過再次分析預(yù)定提交次序來確定正確次序)(階段406)。通過提供這些阻 塞和喚醒機(jī)制,提交仲裁器通過阻止將在稍后不得不撤銷的操作的執(zhí)行而
幫助減少浪費的工作量(階段408)。該過程在結(jié)束點410處結(jié)束。
ra i,;山7古在m翁t田^f scbzv士c畝女Aifc韭fe4:i、1 s&咖;壬i^iVi、/rti命在s tii . i二 /j、山j(luò) t/tj曰>*± Ai'i土 r 乂j v i i夕Li牛wH/a^tiu'-M'r 5"c川十
決方案時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖12的過程至少部
分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點430處開始,在
那里提供當(dāng)在第一事務(wù)和第二事務(wù)之間發(fā)生沖突時調(diào)用的爭用管理過程
(階段432)。在爭用管理過程中使用預(yù)定提交次序來幫助確定第一事務(wù)還
是第二事務(wù)應(yīng)當(dāng)贏得沖突并被允許繼續(xù)(階段434)。分析預(yù)定提交次序的
整個先輩鏈以幫助確定適當(dāng)?shù)臎_突管理(階段436)。例如,如果存在四個
事務(wù),兩個父事務(wù)和兩個子事務(wù),其中B嵌套在A中而D嵌套在C中。假
設(shè)在A和C之間存在A應(yīng)在C之前提交的排序關(guān)系。如果B和D沖突,
則爭用管理過程應(yīng)偏向B,因為在給定A必須在C之前提交的情況下偏向
D是無用的(階段436)。該過程在結(jié)束點438處結(jié)束。
現(xiàn)在轉(zhuǎn)向圖13并繼續(xù)參考圖1,示出了在計算設(shè)備IOO上操作的具有 并行循環(huán)支持的事務(wù)存儲器應(yīng)用程序500。在一個實現(xiàn)中,具有并行循環(huán)支 持的事務(wù)存儲器應(yīng)用程序500是駐留在計算設(shè)備100上的應(yīng)用程序之一。 然而,可以理解,具有并行循環(huán)支持的事務(wù)存儲器應(yīng)用程序500可另選地 或另外地被具體化為一個或多個計算機(jī)上的計算機(jī)可執(zhí)行指令和/或與圖1 所示的不同的變型。另選地或另外地,具有并行循環(huán)支持的事務(wù)存儲器應(yīng) 用程序500的一個或多個部分可以是系統(tǒng)存儲器104的一部分、可以在其 它計算機(jī)和/或應(yīng)用程序115上、或可以是計算機(jī)軟件領(lǐng)域的技術(shù)人員能想 到的其它此類變型。
具有并行循環(huán)支持的事務(wù)存儲器應(yīng)用程序500包括負(fù)責(zé)執(zhí)行在此描述的技術(shù)中的一些或全部的程序邏輯504。程序邏輯504包括用于提供事務(wù)存 儲器系統(tǒng)的邏輯506;用于將包含原始順序循環(huán)的第一部分代碼轉(zhuǎn)換成包含
使用事務(wù)來保留原始的輸入到輸出映射并提高安全性的并行循環(huán)的第二部
分代碼的邏輯508;用于將原始順序循環(huán)的迭代中的一個或多個置于并行循 環(huán)中的各事務(wù)中的單獨事務(wù)中的邏輯510;用于通過使用與原始順序循環(huán)的
執(zhí)行次序相一致的預(yù)定提交次序來提交事務(wù)以保留原始的輸入到輸出映射
的邏輯512;用于在原始順序循環(huán)包含修改數(shù)據(jù)的操作的情況下使用提交仲 裁器來檢測并處理并行循環(huán)中的沖突的邏輯514;用于在不執(zhí)行對原始順序
^sttiVi々白,、又ss/v士CiWi'i^、/D tt/^ cft絡(luò) 一 卻a/Hi;m6f^B4縣m工7tSfe甴eAA
'l/日,r urj柳吁"fiifr 乂j v l u;j IF3 VLi i 工/j人"~"pij乂J i Vi hi h j ""ffl" j i j ; / ij j 'h/u f >js>i_4 順序循環(huán)對重新排序(使用試探法、第一部分代碼中的用戶定義的注釋等) 免疫的情況下以允許各事務(wù)按不取決于原始順序循環(huán)的執(zhí)行次序的次序來 提交的方式來創(chuàng)建第二部分代碼的邏輯516;用于生成第二部分代碼以便并 行地執(zhí)行事務(wù)中的至少某一些的邏輯517;用于以各單獨事務(wù)中的至少某一 些在不同的線程上執(zhí)行的狀態(tài)來使用事務(wù)存儲器系統(tǒng)來執(zhí)行第二部分代碼
的邏輯518;以及用于操作該應(yīng)用程序的其它邏輯520。在一個實現(xiàn)中,程 序邏輯504可操作來通過編程,如使用對程序邏輯504中的過程的單一調(diào) 用而從另一程序調(diào)用。
現(xiàn)在轉(zhuǎn)向圖14,示出在將原始順序循環(huán)轉(zhuǎn)換成并行循環(huán)時所涉及的高 級階段的一個實現(xiàn)。在一種形式中,圖14的過程至少部分地在計算設(shè)備100
丄L L口 、mt山cii - 卞m 、~i" 、_L亇n 丄/、k 一 一八 t_l "t~t丄/、 — A— Tirr en 、s 、_L T3V rrr丄,、iirzr t~^~
tf、J保作32牛耳屮頭觀。該3i程仕膽5iH后、處丌乂日,仕那生旭H4XJ眾^順廳 循環(huán)的每一迭代并生成遵循預(yù)定提交次序過程的單獨事務(wù)(例如,包括相
應(yīng)的工作項),來將順序循環(huán)轉(zhuǎn)換成并行循環(huán),從而尊重與原始順序循環(huán) 的原始執(zhí)行相一致的提交次序(階段552)。在另一實現(xiàn)中,在認(rèn)為每一迭 代創(chuàng)建一個事務(wù)代價過大的情況下,可以將鄰接的迭代帶(例如相鄰的迭 代) 一起分組在一事務(wù)中(階段552)。系統(tǒng)在不執(zhí)行對原始順序循環(huán)的編 譯器分析的情況下生成并行循環(huán)(階段554)。隨后執(zhí)行并行循環(huán),其中各 單獨事務(wù)中的至少某一些被分配到不同的線程以使它們并行執(zhí)行(階段 556)。該過程在結(jié)束點558處結(jié)束。
圖15示出在使用預(yù)定提交次序過程來確保并行循環(huán)中的事務(wù)以正確
17次序提交時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖15的過程至少
部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點570處開始,
在那里將原始順序循環(huán)轉(zhuǎn)換成遵循預(yù)定提交次序過程的并行循環(huán)(階段
572)。系統(tǒng)向并行循環(huán)中的每一事務(wù)分配提交序號(或使用跟蹤提交事務(wù) 的次序的另一合適的方式)(階段574)。在執(zhí)行并行循環(huán)時,系統(tǒng)使用預(yù) 定提交次序過程來確保每一相應(yīng)事務(wù)只可以在并行循環(huán)的在前迭代成功完 成之后才能完成(例如,使事務(wù)等待直到其提交次序揭示它可以提交)(階 段576)。該過程在結(jié)束點578處結(jié)束。
圖16示出在使用提交仲裁器來檢測并處理在執(zhí)行并行循環(huán)時所發(fā)生 的沖突時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖16的過程至少部 分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點600處開始,在 那里將原始順序循環(huán)轉(zhuǎn)換成使用預(yù)定提交次序過程來確保正確排序的并行 循環(huán)(階段602)。系統(tǒng)執(zhí)行并行循環(huán)(階段604)。系統(tǒng)隨后檢測并行循 環(huán)包含超過一個將修改同一數(shù)據(jù)元素(例如,因為缺少線程安全性,因為 排序要求等)的單獨事務(wù)(例如,循環(huán)迭代)(階段606)。使用提交仲裁 器來檢測并處理在執(zhí)行并行循環(huán)時所發(fā)生的沖突,如通過檢測后續(xù)事務(wù)的 亂序執(zhí)行并且一旦前導(dǎo)事務(wù)完成則安排后續(xù)事務(wù)的重新執(zhí)行(階段608)。 該過程在結(jié)束點610處結(jié)束。
圖17示出在檢測并處理在執(zhí)行并行循環(huán)時所發(fā)生的未經(jīng)處理的異常 時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖17的過程至少部分地在 計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點630處開始,在那里將 原始順序循環(huán)轉(zhuǎn)換成使用事務(wù)來保留原始的輸入到輸出映射并提高安全性 的并行循環(huán)(階段632)。系統(tǒng)執(zhí)行并行循環(huán)(階段634)并檢測在執(zhí)行并 行循環(huán)時特定事務(wù)中所發(fā)生的未經(jīng)處理的異常(階段636)。提交特定事務(wù) 以及該特定事務(wù)的任何前導(dǎo)事務(wù)所作出的狀態(tài)修改(階段638)。通過回退 它們的事務(wù)來丟棄任何后續(xù)事務(wù)對該特定事務(wù)所作出的推測性狀態(tài)修改 (階段640)。該過程在結(jié)束點642處結(jié)束。
圖18A-18B示出從原始順序循環(huán)到并行循環(huán)的示例性轉(zhuǎn)換的假想源代 碼。盡管圖18A示出包含"for...each"循環(huán)652的原始順序循環(huán)650,但可以理解,也可以使用其它形式的循環(huán)構(gòu)造。對于該循環(huán)中的每一迭代,
執(zhí)行一個或多個語句654。圖18B示出在使用此處討論的技術(shù)中的某一種將順序循環(huán)轉(zhuǎn)換成并行循環(huán)660之后其看來如何的假想示例。在所示示例中,通過對原始順序循環(huán)664的每一迭代生成單獨事務(wù)來創(chuàng)建并行循環(huán)。在另一實現(xiàn)中,在認(rèn)為每一迭代創(chuàng)建一個事務(wù)代價過大的情況下,可以將鄰接的迭代帶(例如相鄰的迭代) 一起分組在一事務(wù)中。每一單獨事務(wù)隨后創(chuàng)建新工作項以執(zhí)行作為原始循環(huán)中的語句667來包括的工作??墒褂脝为毜念?62來聲明工作項迭代。隨后將各單獨事務(wù)分配到不同的線程以使它們可以并行執(zhí)行。
圖19示出將封閉順序循環(huán)轉(zhuǎn)換成并行循環(huán)時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖19的過程至少部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點670處開始,在那里提供事務(wù)存儲器系統(tǒng)(階段672)。系統(tǒng)分析包含原始順序循環(huán)的第一部分代碼以確定原始順序循環(huán)將執(zhí)行的固定迭代次數(shù)(例如,通過檢索用于確定循環(huán)終點的常數(shù)值)(階段674)。將包含原始順序循環(huán)的第一部分代碼轉(zhuǎn)換成包含可以生成等于固定迭代次數(shù)的事務(wù)的并行循環(huán)的第二部分代碼(階段674)。系統(tǒng)使用事務(wù)存儲器系統(tǒng)來執(zhí)行第二部分代碼,其中將這些事務(wù)中的至少某一些分配到不同的線程以使它們可以并行執(zhí)行(階段678)。系統(tǒng)使用預(yù)定提交次序過程來以正確次序提交事務(wù)(例如,其中每一事務(wù)使用相應(yīng)的歸納變量計數(shù)器作為提交順序號)(階段680)。該過程在結(jié)束點682處結(jié)束。
在一個實現(xiàn)中,圖19中描述的事務(wù)過程只用于在循環(huán)主體本身中從不對歸納變量進(jìn)行寫入的循環(huán)。換言之,可通過在循環(huán)主體中對歸納變量進(jìn)行寫入或通過取歸納變量的地址并對其進(jìn)行可導(dǎo)致寫如的某些操作(將其傳遞給函數(shù)、生成它的別名、等等)來使循環(huán)無法執(zhí)行。
圖20示出使用推測流水線來將開放順序循環(huán)轉(zhuǎn)換成并行循環(huán)時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖20的過程至少部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點700處開始,在那里提供事務(wù)存儲器系統(tǒng)(階段702)。系統(tǒng)將包含開放順序循環(huán)的第一部分代碼轉(zhuǎn)換成包含可操作來生成單獨事務(wù)的并行循環(huán)的第二部分代碼(例如,使得至少某些事務(wù)并行執(zhí)行),其中該單獨事務(wù)包含推測流水線的每一迭代的相應(yīng)工作項(階段704)。在不執(zhí)行對開放順序循環(huán)的編譯器分析的情況下生成
第二部分代碼(階段706)。系統(tǒng)使用事務(wù)存儲器系統(tǒng)來執(zhí)行第二部分代碼,其中將這些單獨事務(wù)中的至少某一些分配到不同的線程以使它們并行執(zhí)行(階段708)。通過以預(yù)定提交次序(例如,與開放順序循環(huán)的執(zhí)行次序相一致)提交事務(wù)來保留原始的輸入到輸出映射(階段710)。該過程在結(jié)束點712處結(jié)束。
圖21示出在執(zhí)行從開放順序循環(huán)生成的并行循環(huán)時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖21的過程至少部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點730處開始,在那里生成估計要在從開放順序循環(huán)(例如,"while"循環(huán)、"do while"循環(huán)、"for"循環(huán)等)生成的并行循環(huán)中執(zhí)行的迭代次數(shù)的推測流水線(階段732)。在一個實現(xiàn)中,系統(tǒng)取推測流水線的每一迭代并生成包含相應(yīng)工作項的單獨事務(wù)(階段
734) 。在另一實現(xiàn)中,如在認(rèn)為每一迭代創(chuàng)建一個事務(wù)代價過大的情況下,系統(tǒng)取鄰接的迭代帶(例如相鄰的迭代)并將它們一起分組在一事務(wù)中(階段734)。系統(tǒng)將各單獨事務(wù)分配到不同的線程以使它們并行執(zhí)行(階段
735) 。系統(tǒng)對每一相應(yīng)工作項評估終止條件(階段736)。在相應(yīng)工作項中的特定一個確定到達(dá)了終止并行循環(huán)的時間時,提交前導(dǎo)事務(wù)并丟棄后續(xù)事務(wù)(階段738)。該過程在結(jié)束點740處結(jié)束。
圖22示出在確保從開放順序循環(huán)生成的并行循環(huán)中的每一工作項都以正確次序提交時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖22的過程至少部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點760處開始,在那里當(dāng)相應(yīng)事務(wù)中的每一相應(yīng)工作項執(zhí)行時檢索當(dāng)前迭代值(階段762)。在一個實現(xiàn)中,當(dāng)前迭代值是通過對可由每一相應(yīng)工作項訪問的值執(zhí)行原子遞增來檢索的(階段762)。系統(tǒng)使用每一相應(yīng)工作項的當(dāng)前迭代值作為預(yù)定提交次序過程中的提交順序號(階段764)。系統(tǒng)實現(xiàn)與開放順序循環(huán)的原始執(zhí)行相一致的提交次序(階段766)。該過程在結(jié)束點768處結(jié)束。
圖23示出在計算推測流水線以確定并行循環(huán)中要包括多少循環(huán)時所涉及的各階段的一個實現(xiàn)。在一種形式中,圖23的過程至少部分地在計算
設(shè)備100的操作邏輯中實現(xiàn)。該過程在起始點790處開始,在那里系統(tǒng)至少部分地基于執(zhí)行并行循環(huán)的計算機(jī)上的可用處理器的數(shù)量來生成推測流水線的初始值(階段792)。在一個實現(xiàn)中,推測流水線的初始值是基于處理器的數(shù)量除以工作負(fù)載花費在進(jìn)行綁定CPU (CPU-bound)的工作的時間百分比來計算的(階段792)。也可使用多種其它計算。使用初始值來確定要為并行循環(huán)的特定執(zhí)行創(chuàng)建并行循環(huán)的多少迭代(階段794)。系統(tǒng)可以使用自適應(yīng)統(tǒng)計量來調(diào)整推測流水線以供并行循環(huán)的稍后執(zhí)行(例如使用歷史來更好地確定循環(huán)的預(yù)期持續(xù)時間,自適應(yīng)地調(diào)整何時阻塞工作項,等等)(階段796)。該過程在結(jié)束點798處結(jié)束。
圖24A-24B示出從原始開放順序循環(huán)到并行循環(huán)的示例性轉(zhuǎn)換的假想
圖24A所示,示出了原始開放順序循環(huán)810。該循環(huán)是在條件為真時(例如,在所示示例中在P:true (真)時)執(zhí)行某些語句的"while"循環(huán)。圖24B示出原始開放順序循環(huán)如何被轉(zhuǎn)換成并行循環(huán)820。如在圖24B的假想代碼中所示,對于推測流水線的每一迭代,生成可以并行運行的工作項。在一個實現(xiàn)中,可以針對這一點來使用標(biāo)準(zhǔn)工作竊用隊列。稱為currentlteration (當(dāng)前迭代)的共享變量可由每一工作項訪問。在每一工作項執(zhí)行時,其對currentltemtion執(zhí)行原子遞增,如通過標(biāo)準(zhǔn)比較并交換硬件
指令或另一機(jī)制,來讀取其自己的迭代值。這確保任何一個迭代只由單個工作者處理并且可以確定事務(wù)開始執(zhí)行循環(huán)的各迭代中的一個的次序。這
隨后成為事務(wù)的提交順序號,并確保該迭代能以正確次序在前導(dǎo)事務(wù)和后
續(xù)事務(wù)之間串行。每一工作項在該工作之前或之后評估P或適用的任何其
它終止條件,視循環(huán)構(gòu)造而定(例如在圖24B所示的"while"的情況中是
之前,但在"do-while"的情況中是"之后")。在工作者中的一個認(rèn)識到
到達(dá)了終止時間時,所有前導(dǎo)事務(wù)必須提交并且隨后所有后續(xù)事務(wù)必須丟棄。
盡管此處所討論的各示例探討了使用各種技術(shù)和方法來強制實施提交排序,但應(yīng)當(dāng)注意,事務(wù)可能根本不具有提交仲裁器。在事務(wù)不具有提交仲裁器的情況下,普通的無序提交將會發(fā)生。
盡管用對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述具體特征或動作。相反,上述具體特征和動作是作為實現(xiàn)權(quán)利要求的示例形式公開的。落入在此所述和/或所附權(quán)利要求所描述的實現(xiàn)的精神的范圍內(nèi)的所有等效方案、更改和修正都期望受到保護(hù)。
例如,計算機(jī)軟件領(lǐng)域普通技術(shù)人員會認(rèn)識到在此討論的示例中所述的客戶機(jī)和/或服務(wù)器布置、用戶界面屏幕內(nèi)容、和/或數(shù)據(jù)布局可在一臺或多臺計算機(jī)上不同地組織,以包括比示例中所描繪的更少或更多的選項或特征。
權(quán)利要求
1.一種用于將封閉順序循環(huán)轉(zhuǎn)換成并行循環(huán)的方法,所述方法包括以下步驟提供事務(wù)存儲器系統(tǒng);分析包含原始順序循環(huán)的第一部分代碼以確定所述原始順序循環(huán)將要執(zhí)行的固定迭代次數(shù);將包含所述原始順序循環(huán)的所述第一部分代碼轉(zhuǎn)換成包含并行循環(huán)的第二部分代碼,所述并行循環(huán)可操作來生成數(shù)量上等于所述固定迭代次數(shù)的多個事務(wù),這些事務(wù)允許該并行循環(huán)的至少一部分并行執(zhí)行;以及使用所述事務(wù)存儲器系統(tǒng)執(zhí)行所述第二部分代碼,其中所述多個事務(wù)中的至少某一些在不同的線程上執(zhí)行。
2. 如權(quán)利要求1所述的方法,其特征在于,所述固定迭代次數(shù)是通過 檢索所述原始順序循環(huán)與其相比以確定循環(huán)終止的常數(shù)值來確定的。
3. 如權(quán)利要求1所述的方法,其特征在于,所述事務(wù)中的每一個使用 相應(yīng)歸納變量計數(shù)器作為提交順序號,所述提交順序號由預(yù)定提交次序過 程用來確保所述事務(wù)中的每一個都以正確次序提交。
4. 一種具有用于使得計算機(jī)執(zhí)行如權(quán)利要求1所述的步驟的計算機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì)。
5. —種具有用于使得計算機(jī)執(zhí)行以下步驟的計算機(jī)可執(zhí)行指令的計算 機(jī)可讀介質(zhì),所述步驟包括提供事務(wù)存儲器系統(tǒng);將包含開放順序循環(huán)的第一部分代碼轉(zhuǎn)換成包含并行循環(huán)的第二部分 代碼,所述并行循環(huán)可操作來生成包含推測流水線的每一迭代的相應(yīng)工作 項的單獨事務(wù);以及使用所述事務(wù)存儲器系統(tǒng)執(zhí)行所述第二部分代碼,其中所述單獨事務(wù) 中的至少某一些在不同的線程上執(zhí)行。
6. 如權(quán)利要求5所述的計算機(jī)可讀介質(zhì),其特征在于,生成所述第二 部分代碼以使所述事務(wù)中的至少某一些并行執(zhí)行。
7. 如權(quán)利要求5所述的計算機(jī)可讀介質(zhì),其特征在于,在不執(zhí)行對所述開放順序循環(huán)的編譯器分析的情況下生成所述第二部分代碼。
8. 如權(quán)利要求5所述的計算機(jī)可讀介質(zhì),其特征在于,通過以預(yù)定提 交次序提交所述事務(wù)來保留原始的輸入到輸出映射。
9. 如權(quán)利要求8所述的計算機(jī)可讀介質(zhì),其特征在于,所述預(yù)定提交次序與所述開放順序循環(huán)的執(zhí)行次序相一致。
10. —種用于執(zhí)行從開放順序循環(huán)生成的并行循環(huán)的方法,所述方法包括以下步驟生成估計在并行循環(huán)中執(zhí)行的迭代次數(shù)的推測流水線,所述并行循環(huán)是從開放順序循環(huán)中生成的;取所述推測流水線的每一迭代并生成包含相應(yīng)工作項的單獨事務(wù); 在不同的線程上執(zhí)行所述單獨事務(wù)中的至少某一些; 對毎一賴應(yīng)丁作頂評估終i卜備伴以及在所述相應(yīng)工作項中的特定一個確定到達(dá)了終止所述并行循環(huán)的時間 時,提交所述相應(yīng)工作項中的所述特定一個的前導(dǎo)事務(wù)并丟棄其后續(xù)事務(wù)。
11. 如權(quán)利要求10所述的方法,其特征在于,在每一相應(yīng)工作項執(zhí) 行時,檢索當(dāng)前迭代值。
12. 如權(quán)利要求11所述的方法,其特征在于,每一相應(yīng)工作項的所 述當(dāng)前迭代值被用作預(yù)定提交次序過程中的提交順序號。
13. 如權(quán)利要求11所述的方法,其特征在于,所述當(dāng)前迭代值是通 過對可由每一相應(yīng)工作項訪問的值執(zhí)行原子遞增來檢索的。
14. 如權(quán)利要求IO所述的方法,其特征在于,實現(xiàn)與所述開放順序 循環(huán)的原始執(zhí)行相一致的提交次序。
15. 如權(quán)利要求IO所述的方法,其特征在于,所述開放順序循環(huán)是 "while"循環(huán)。
16. 如權(quán)利要求IO所述的方法,其特征在于,所述開放順序循環(huán)是 "do while"循環(huán)。
17. 如權(quán)利要求IO所述的方法,其特征在于,所述開放順序循環(huán)是 "for"循環(huán)。
18. 如權(quán)利要求IO所述的方法,其特征在于,所述推測流水線的初始值至少部分地基于執(zhí)行所述并行循環(huán)的計算機(jī)上的可用處理器的數(shù)量來 計算。
19. 如權(quán)利要求IO所述的方法,其特征在于,使用自適應(yīng)統(tǒng)計量來 調(diào)整所述推測流水線以供所述并行循環(huán)的稍后執(zhí)行。
20. —種具有用于使得計算機(jī)執(zhí)行如權(quán)利要求10所述的步驟的計算 機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì)。
全文摘要
公開了用于將順序循環(huán)轉(zhuǎn)換成并行循環(huán)以與事務(wù)存儲器系統(tǒng)一起使用的各種技術(shù)和方法。可以將開放和/或封閉順序循環(huán)轉(zhuǎn)換成并行循環(huán)。例如,分析包含原始順序循環(huán)的一部分代碼以確定該原始順序循環(huán)的固定迭代次數(shù)。將原始順序循環(huán)轉(zhuǎn)換成可生成數(shù)量等于該固定迭代次數(shù)的事務(wù)的并行循環(huán)。作為另一示例,可以將開放順序循環(huán)轉(zhuǎn)換成生成包含推測流水線的每一迭代的相應(yīng)工作項的單獨事務(wù)的并行循環(huán)。并行循環(huán)隨后使用事務(wù)存儲器系統(tǒng)來執(zhí)行,其中各單獨事務(wù)中的至少某一些在不同的線程上執(zhí)行。
文檔編號G06F12/00GK101681292SQ200880018391
公開日2010年3月24日 申請日期2008年5月30日 優(yōu)先權(quán)日2007年6月4日
發(fā)明者J·J·格雷, J·J·達(dá)菲, Y·萊瓦諾尼 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
伽师县| 曲阜市| 沽源县| 八宿县| 莱州市| 柯坪县| 申扎县| 乡宁县| 方正县| 阜阳市| 萍乡市| 肇庆市| 自贡市| 绩溪县| 龙南县| 安化县| 泰和县| 河北区| 隆昌县| 禹州市| 达拉特旗| 宁波市| 青铜峡市| 盐津县| 鹤岗市| 乐平市| 兴化市| 大同县| 呼玛县| 醴陵市| 于都县| 齐齐哈尔市| 潼关县| 新晃| 宜川县| 沧州市| 繁昌县| 南皮县| 海城市| 泸州市| 临沂市|