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

執(zhí)行具有回滾由積極優(yōu)化導(dǎo)致的變化的能力的積極代碼優(yōu)化的制作方法

文檔序號(hào):6359758閱讀:144來(lái)源:國(guó)知局
專利名稱:執(zhí)行具有回滾由積極優(yōu)化導(dǎo)致的變化的能力的積極代碼優(yōu)化的制作方法
技術(shù)領(lǐng)域
本申請(qǐng)一般地涉及一種改進(jìn)的數(shù)據(jù)處理 設(shè)備和方法,更具體地講,涉及用于執(zhí)行具有回滾由積極優(yōu)化導(dǎo)致的變化的能力的積極代碼優(yōu)化的機(jī)制。
背景技術(shù)
通常,對(duì)于要在計(jì)算系統(tǒng)上執(zhí)行的程序,程序的源代碼被編譯并鏈接以產(chǎn)生可執(zhí)行代碼。作為編譯過程的一部分,編譯器通常對(duì)源代碼執(zhí)行一項(xiàng)或多項(xiàng)優(yōu)化以便能夠?qū)崿F(xiàn)程序的更高效的執(zhí)行。盡管編譯器可識(shí)別變換源代碼以優(yōu)化其執(zhí)行的許多機(jī)會(huì),但編譯器通常受限于它能夠執(zhí)行的優(yōu)化,或者根據(jù)正在編譯的源代碼的語(yǔ)義可在哪里應(yīng)用這種優(yōu)化。例如,因?yàn)檫吔鐥l件存在的可能性,很少或從不實(shí)際發(fā)生的邊界情形行為限制代碼的優(yōu)化。也就是說(shuō),因?yàn)楫?dāng)通過特定編譯器優(yōu)化變換了特定源代碼語(yǔ)句時(shí)該特定源代碼語(yǔ)句可能導(dǎo)致邊界條件發(fā)生,所以即使它可能很少在執(zhí)行期間實(shí)際發(fā)生,編譯器也不能應(yīng)用原本在不存在這種可能的邊界條件的情況下可能應(yīng)用的優(yōu)化。這種邊界條件包括例如把源代碼變換為跨越存儲(chǔ)頁(yè)邊界的優(yōu)化代碼并且該頁(yè)不可訪問,即,該存儲(chǔ)頁(yè)被設(shè)置為不可用于讀、寫或者讀和寫,或者該頁(yè)已被“換出(paged out)”,意味著存儲(chǔ)在外部存儲(chǔ)介質(zhì)上并且從主內(nèi)存和頁(yè)表中去除。例如,可能受這種邊界情形行為影響的一種編譯器優(yōu)化是標(biāo)量源代碼變換為編譯的向量代碼。編譯器試圖在這種變換之后保留原始源代碼的行為。然而,在把標(biāo)量代碼變換為向量代碼時(shí),可能出現(xiàn)這種情況原始標(biāo)量代碼在使用順序標(biāo)量代碼執(zhí)行進(jìn)行執(zhí)行時(shí)將不具有任何邊界條件違反,但在變換為以并行方式執(zhí)行的向量代碼時(shí)在變換的代碼保留源代碼的原始行為的情況下可能導(dǎo)致邊界條件違反,該邊界條件違反可能導(dǎo)致變換的代碼的錯(cuò)誤執(zhí)行。此外,當(dāng)變換要在多線程環(huán)境中執(zhí)行的代碼時(shí),變換的代碼可能引入線程級(jí)競(jìng)態(tài)條件,在這種狀態(tài)下,兩個(gè)或更多的線程以并行方式訪問數(shù)據(jù)的同一部分,因此,由一個(gè)線程寫數(shù)據(jù)可能把錯(cuò)誤引入到另一線程或另一些線程的操作中。結(jié)果,當(dāng)編譯器確定可能在變換的代碼中發(fā)生邊界條件違反時(shí),編譯器通常不對(duì)代碼的該部分執(zhí)行優(yōu)化以便避免變換的代碼可能以不同于原始源代碼的方式工作的任何可能性,而不管這種可能性多小。因此,編譯的代碼未被盡可能多地優(yōu)化,因?yàn)樵诖嬖谶吔鐥l件違反或與原始源代碼不一致的其它行為的可能性的區(qū)域中不應(yīng)用優(yōu)化。或者,用戶可手動(dòng)地推翻這種編譯器行為并指示編譯器忽略這些語(yǔ)義。結(jié)果,編譯器可仍然進(jìn)行變換,但這可能導(dǎo)致變換的代碼的錯(cuò)誤操作。此外,用戶經(jīng)常不知道源代碼或變換的代碼中的特定語(yǔ)義是否必要并且對(duì)于推翻編譯器的正常行為猶豫不決。

發(fā)明內(nèi)容
在一個(gè)說(shuō)明性實(shí)施例中,提供了一種數(shù)據(jù)處理系統(tǒng)中的用于積極優(yōu)化計(jì)算機(jī)代碼的方法。該方法包括由在數(shù)據(jù)處理系統(tǒng)中的處理器上執(zhí)行的編譯器確定應(yīng)用于源代碼的一部分的優(yōu)化。該方法還包括由編譯器確定應(yīng)用于源代碼的該部分的優(yōu)化是否將會(huì)導(dǎo)致不安全的優(yōu)化代碼,因此是否是不安全的優(yōu)化。不安全的優(yōu)化代碼是這樣的代碼它引入由優(yōu)化代碼產(chǎn)生的新的異常的源,或者產(chǎn)生與由原始代碼本應(yīng)獲得的結(jié)果不同的結(jié)果。此外,該方法包括響應(yīng)于確定優(yōu)化是不 安全的優(yōu)化,由編譯器產(chǎn)生應(yīng)用了該不安全的優(yōu)化的源代碼的該部分的積極編譯代碼版本和不應(yīng)用該不安全的優(yōu)化的保守編譯代碼版本。另外,該方法包括由編譯器把積極編譯代碼版本和保守編譯代碼版本都存儲(chǔ)在與數(shù)據(jù)處理系統(tǒng)關(guān)聯(lián)的存儲(chǔ)裝置中。在另一說(shuō)明性實(shí)施例中,提供了一種數(shù)據(jù)處理系統(tǒng)中的用于執(zhí)行代碼的一部分的方法。該方法包括接收具有代碼的一部分的可執(zhí)行代碼,在該可執(zhí)行代碼中提供了代碼的該部分的積極編譯代碼版本和保守編譯代碼版本。數(shù)據(jù)處理系統(tǒng)的處理器執(zhí)行積極編譯代碼版本,并確定在積極編譯代碼版本的執(zhí)行期間是否發(fā)生異常條件。該方法還包括響應(yīng)于確定發(fā)生異常條件,回滾代碼的該部分的狀態(tài)的變化。此外,該方法包括響應(yīng)于回滾代碼的該部分的狀態(tài)的變化,在數(shù)據(jù)處理系統(tǒng)的處理器中執(zhí)行保守編譯代碼版本。在其它說(shuō)明性實(shí)施例中,提供了一種包括具有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可用或可讀介質(zhì)的計(jì)算機(jī)程序產(chǎn)品。當(dāng)在計(jì)算裝置上執(zhí)行該計(jì)算機(jī)可讀程序時(shí),該計(jì)算機(jī)可讀程序使計(jì)算裝置執(zhí)行以上關(guān)于方法說(shuō)明性實(shí)施例概述的各種操作和操作的組合。在另一說(shuō)明性實(shí)施例中,提供了一種系統(tǒng)/設(shè)備。該系統(tǒng)/設(shè)備可包括一個(gè)或多個(gè)處理器和耦合到所述一個(gè)或多個(gè)處理器的內(nèi)存。內(nèi)存可包括指令,當(dāng)該指令由所述一個(gè)或多個(gè)處理器執(zhí)行時(shí),該指令使所述一個(gè)或多個(gè)處理器執(zhí)行以上關(guān)于方法說(shuō)明性實(shí)施例概述的各種操作和操作的組合。將在下面對(duì)本發(fā)明的示例性實(shí)施例的詳細(xì)說(shuō)明中描述本發(fā)明的這些和其它特征和優(yōu)點(diǎn),或者考慮到下面對(duì)本發(fā)明的示例性實(shí)施例的詳細(xì)說(shuō)明,對(duì)于本領(lǐng)域普通技術(shù)人員而言,本發(fā)明的這些和其它特征和優(yōu)點(diǎn)將會(huì)變得清楚。


通過參照結(jié)合附圖閱讀的下面對(duì)說(shuō)明性實(shí)施例的詳細(xì)描述,將會(huì)最好地理解本發(fā)明以及它的優(yōu)選使用模式和另外的目的和優(yōu)點(diǎn),在附圖中圖I是可實(shí)現(xiàn)說(shuō)明性實(shí)施例的示例性機(jī)制的數(shù)據(jù)處理系統(tǒng)的示例性方框圖;圖2是可實(shí)現(xiàn)說(shuō)明性實(shí)施例的各方面的數(shù)據(jù)處理系統(tǒng)的處理器的示例性方框圖;圖3A示出代碼的一部分的原始源代碼序列;圖3B示出在使代碼的一部分向量化從而可由向量處理器更高效地執(zhí)行的編譯器優(yōu)化之后的同一代碼序列;圖3C是示出通過圖3A和3B中示出的代碼的向量化產(chǎn)生的邊界條件違反的示例性方框圖;圖4是根據(jù)一個(gè)說(shuō)明性實(shí)施例的基本操作元件的示例性方框圖;圖5是概述根據(jù)說(shuō)明性實(shí)施例的當(dāng)使用積極優(yōu)化技術(shù)編譯源代碼的一部分時(shí)的編譯器的操作的流程圖;圖6是概述根據(jù)一個(gè)說(shuō)明性實(shí)施例的計(jì)算機(jī)程序的執(zhí)行的示例性操作的流程圖;圖7是概述使用預(yù)測(cè)機(jī)制確定是否執(zhí)行代碼的一部分的積極編譯版本的根據(jù)說(shuō)明性實(shí)施例的計(jì)算機(jī)程序的執(zhí)行的示例性操作的流程圖;圖8A是可由編譯器向量化以產(chǎn)生優(yōu)化程序版本的執(zhí)行標(biāo)量運(yùn)算的示例性源程序;圖SB是顯示編譯器可執(zhí)行以通過使圖8A的運(yùn)算向量化來(lái)優(yōu)化程序的變換的變換的源程序,但潛在地修改程序的異常行為;和圖SC是顯示根據(jù)一個(gè)說(shuō)明性實(shí)施例的一事務(wù)內(nèi)的根據(jù)圖SB的變換的積極編譯代碼塊的變換的源程序。
具體實(shí)施例方式說(shuō)明性實(shí)施例提供一種能夠在支持由積極編譯的代碼導(dǎo)致的變化的回滾的系統(tǒng)(例如,使用事務(wù)內(nèi)存結(jié)構(gòu)或其它類型的原子操作的系統(tǒng))中實(shí)現(xiàn)積極編譯器優(yōu)化的機(jī)制。在一些說(shuō)明性實(shí)施例中,說(shuō)明性實(shí)施例的機(jī)制利用系統(tǒng)的原子行為(例如,基于事務(wù)的系統(tǒng)的原子行為)確定積極編譯器優(yōu)化是否將會(huì)導(dǎo)致變換和優(yōu)化的代碼的錯(cuò)誤操作(例如,邊界條件違反、線程級(jí)競(jìng)態(tài)條件等),如果確定結(jié)果是肯定的,則回滾通過積極優(yōu)化的代碼的執(zhí)行導(dǎo)致的變化并代之以代碼的較少優(yōu)化或非優(yōu)化的版本。盡管基于事務(wù)的系統(tǒng)將會(huì)用作下面的說(shuō)明性實(shí)施例的描述的基礎(chǔ),但應(yīng)該理解,本發(fā)明不限于此,并且在不脫離本發(fā)明的精神和范圍的情況下,允許由代碼的積極編譯的版本導(dǎo)致的變化的回滾的任何系統(tǒng)(例如,支持原子操作的系統(tǒng))可用于實(shí)現(xiàn)說(shuō)明性實(shí)施例的機(jī)制。許多系統(tǒng)使用原子操作。原子操作是兩個(gè)或更多的操作的集合,所述兩個(gè)或更多的操作能夠組合從而使它們對(duì)于數(shù)據(jù)處理系統(tǒng)看起來(lái)是這樣的它們被作為單個(gè)操作執(zhí)行并僅具有兩種可能的結(jié)果成功或失敗。利用原子操作,其它操作集合中的操作不知道正在由包括該原子操作的操作集合內(nèi)的操作導(dǎo)致的任何變化,直至整個(gè)操作集合完成。此外,利用原子操作,如果操作集合內(nèi)的任何操作失敗,則整個(gè)操作集合失敗并且系統(tǒng)的狀態(tài)恢復(fù)到在該操作集合內(nèi)的任何操作開始執(zhí)行之前系統(tǒng)所處于的狀態(tài)。原子提交操作是這樣的操作,其中一組不同的變化被應(yīng)用作為單個(gè)操作。如果應(yīng)用了所有變化,則原子提交稱為成功。如果在原子提交能夠完成之前存在失敗,則“提交”中止并且已發(fā)生的所有變化被反轉(zhuǎn)或回滾。在任一情況下,原子提交使系統(tǒng)處于一致的狀態(tài)。當(dāng)在數(shù)據(jù)庫(kù)系統(tǒng)中一次提交多組變化時(shí),經(jīng)常使用原子提交。原子提交由修改控制系統(tǒng)采用,由此原子提交用于控制把多個(gè)文件的變化上傳到這些文件的源,同時(shí)保證所有文件完全上傳并合并。原子提交也由許多事務(wù)處理系統(tǒng)(ATM、在線購(gòu)物等)采用,其中在作為一個(gè)團(tuán)體成功或失敗的單個(gè)集合中組合對(duì)不同系統(tǒng)上的操作(例如,下訂單、信用卡交易、存貨更新)。原子提交也用在事務(wù)內(nèi)存和推測(cè)多線程(也稱為線程級(jí)推測(cè))的領(lǐng)域中。事務(wù)內(nèi)存通過允許一組加載和存儲(chǔ)指令以原子方式執(zhí)行,嘗試簡(jiǎn)化并發(fā)或并行編程,即,保證(I)事務(wù)的所有指令成功地完成或者(2)事務(wù)的指令不發(fā)生影響。利用原子事務(wù),事務(wù)的指令看起來(lái)一次全部地發(fā)生在調(diào)用和產(chǎn)生結(jié)果之間。
硬件事務(wù)內(nèi)存系統(tǒng)可具有對(duì)處理器、高速緩存和總線協(xié)議的修改以支持事務(wù)或事務(wù)塊,即,作為一個(gè)單元以原子方式執(zhí)行的指令組。軟件事務(wù)內(nèi)存在軟件運(yùn)行時(shí)庫(kù)中提供事務(wù)內(nèi)存語(yǔ)義。軟件事務(wù)內(nèi)存能夠與硬件支持組合以設(shè)計(jì)混合事務(wù)內(nèi)存系統(tǒng)。事務(wù)內(nèi)存的概念由Herlihy 和 Moss 的"Transactional Memory:ArchitecturalSupport for Lock-Free Data Structures" (Proceedings of the 20th AnnualInternational Symposium on Computer Architecture, pp. 289-300, May 1993)弓I入。然而,如 Bobba 等人的〃Performance Pathologies in Hardware Transactional Memory"(ISCAO7, June 9-13, 2007)中所述,程序員能夠在多線程應(yīng)用中調(diào)用事務(wù),并依賴于事務(wù)內(nèi)存系統(tǒng)使它的執(zhí)行在全局串行次序中看起來(lái)是原子的。Bobba等人討論了事務(wù)內(nèi)存系統(tǒng)中的沖突解決策略。事務(wù)內(nèi)存系統(tǒng)通過推測(cè)性地并發(fā)地執(zhí)行事務(wù)并僅提交非沖突的事務(wù)而尋求高性能。當(dāng)兩個(gè)或更多的并發(fā)事務(wù)訪問同一數(shù)據(jù)元素(例如,字、塊、對(duì)象等)并且至少一個(gè)訪問是寫時(shí),發(fā)生沖突。事務(wù)內(nèi)存系統(tǒng)可通過停止一個(gè)或多個(gè)事務(wù)解決一些沖突。
推測(cè)多線程是發(fā)生在與指令級(jí)相對(duì)的線程級(jí)的一種類型的推測(cè)執(zhí)行。推測(cè)多線程是動(dòng)態(tài)并行化技術(shù),該技術(shù)使用多線程的指令的亂序(out-of-order)執(zhí)行實(shí)現(xiàn)處理器的運(yùn)算速度的提高。利用推測(cè)多線程,如果不存在線程之間的依賴性違反,則可以以原子方式提交由線程執(zhí)行的變化。專用硬件跟蹤推測(cè)線程讀(加載)和寫(存儲(chǔ))數(shù)據(jù)位置,并中止(即,回滾或消滅)顯示為違反實(shí)際數(shù)據(jù)依賴性的線程,例如,競(jìng)態(tài)條件中涉及的線程。利用說(shuō)明性實(shí)施例的機(jī)制,編譯器產(chǎn)生源代碼的同一部分的兩個(gè)編譯版本。源代碼的該部分的第一編譯版本稱為積極編譯代碼,因?yàn)榫幾g器執(zhí)行原始源代碼的所有合適的變換和優(yōu)化,而不管對(duì)于變換的代碼,邊界情形行為違反、下溢條件(例如,除以O(shè))、上溢條件(例如,除以無(wú)窮大)、線程級(jí)競(jìng)態(tài)條件等是否可能發(fā)生。在最廣泛的意義上,積極編譯代碼是這樣的代碼,其中執(zhí)行并不總是有效的所有合適的變換和優(yōu)化,然后回滾可用于恢復(fù)。這甚至可應(yīng)用于迄今為止未知的優(yōu)化技術(shù)?;旧希P(guān)于當(dāng)編譯器檢測(cè)到可能發(fā)生違反時(shí)中止或不應(yīng)用變換的編譯器的正常操作被推翻,以產(chǎn)生源代碼的該部分的該第一編譯版本。源代碼的該部分的第二編譯版本稱為保守編譯代碼,因?yàn)榫幾g器不執(zhí)行可能導(dǎo)致違反或偏離源代碼的預(yù)期操作的優(yōu)化,例如,不執(zhí)行可能導(dǎo)致可產(chǎn)生邊界條件違反、線程級(jí)競(jìng)態(tài)條件等的變換的代碼的優(yōu)化。與積極編譯代碼相比,保守編譯代碼被較少優(yōu)化,因?yàn)楫?dāng)與積極編譯代碼相比時(shí),保守編譯代碼通常將不應(yīng)用所有合適的可用優(yōu)化。在以下描述的圖8A和SB中提供積極編譯代碼和保守編譯代碼的例子。在編譯的代碼的執(zhí)行期間,執(zhí)行將嘗試在事務(wù)的范圍內(nèi)執(zhí)行積極編譯代碼,并監(jiān)視異常條件(例如,邊界條件違反、線程級(jí)競(jìng)態(tài)條件等)。在這種異常條件的情況下,控制被轉(zhuǎn)移給事務(wù)管理器。事務(wù)管理器包括可實(shí)現(xiàn)為硬件、軟件或者硬件和軟件的任何組合的邏輯,該邏輯用于把代碼的執(zhí)行狀態(tài)回滾到在產(chǎn)生該異常條件的積極編譯代碼部分的執(zhí)行之前的狀態(tài)。事務(wù)管理器隨后嘗試使用保守編譯代碼重新執(zhí)行代碼的該部分。以這種方式,提供了一種自動(dòng)化機(jī)制,用于在多數(shù)情況下允許積極優(yōu)化代碼執(zhí)行,而僅在積極優(yōu)化代碼失敗(即,產(chǎn)生異常條件)的情況下執(zhí)行保守優(yōu)化代碼。在另一說(shuō)明性實(shí)施例中,由于就用于執(zhí)行回滾和重新執(zhí)行操作的處理器周期的開銷而言回滾和重新執(zhí)行操作很昂貴,所以提供用于確定是否可能發(fā)生回滾的預(yù)測(cè)機(jī)制??苫诨跉v史的預(yù)測(cè)方案、代碼的分析結(jié)果等進(jìn)行這種確定。響應(yīng)于可能發(fā)生回滾的預(yù)測(cè),說(shuō)明性實(shí)施例的機(jī)制可改為執(zhí)行保守編譯代碼而非嘗試執(zhí)行積極編譯代碼以避免可能的回滾和重新執(zhí)行操作。本領(lǐng)域技術(shù)人員將會(huì)理解,本發(fā)明可實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的各方面可以采用通常全部可在本文稱為“電路”、“模塊”或“系統(tǒng)”的完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、常駐軟件、微碼等)或組合軟件和硬件方面的實(shí)施例的形式。另外,本發(fā)明的各方面可以采用實(shí)現(xiàn)于具有計(jì)算機(jī)可用程序代碼的任何一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式??梢允褂靡粋€(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī) 可讀信號(hào)介質(zhì)或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是例如但不限于電子、磁、光學(xué)、電磁、紅外或半導(dǎo)體系統(tǒng)、設(shè)備、裝置或者前述各項(xiàng)的任何合適的組合。計(jì)算機(jī)可讀介質(zhì)的更具體的例子(非窮舉列表)將包括下述各項(xiàng)具有一條或多條線的電連接、便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦除可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式壓縮盤只讀存儲(chǔ)器(CDROM)、光學(xué)存儲(chǔ)裝置、磁存儲(chǔ)裝置或前述各項(xiàng)的任何合適的組合。在這個(gè)文件的上下文中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是能夠包含或存儲(chǔ)由指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用或結(jié)合指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用的程序的任何有形介質(zhì)。計(jì)算機(jī)可讀信號(hào)介質(zhì)可包括例如基帶中或作為載波的一部分的嵌入了計(jì)算機(jī)可讀程序代碼的傳播數(shù)據(jù)信號(hào)。這種傳播信號(hào)可采用多種形式中的任何形式,包括但不限于電磁信號(hào)、光學(xué)信號(hào)或者它們的任何合適的組合。計(jì)算機(jī)可讀信號(hào)介質(zhì)可以是并非計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)并且能夠傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用或結(jié)合指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用的程序的任何計(jì)算機(jī)可讀介質(zhì)。可以使用合適的介質(zhì)(包括但不限于無(wú)線、有線、光纖光纜、射頻(RF)等或前述各項(xiàng)的任何合適的組合)傳輸計(jì)算機(jī)可讀介質(zhì)上包含的計(jì)算機(jī)代碼??梢园凑找环N或多種編程語(yǔ)言的任何組合編寫用于執(zhí)行本發(fā)明的各方面的操作的計(jì)算機(jī)程序代碼,所述編程語(yǔ)言包括面向?qū)ο蟮木幊陶Z(yǔ)言,諸如Java 、Smalltalk 、C++等;和傳統(tǒng)的過程編程語(yǔ)言,諸如“C”編程語(yǔ)言或類似編程語(yǔ)言。程序代碼可以完全在用戶計(jì)算機(jī)上執(zhí)行、部分在用戶的計(jì)算機(jī)上執(zhí)行、作為獨(dú)立軟件包執(zhí)行、部分在用戶的計(jì)算機(jī)上并且部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后一情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任何類型的網(wǎng)絡(luò)(包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN))連接到用戶的計(jì)算機(jī),或者可以(例如,使用互聯(lián)網(wǎng)服務(wù)提供商通過互聯(lián)網(wǎng))連接到外部計(jì)算機(jī)。以下參考根據(jù)本發(fā)明的說(shuō)明性實(shí)施例的方法、設(shè)備(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖描述本發(fā)明的各方面。將會(huì)理解,流程圖和/或方框圖中的每個(gè)方框以及流程圖和/或方框圖中的方框的組合能夠由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理設(shè)備的處理器,以產(chǎn)生一機(jī)器,從而指令(所述指令經(jīng)由計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行)產(chǎn)生用于實(shí)現(xiàn)流程圖和/或方框圖的一個(gè)或多個(gè)方框中指定的功能/動(dòng)作的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中,該計(jì)算機(jī)可讀介質(zhì)能夠指示計(jì)算機(jī)、其它可編程數(shù)據(jù)處理設(shè)備或其它裝置按照特定的方式發(fā)揮作用,從而存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生一種制造產(chǎn)品,所述制造產(chǎn)品包括實(shí)現(xiàn)流程圖和/或方框圖的一個(gè)或多個(gè)方框中指定的功能/動(dòng)作的指令。計(jì)算機(jī)程序指令也可被加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理設(shè)備或其它裝置上,以使得在計(jì)算機(jī)、其它可編程設(shè)備或其它裝置上執(zhí)行一系列的操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而在計(jì)算機(jī)或其它可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)流程圖和/或方框圖的一個(gè)或多個(gè)方框中指定的功能/動(dòng)作的過程。附圖中的流程圖和方框圖示出根據(jù)本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)方式的架構(gòu)、功能和操作。在這個(gè)方面,流程圖或方框圖中的每個(gè)方框可代表包括用于實(shí)現(xiàn)指定的邏輯功能的一個(gè)或多個(gè)可執(zhí)行指令的代碼的模塊、段或一部分。還應(yīng)該注意的是,在一些替換的實(shí)現(xiàn)方式中,方框中標(biāo)注的功能可以不按附圖中標(biāo)注的次序執(zhí)行。例如,事實(shí)上,根據(jù)涉及的功能,連續(xù)示出的兩個(gè)方框可以基本上同時(shí)執(zhí)行,或者這些 方框有時(shí)候可以以相反的次序執(zhí)行。還應(yīng)該注意的是,方框圖和/或流程圖中的每個(gè)方框以及方框圖和/或流程圖中的方框的組合能夠由執(zhí)行指定的功能或動(dòng)作的基于專用硬件的系統(tǒng)或?qū)S糜布陀?jì)算機(jī)指令的組合實(shí)現(xiàn)。現(xiàn)在參照附圖并且特別地參照?qǐng)D1-2,提供了可實(shí)現(xiàn)本發(fā)明的說(shuō)明性實(shí)施例的數(shù)據(jù)處理環(huán)境的示例圖。應(yīng)該理解,圖1-2僅是例子,而并非意圖斷言或暗示關(guān)于可實(shí)現(xiàn)本發(fā)明的各方面或?qū)嵤├沫h(huán)境的任何限制。在不脫離本發(fā)明的精神和范圍的情況下,可對(duì)描述的環(huán)境做出許多修改。現(xiàn)在參照附圖,圖I描述可實(shí)現(xiàn)說(shuō)明性實(shí)施例的各方面的示例性分布式數(shù)據(jù)處理系統(tǒng)的圖形表示。分布式數(shù)據(jù)處理系統(tǒng)100可包括可實(shí)現(xiàn)說(shuō)明性實(shí)施例的各方面的計(jì)算機(jī)的網(wǎng)絡(luò)。分布式數(shù)據(jù)處理系統(tǒng)100包含至少一個(gè)網(wǎng)絡(luò)102,網(wǎng)絡(luò)102是用于提供分布式數(shù)據(jù)處理系統(tǒng)100內(nèi)連接在一起的各種裝置和計(jì)算機(jī)之間的通信鏈路的介質(zhì)。網(wǎng)絡(luò)102可包括諸如有線、無(wú)線通信鏈路或光纖光纜的連接。在描述的例子中,服務(wù)器104和服務(wù)器106以及存儲(chǔ)單元108連接到網(wǎng)絡(luò)102。另夕卜,客戶機(jī)110、112和114也連接到網(wǎng)絡(luò)102。這些客戶機(jī)110、112和114可以是例如個(gè)人計(jì)算機(jī)、網(wǎng)絡(luò)計(jì)算機(jī)等。在描述的例子中,服務(wù)器104把數(shù)據(jù)(諸如,引導(dǎo)文件、操作系統(tǒng)映像和應(yīng)用)提供給客戶機(jī)110、112和114。在描述的例子中,客戶機(jī)110、112和114是服務(wù)器104的客戶機(jī)。分布式數(shù)據(jù)處理系統(tǒng)100可包括未示出的另外的服務(wù)器、客戶機(jī)和其它
>j-U ρ α裝直。在描述的例子中,分布式數(shù)據(jù)處理系統(tǒng)100是具有網(wǎng)絡(luò)102的互聯(lián)網(wǎng),代表使用傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)協(xié)議組彼此通信的全球的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合。在互聯(lián)網(wǎng)的中心處是主節(jié)點(diǎn)或主機(jī)計(jì)算機(jī)之間的高速數(shù)據(jù)通信線路的主干,由對(duì)數(shù)據(jù)和消息進(jìn)行路由的成千的商業(yè)、政府、教育和其它計(jì)算機(jī)系統(tǒng)構(gòu)成。當(dāng)然,分布式數(shù)據(jù)處理系統(tǒng)100也可以實(shí)現(xiàn)為包括許多不同類型的網(wǎng)絡(luò),諸如例如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)等。如上所述,圖I意圖用作例子,而非用作對(duì)本發(fā)明的不同實(shí)施例的架構(gòu)限制,因此,圖I中顯示的特定元件不應(yīng)視為關(guān)于可實(shí)現(xiàn)本發(fā)明的說(shuō)明性實(shí)施例的環(huán)境的限制?,F(xiàn)在參照?qǐng)D2,顯示可實(shí)現(xiàn)說(shuō)明性實(shí)施例的各方面的示例性數(shù)據(jù)處理系統(tǒng)的方框圖。數(shù)據(jù)處理系統(tǒng)200是計(jì)算機(jī)的例子(諸如,圖I中的客戶機(jī)110),實(shí)現(xiàn)本發(fā)明的說(shuō)明性實(shí)施例的處理的計(jì)算機(jī)可用代碼或指令可位于該計(jì)算機(jī)中。在描述的例子中,數(shù)據(jù)處理系統(tǒng)200采用集線器架構(gòu),該集線器架構(gòu)包括北橋和內(nèi)存控制器中心(NB/MCH)202以及南橋和輸入/輸出(I/O)控制器中心(SB/ICH)204。處理單元206、主內(nèi)存208和圖形處理器210連接到NB/MCH 202。圖形處理器210可通過加速圖形端口(AGP)連接到NB/MCH 202。在描述的例子中,局域網(wǎng)(LAN)適配器212連接到SB/ICH204。音頻適配器216、鍵盤和鼠標(biāo)適配器220、調(diào)制解調(diào)器222、只讀存儲(chǔ)器(ROM) 224、硬盤驅(qū)動(dòng)器(HDD) 226、⑶-ROM驅(qū)動(dòng)器230、通用串行總線(USB)端口和其它通信端口 232以及PCI/PCIe裝置234通過總線238和總線240連接到SB/ICH 204。PCI/PCIe裝置可 括例如以太網(wǎng)適配器、附加卡和用于筆記本計(jì)算機(jī)的PC卡。PCI使用卡總線控制器,而PCIe不使用卡總線控制器。ROM224可以是例如閃速基本輸入/輸出系統(tǒng)(BIOS)。HDD 226 和 CD-ROM驅(qū)動(dòng)器 230 通過總線 240 連接到 SB/ICH204。HDD 226 和 CD-ROM驅(qū)動(dòng)器230可使用例如集成驅(qū)動(dòng)電子設(shè)備(IDE)或串行高級(jí)技術(shù)附接(SATA)接口。超級(jí)1/0 (SIO)裝置 236 可連接到 SB/1CH 204。操作系統(tǒng)在處理單元206上運(yùn)行。操作系統(tǒng)協(xié)調(diào)并提供圖2中的數(shù)據(jù)處理系統(tǒng)200內(nèi)的各種部件的控制。作為客戶機(jī),操作系統(tǒng)可以是可商購(gòu)獲得的操作系統(tǒng),諸如Microsoft'"'Windows (Microsoft 和 Windows 是 Microsoft Corporation 在美國(guó)、其它國(guó)家或者這兩者的商標(biāo))。面向?qū)ο蟮木幊滔到y(tǒng)(諸如,Java 編程系統(tǒng))可結(jié)合操作系統(tǒng)運(yùn)行并提供從在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的Java 程序或應(yīng)用對(duì)操作系統(tǒng)的調(diào)用(Java是Sun Microsystems, Inc.在美國(guó)、其它國(guó)家或者這兩者的商標(biāo))。作為服務(wù)器,數(shù)據(jù)處理系統(tǒng)200可以是例如運(yùn)行高級(jí)交互執(zhí)行(AIX )操作系統(tǒng)或LINUX 1,操作系統(tǒng)的IBM eServer System p 計(jì)算機(jī)系統(tǒng)(eServer、System p和 AIX 是 International Business Machines Corporation 在美國(guó)、其它國(guó)家或者這兩者的商標(biāo),而LINUX是Linus Torvalds在美國(guó)、其它國(guó)家或者這兩者的商標(biāo))。數(shù)據(jù)處理系統(tǒng)200可以是在處理單元206中包括多個(gè)處理器的對(duì)稱多處理器(SMP)系統(tǒng)。或者,可采用單處理器系統(tǒng)。用于操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)和應(yīng)用或程序的指令位于存儲(chǔ)裝置(諸如,HDD 226)上,并且可位于主內(nèi)存208中以由處理單元206執(zhí)行。本發(fā)明的說(shuō)明性實(shí)施例的處理可由處理單元206使用計(jì)算機(jī)可用程序代碼執(zhí)行,該計(jì)算機(jī)可用程序代碼可位于內(nèi)存(諸如例如,主內(nèi)存208、ROM 224)中或者位于例如一個(gè)或多個(gè)外圍裝置226和230中??偩€系統(tǒng)(諸如,如圖2中所示的總線238或總線240)可包括一個(gè)或多個(gè)總線。當(dāng)然,可使用任何類型的通信結(jié)構(gòu)或架構(gòu)實(shí)現(xiàn)該總線系統(tǒng),所述通信結(jié)構(gòu)或架構(gòu)提供附接到該結(jié)構(gòu)或架構(gòu)的不同部件或裝置之間的數(shù)據(jù)的傳輸。通信單元(諸如,圖2的調(diào)制解調(diào)器222或網(wǎng)絡(luò)適配器212)可包括用于發(fā)送和接收數(shù)據(jù)的一個(gè)或多個(gè)裝置。內(nèi)存可以是例如主內(nèi)存208、ROM 224或諸如在圖2中的NB/MCH 202中找到的高速緩存。本領(lǐng)域普通技術(shù)人員將會(huì)理解,圖1-2中的硬件可根據(jù)實(shí)現(xiàn)方式而不同。除圖1-2中描述的硬件之外或者替代于圖1-2中描述的硬件,可使用其它內(nèi)部硬件或外圍裝置,諸如閃存、等同的非易失性存儲(chǔ)器或光盤驅(qū)動(dòng)器等。此外,在不脫離本發(fā)明的精神和范圍的情況下,說(shuō)明性實(shí)施例的處理可應(yīng)用于除前述SMP系統(tǒng)之外的多處理器數(shù)據(jù)處理系統(tǒng)。
此外,數(shù)據(jù)處理系統(tǒng)200可采用許多不同數(shù)據(jù)處理系統(tǒng)中的任何形式,包括客戶機(jī)計(jì)算裝置、服務(wù)器計(jì)算裝置、平板計(jì)算機(jī)、膝上型計(jì)算機(jī)、電話或其它通信裝置、個(gè)人數(shù)字助理(PDA)等。在一些說(shuō)明性例子中,數(shù)據(jù)處理系統(tǒng)200可以是例如便攜式計(jì)算裝置,該便攜式計(jì)算裝置構(gòu)造為具有提供用于存儲(chǔ)操作系統(tǒng)文件和/或用戶產(chǎn)生的數(shù)據(jù)的非易失性存儲(chǔ)器的閃存?;旧?,數(shù)據(jù)處理系統(tǒng)200可以是任何已知或者以后開發(fā)的數(shù)據(jù)處理系統(tǒng)而沒有架構(gòu)限制。在一個(gè)說(shuō)明性實(shí)施例中,數(shù)據(jù)處理系統(tǒng)200實(shí)現(xiàn)事務(wù)內(nèi)存系統(tǒng)。在一個(gè)說(shuō)明性實(shí)施例中,該事務(wù)內(nèi)存系統(tǒng)可以是如以上所討論的HASTM系統(tǒng)。如本領(lǐng)域通常所知,事務(wù)內(nèi)存系統(tǒng)是這樣的系統(tǒng)允許不重疊的事務(wù)不中斷地并行運(yùn)行,但為了數(shù)據(jù)一致性的目的,程序的各部分必須以原子方式執(zhí)行(即,原子事務(wù)),由此事務(wù)內(nèi)存系統(tǒng)允許程序讀和修改內(nèi)存位置作為單個(gè)原子操作。利用事務(wù)內(nèi)存系統(tǒng),事務(wù)是由單個(gè)線程執(zhí)行的步驟或程序指令的有限序列。事務(wù)可串行地執(zhí)行,從而一個(gè)事務(wù)的步驟或指令不與另一事務(wù)的步驟或指令交織。事務(wù)內(nèi)存系統(tǒng)提供如下機(jī)制通過保證這些內(nèi)存訪問對(duì)于外部觀測(cè)者而言看起來(lái)一次全部地發(fā)生(即,原子部分或事務(wù)提交或中止),保證原子部分或原子事務(wù)的原子性。對(duì)于關(guān)于事務(wù)內(nèi)存系統(tǒng)的更多信息,參考共同轉(zhuǎn)讓并且共同待決的No. 12/046,764(現(xiàn)在公開 2009/0235254)的美國(guó)專利申請(qǐng),通過引用將其內(nèi)容包含于此。說(shuō)明性實(shí)施例利用該事務(wù)內(nèi)存系統(tǒng)執(zhí)行積極編譯代碼作為事務(wù),該事務(wù)能夠利用作為單獨(dú)的事務(wù)的保守編譯代碼的隨后重新執(zhí)行而被容易地回滾。產(chǎn)生源代碼的一部分的這兩種編譯版本的編譯器可在與執(zhí)行編譯并鏈接的代碼的數(shù)據(jù)處理裝置/系統(tǒng)相同的數(shù)據(jù)處理裝置/系統(tǒng)上執(zhí)行,或者可在一單獨(dú)的數(shù)據(jù)處理裝置/系統(tǒng)上執(zhí)行。事務(wù)監(jiān)視器也在相同或不同的數(shù)據(jù)處理裝置/系統(tǒng)上運(yùn)行,并監(jiān)視編譯并鏈接的代碼的執(zhí)行以確定積極編譯代碼是否由于用于產(chǎn)生積極編譯代碼的積極優(yōu)化而失敗或者產(chǎn)生異常條件。如果積極編譯代碼失敗或產(chǎn)生異常條件,則事務(wù)監(jiān)視器可隨后回滾事務(wù)并使用代碼的該部分的保守編譯版本開始代碼的該部分的重新執(zhí)行。為了更好地理解由說(shuō)明性實(shí)施例解決的問題,代碼優(yōu)化的例子顯示在圖3A和3B中。圖3A示出代碼的一部分的原始源代碼序列。圖3A中的代碼是通常以順序的、非并行化方式執(zhí)行的單指令多數(shù)據(jù)(SIMD)代碼的例子。圖3B示出在使代碼的一部分向量化從而可由向量處理器更高效地執(zhí)行的積極編譯器優(yōu)化之后的同一代碼序列。具體地講,向量化的代碼可使用向量元素并行地執(zhí)行。用于把SIMD代碼變換為向量化的代碼的一種可能的機(jī)制的解釋描述于共同轉(zhuǎn)讓并且共同待決的序列號(hào)為12/250,575的美國(guó)專利申請(qǐng),通過引用將其內(nèi)容包含于此。如圖3A中所示,原始代碼序列評(píng)估數(shù)組A的前3個(gè)值并把它們存儲(chǔ)在前三個(gè)數(shù)組寄存器X中。這是順序地完成的,因此,不存在關(guān)于違反任何邊界條件的擔(dān)心。圖3B示出可通過編譯器優(yōu)化產(chǎn)生的該代碼的向量化形式。如果該代碼以這種方式被向量化(向量代碼使用具有四個(gè)元素的向量),則按照四個(gè)元素的塊讀取數(shù)組。結(jié)果,如圖3C中所示,盡管僅3個(gè)數(shù)組值被該代碼使用,但由于向量化而加載了 4個(gè)值,也就是說(shuō),盡管僅a0、al和a2為了代碼的該部分的目的而存儲(chǔ)正確的數(shù)據(jù),但向量化導(dǎo)致也加載a3。如果a3跨越存儲(chǔ)頁(yè)邊界310而進(jìn)入程序不可訪問的存儲(chǔ)頁(yè)320,或者如果a3在不存在的頁(yè)上并且向量加載觸及這個(gè)未分配給該進(jìn)程的存儲(chǔ)頁(yè),則這指示編程錯(cuò)誤并且導(dǎo)致操作系統(tǒng)指示訪問違反條件,所述訪問違反條件通常終止該應(yīng)用。在多線程代碼中,當(dāng)a3是由另一進(jìn)程使用的存儲(chǔ)位置時(shí),也會(huì)發(fā)生程序錯(cuò)誤,在這種情況下,如果a3值被寫回(可能以錯(cuò)誤的方式重寫原始代碼中不存在的對(duì)a3的寫更新),則a3的加載可能引起數(shù)據(jù)的訛誤。使用以上例子,圖3A中顯示的原始代碼不會(huì)導(dǎo)致邊界條件違反,因此將不產(chǎn)生異常。然而,代碼的該部分的向量化版本能夠?qū)е逻吔鐥l件違反,并且如果代碼嘗試跨越存儲(chǔ)頁(yè)邊界訪問向量元素,則可能因此產(chǎn)生異常條件。該異常條件不存在于原始代碼中,而是通過由編譯器執(zhí)行的優(yōu)化而引入。因此,在已知機(jī)制中,編譯器將會(huì)通常確定不應(yīng)該對(duì)代碼的這個(gè)部分執(zhí)行該優(yōu)化。然而,利用說(shuō)明性實(shí)施例,編譯器既產(chǎn)生優(yōu)化(其中例如由于該優(yōu)化可能導(dǎo)致產(chǎn)生異常條件,諸如可能產(chǎn)生于邊界條件違反等)的積極編譯代碼,又產(chǎn)生源代碼的同一部分的保守編譯代碼。換句話說(shuō),編譯器可能原本不會(huì)應(yīng)用于代碼的一部分的優(yōu)化被實(shí)際應(yīng)用于代碼的該部分以產(chǎn)生積極編譯代碼,而不管編譯器是否確定這些優(yōu)化可能導(dǎo)致在執(zhí)行優(yōu)化并積極編譯的代碼時(shí)在某些條件下產(chǎn)生異常條件。當(dāng)產(chǎn)生保守編譯代碼時(shí),不執(zhí)行這 些優(yōu)化。因此,對(duì)于編譯器確定優(yōu)化可能產(chǎn)生具有違反原始源代碼的預(yù)期操作并產(chǎn)生異常條件的可能性的編譯代碼的源代碼的每個(gè)部分,編譯器既產(chǎn)生代碼的積極編譯版本又產(chǎn)生代碼的保守編譯版本。當(dāng)在使用事務(wù)內(nèi)存系統(tǒng)的數(shù)據(jù)處理裝置/系統(tǒng)上執(zhí)行時(shí),作為單個(gè)事務(wù)執(zhí)行積極編譯代碼。例如,使用圖3B中顯示的積極編譯代碼,語(yǔ)句可以被引入到代碼中以指定事務(wù)的開始和結(jié)束,并且執(zhí)行出現(xiàn)在事務(wù)的開始和結(jié)束之間的所有指令作為單個(gè)事務(wù)。作為例子,圖3B中的代碼可通過引入下面的語(yǔ)句(以粗體顯示)而被變換以作為事務(wù)執(zhí)行
權(quán)利要求
1.一種數(shù)據(jù)處理系統(tǒng)(450)中的用于執(zhí)行可執(zhí)行代碼(415)的方法,包括 接收具有代碼的一部分的可執(zhí)行代碼(415),對(duì)于代碼的該部分,提供了代碼的該部分(415)的積極編譯代碼版本(420)和保守編譯代碼版本(430); 在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行(610)代碼的該部分的積極編譯代碼版本(420); 確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件; 響應(yīng)于確定發(fā)生異常條件¢20),回滾(630)代碼的該部分(415)的狀態(tài)的變化;以及響應(yīng)于回滾代碼的該部分(415)的狀態(tài)的變化,在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行(660,780)保守編譯代碼版本(430)。
2.如權(quán)利要求I所述的方法,還包括 產(chǎn)生關(guān)于代碼的可執(zhí)行部分(415)的積極編譯代碼版本(420)的執(zhí)行是否可能導(dǎo)致異常條件發(fā)生的預(yù)測(cè)(720);以及 響應(yīng)于指示如果執(zhí)行積極編譯代碼版本(420)則可能發(fā)生異常條件的預(yù)測(cè)(720),在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行保守編譯代碼版本(430)。
3.如權(quán)利要求I所述的方法,其中執(zhí)行積極編譯代碼版本(420),作為由數(shù)據(jù)處理系統(tǒng)(450)的事務(wù)監(jiān)視器(460)監(jiān)視的單個(gè)事務(wù)。
4.如權(quán)利要求3所述的方法,其中 確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件包括由事務(wù)監(jiān)視器(460)確定包括積極編譯代碼版本(420)的事務(wù)中止還是成功地提交, 響應(yīng)于確定發(fā)生異常條件而回滾(630)代碼的該部分(415)的狀態(tài)的變化包括回滾包括積極編譯代碼版本(420)的事務(wù),并且所述異常條件引起事務(wù)的中止。
5.如權(quán)利要求3所述的方法,其中響應(yīng)于回滾(630)代碼的可執(zhí)行部分(415)的狀態(tài)的變化在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行保守編譯代碼版本(430)包括 與事務(wù)監(jiān)視器(460)相關(guān)聯(lián)地保持用于把積極編譯代碼版本(420)映射到保守編譯代碼版本(430)的數(shù)據(jù)結(jié)構(gòu)(440);以及 響應(yīng)于事務(wù)中止由事務(wù)監(jiān)視器(460)基于積極編譯代碼版本(420)在該數(shù)據(jù)結(jié)構(gòu)(440)中執(zhí)行查找操作¢50,770)以獲得指向?qū)?yīng)的保守編譯代碼版本(430)的指針。
6.如權(quán)利要求3所述的方法,還包括 由事務(wù)監(jiān)視器(460)在日志數(shù)據(jù)結(jié)構(gòu)(470)中記錄(640,760)中止的與積極編譯代碼版本(420)對(duì)應(yīng)的事務(wù); 基于日志數(shù)據(jù)結(jié)構(gòu)(470)執(zhí)行積極編譯代碼版本(420)的執(zhí)行是否可能導(dǎo)致與積極編譯代碼版本(420)關(guān)聯(lián)的事務(wù)中止的預(yù)測(cè)操作(720);以及 響應(yīng)于積極編譯代碼版本(420)的執(zhí)行可能導(dǎo)致關(guān)聯(lián)的事務(wù)中止的預(yù)測(cè),開始(660,780)執(zhí)行保守編譯代碼版本(430)而非積極編譯代碼版本(420)。
7.如權(quán)利要求I所述的方法,其中所述積極編譯代碼版本(420)是以并行方式執(zhí)行的代碼的該部分(415)的向量化版本,并且其中保守編譯代碼版本(430)是以串行方式執(zhí)行的標(biāo)量代碼版本。
8.一種包括存儲(chǔ)有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(208,226,230)的計(jì)算機(jī)程序產(chǎn)品,其中該計(jì)算機(jī)可讀程序當(dāng)在數(shù)據(jù)處理系統(tǒng)(450)中執(zhí)行時(shí)使數(shù)據(jù)處理系統(tǒng)(450) 接收具有代碼的一部分的可執(zhí)行代碼(415),對(duì)于代碼的該部分,提供了代碼的該部分(415)的積極編譯代碼版本(420)和保守編譯代碼版本(430); 在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行(610)代碼的該部分的積極編譯代碼版本(420); 確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件; 響應(yīng)于確定發(fā)生異常條件¢20),回滾(630)代碼的該部分(415)的狀態(tài)的變化;以及響應(yīng)于回滾代碼的該部分(415)的狀態(tài)的變化,在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206) 中執(zhí)行(660,780)保守編譯代碼版本(430)。
9.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)可讀程序還使數(shù)據(jù)處理系統(tǒng) 產(chǎn)生關(guān)于代碼的可執(zhí)行部分(415)的積極編譯代碼版本(420)的執(zhí)行是否可能導(dǎo)致異常條件發(fā)生的預(yù)測(cè)(720);以及 響應(yīng)于指示如果執(zhí)行積極編譯代碼版本(420)則可能發(fā)生異常條件的預(yù)測(cè)(720),在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行保守編譯代碼版本(430)。
10.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,其中執(zhí)行積極編譯代碼版本(420),作為由數(shù)據(jù)處理系統(tǒng)(450)的事務(wù)監(jiān)視器(460)監(jiān)視的單個(gè)事務(wù)。
11.如權(quán)利要求10所述的計(jì)算機(jī)程序產(chǎn)品,其中 確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件包括由事務(wù)監(jiān)視器(460)確定包括積極編譯代碼版本(420)的事務(wù)中止還是成功地提交, 響應(yīng)于確定發(fā)生異常條件而回滾(630)代碼的該部分(415)的狀態(tài)的變化包括回滾包括積極編譯代碼版本(420)的事務(wù),并且所述異常條件引起事務(wù)的中止。
12.如權(quán)利要求10所述的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)可讀程序使數(shù)據(jù)處理系統(tǒng)(450)通過以下方式響應(yīng)于回滾(630)代碼的可執(zhí)行部分(415)的狀態(tài)的變化在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行保守編譯代碼版本(430) 與事務(wù)監(jiān)視器(460)相關(guān)聯(lián)地保持用于把積極編譯代碼版本(420)映射到保守編譯代碼版本(430)的數(shù)據(jù)結(jié)構(gòu)(440);以及 響應(yīng)于事務(wù)中止由事務(wù)監(jiān)視器(460)基于積極編譯代碼版本(420)在數(shù)據(jù)結(jié)構(gòu)(440)中執(zhí)行查找操作¢50,770)以獲得指向?qū)?yīng)的保守編譯代碼版本(430)的指針。
13.如權(quán)利要求10所述的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)可讀程序還使數(shù)據(jù)處理系統(tǒng) 由事務(wù)監(jiān)視器(460)在日志數(shù)據(jù)結(jié)構(gòu)(470)中記錄(640,760)中止的與積極編譯代碼版本(420)對(duì)應(yīng)的事務(wù); 基于日志數(shù)據(jù)結(jié)構(gòu)(470)執(zhí)行積極編譯代碼版本(420)的執(zhí)行是否可能導(dǎo)致與積極編譯代碼版本(420)關(guān)聯(lián)的事務(wù)中止的預(yù)測(cè)操作(720);以及 響應(yīng)于積極編譯代碼版本(420)的執(zhí)行可能導(dǎo)致關(guān)聯(lián)的事務(wù)中止的預(yù)測(cè),開始(660,780)執(zhí)行保守編譯代碼版本(430)而非積極編譯代碼版本(420)。
14.一種用于執(zhí)行內(nèi)存的存儲(chǔ)的預(yù)測(cè)原子提交的設(shè)備,包括 處理器(206);和 內(nèi)存(208),耦合到處理器(206),其中處理器(206)構(gòu)造為 在內(nèi)存(208)中接收具有代碼的一部分的可執(zhí)行代碼(415),對(duì)于代碼的該部分,提供代碼的該部分(415)的積極編譯代碼版本(420)和保守編譯代碼版本(430); 執(zhí)行(610)代碼的該部分(415)的積極編譯代碼版本(420); 確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件; 響應(yīng)于確定發(fā)生異常條件¢20),回滾(630)代碼的該部分(415)的狀態(tài)的變化;以及響應(yīng)于回滾代碼的該部分(415)的狀態(tài)的變化,執(zhí)行(660,780)保守編譯代碼版本(430)。
15.如權(quán)利要求14所述的設(shè)備,其中所述處理器(206)還構(gòu)造為 產(chǎn)生關(guān)于代碼的可執(zhí)行部分(415)的積極編譯代碼版本(420)的執(zhí)行是否可能導(dǎo)致異常條件發(fā)生的預(yù)測(cè)(720);以及 響應(yīng)于指示如果執(zhí)行積極編譯代碼版本(420)則可能發(fā)生異常條件的預(yù)測(cè)(720),在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行保守編譯代碼版本(430)。
16.如權(quán)利要求14所述的設(shè)備,其中執(zhí)行積極編譯代碼版本(420),作為由事務(wù)監(jiān)視器(460)監(jiān)視的單個(gè)事務(wù)。
17.如權(quán)利要求16所述的設(shè)備,其中 處理器(206)通過由事務(wù)監(jiān)視器(460)確定包括積極編譯代碼版本(420)的事務(wù)中止還是成功地提交而確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件,處理器(206)通過回滾包括積極編譯代碼版本(420)的事務(wù)而響應(yīng)于確定發(fā)生異常條件回滾(630)代碼的該部分(415)的狀態(tài)的變化,并且所述異常條件引起事務(wù)的中止。
18.如權(quán)利要求16所述的設(shè)備,其中所述處理器(206)通過以下方式響應(yīng)于回滾(630)代碼的可執(zhí)行部分(415)的狀態(tài)的變化在處理器(206)中執(zhí)行保守編譯代碼版本(430) 與事務(wù)監(jiān)視器(460)相關(guān)聯(lián)地保持用于把積極編譯代碼版本(420)映射到保守編譯代碼版本(430)的數(shù)據(jù)結(jié)構(gòu)(440);以及 響應(yīng)于事務(wù)中止由事務(wù)監(jiān)視器(460)基于積極編譯代碼版本(420)在數(shù)據(jù)結(jié)構(gòu)(440)中執(zhí)行查找操作¢50,770)以獲得指向?qū)?yīng)的保守編譯代碼版本(430)的指針。
19.如權(quán)利要求16所述的設(shè)備,其中所述處理器(206)還構(gòu)造為 由事務(wù)監(jiān)視器(460)在日志數(shù)據(jù)結(jié)構(gòu)(470)中記錄(640,760)中止的與積極編譯代碼版本(420)對(duì)應(yīng)的事務(wù); 基于日志數(shù)據(jù)結(jié)構(gòu)(470)執(zhí)行積極編譯代碼版本(420)的執(zhí)行是否可能導(dǎo)致與積極編譯代碼版本(420)關(guān)聯(lián)的事務(wù)中止的預(yù)測(cè)操作(720);以及 響應(yīng)于積極編譯代碼版本(420)的執(zhí)行可能導(dǎo)致關(guān)聯(lián)的事務(wù)中止的預(yù)測(cè),開始(660,780)執(zhí)行保守編譯代碼版本(430)而非積極編譯代碼版本(420)。
20.如權(quán)利要求14所述的設(shè)備,其中所述積極編譯代碼版本(420)是以并行方式執(zhí)行的代碼的該部分(415)的向量化版本,并且其中保守編譯代碼版本(430)是以串行方式執(zhí)行的標(biāo)量代 碼版本。
全文摘要
提供了用于積極優(yōu)化計(jì)算機(jī)代碼(415)的機(jī)制。利用這些機(jī)制,接收具有代碼的一部分的可執(zhí)行代碼(415),對(duì)于代碼的該部分,提供了代碼的該部分的積極編譯代碼版本(420)和保守編譯代碼版本(430)。在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行(610)代碼的該部分的積極編譯代碼版本(420)。確定(620)在積極編譯代碼版本(420)的執(zhí)行期間是否發(fā)生異常條件。響應(yīng)于確定(620)發(fā)生異常條件,回滾(630)代碼的該部分的狀態(tài)的變化。響應(yīng)于回滾(630)代碼的該部分的狀態(tài)的變化,在數(shù)據(jù)處理系統(tǒng)(450)的處理器(206)中執(zhí)行保守編譯代碼版本(430)。
文檔編號(hào)G06F9/30GK102782644SQ201180011671
公開日2012年11月14日 申請(qǐng)日期2011年2月25日 優(yōu)先權(quán)日2010年3月1日
發(fā)明者M·K·格什溫 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
革吉县| 云龙县| 邯郸市| 当涂县| 汕头市| 志丹县| 塔河县| 青河县| 鄱阳县| 北碚区| 修武县| 得荣县| 将乐县| 麻栗坡县| 平远县| 鹿泉市| 宜丰县| 汝州市| 崇州市| 神木县| 海原县| 青龙| 平泉县| 恩施市| 革吉县| 大石桥市| 五华县| 富宁县| 安溪县| 濉溪县| 砀山县| 松桃| 太仆寺旗| 新竹市| 米脂县| 乳山市| 滁州市| 武隆县| 分宜县| 张家口市| 理塘县|