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

指令優(yōu)化的制作方法

文檔序號:6442586閱讀:203來源:國知局
專利名稱:指令優(yōu)化的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及指令優(yōu)化。
背景技術(shù)
計算機程序是描述由計算機或其它基于處理器的設(shè)備執(zhí)行的操作(即動作)的指令組。當(dāng)計算機程序被加載并在計算機硬件上執(zhí)行時,計算機將會跟隨計算機程序的指令以預(yù)先確定的方式運轉(zhuǎn)。因此,計算機變?yōu)閳?zhí)行可由各指令描述的任務(wù)的專用機器。使用一種或多種編程語言的程序員創(chuàng)建構(gòu)成計算機程序的指令。通常,源代碼由程序員手動和/或在包括各種開發(fā)服務(wù)(例如,編輯器、調(diào)試器、自動填充、智能協(xié)助...) 的集成開發(fā)環(huán)境(IDE)的幫助下指定或編輯。作為示例,程序員可選擇利用面向?qū)ο蟮木幊陶Z言(例如,C# 、Visual Basic , Java...)實現(xiàn)源代碼,其中程序邏輯被指定為類或?qū)ο蟮膶嵗g的交互等。隨后,源代碼可被編譯或以其他方式變換成另一形式以便于由計算機或類似設(shè)備執(zhí)行。編譯器常規(guī)上從源代碼為特定目標(biāo)產(chǎn)生代碼。例如,某些編譯器將源代碼變換成本機代碼以便由特定機器執(zhí)行。其它編譯器從源代碼生成中間代碼,其中該中間代碼隨后在運行時被動態(tài)解釋或即時(JIT)編譯例如以便于在計算機平臺上執(zhí)行。通常,程序的大多數(shù)優(yōu)化是當(dāng)源代碼被編譯成本機或中間代碼時在編譯時執(zhí)行的。然而,也可在代碼解釋或JIT編譯期間在運行時執(zhí)行有限的程序優(yōu)化。

發(fā)明內(nèi)容
下面呈現(xiàn)了簡化的發(fā)明內(nèi)容,以便提供對所公開主題的某些方面的基本概念。本發(fā)明內(nèi)容不是廣泛性的概觀。它并不旨在標(biāo)識關(guān)鍵/重要元素,也不旨在劃定所要求保護主題的范圍。其唯一目的是以簡化形式呈現(xiàn)一些概念,作為稍后呈現(xiàn)的更具體實施例的序言。簡言之,本發(fā)明一般涉及指令優(yōu)化。更具體地,代替在運行時急切地執(zhí)行程序指令,執(zhí)行也可被延后而指令可被記錄。隨后或并發(fā)地,所記錄的指令可利用局部和/或全局優(yōu)化技術(shù)來優(yōu)化。例如,指令可基于其它所記錄的指令來移除、重新排序和/或組合。當(dāng)指令需要被執(zhí)行如提供結(jié)果時,執(zhí)行一組優(yōu)化的指令,該組指令按照某種度量(例如,運行時間、存儲器量...)不差于原始的一組指令。為實現(xiàn)上述及相關(guān)目的,在此結(jié)合以下描述和附圖描述了所要求保護主題的某些說明性方面。這些方面指示可實踐本主題的各種方式,它們均落在所要求保護主題的范圍之內(nèi)。當(dāng)結(jié)合附圖閱讀以下詳細描述時,本發(fā)明的其他優(yōu)點和新穎特征將變得顯而易見。


圖I是指令優(yōu)化系統(tǒng)的框圖。圖2是代表性優(yōu)化組件的框圖。
圖3是示出指令優(yōu)化系統(tǒng)的組成的框圖。圖4圖形地描繪了編碼為類型的查詢運算符。圖5是指令優(yōu)化的方法的流程圖。圖6是啟用運行時指令優(yōu)化的方法的流程圖。圖7是示出用于本公開各方面的合適操作環(huán)境的示意性框圖。
具體實施例方式以下細節(jié)大體針對指令優(yōu)化。指令可在執(zhí)行之前,在運行時記錄和變換,以改進所規(guī)定的操作的執(zhí)行。這樣的變換可涉及移除、重新排序和/或組合指令。換言之,可通過記錄需要被執(zhí)行的操作以及在執(zhí)行之前優(yōu)化操作而非立即執(zhí)行操作來延后執(zhí)行。這可被稱為即時指令優(yōu)化。此外,這樣的功能可對應(yīng)于指令虛擬化,因為對于指定的指令和被實際執(zhí)行的指令包括間接層。根據(jù)一個實施例,優(yōu)化可在局部、在一小組指令(例如,窺孔或窗口) 上執(zhí)行。另外或替換地,可采用較大型即更為全局的優(yōu)化方法?,F(xiàn)在參考附圖更詳細地描述本公開的各個方面,在全部附圖中用相似的標(biāo)記來指示相似或相應(yīng)的元素。然而應(yīng)該理解,附圖及其相關(guān)詳細描述不旨在將所要求保護的主題限于所公開的具體形式。相反,其意圖是覆蓋落在所要求保護主題的精神和范圍之內(nèi)的所有修改、等價物和替換的方案。首先參考圖1,示出了指令優(yōu)化系統(tǒng)100。如圖所示,指令優(yōu)化系統(tǒng)100接收、檢索或以其它方式獲取或獲得指令或者換言之指令流(也被稱為指令的流),并輸出優(yōu)化指令流。這樣的優(yōu)化可在執(zhí)行之前,在運行時執(zhí)行,由內(nèi)部或外部觸發(fā)啟動。此外,指令優(yōu)化系統(tǒng)包括記錄組件110和優(yōu)化組件120。記錄組件110例如可接收、檢索或其它方式獲取或獲得指令流,或即指定要執(zhí)行的一個或多個動作的一系列指令,并在獲取它們時記錄這些指令。在某種意義上,創(chuàng)建其中指令被記錄但不被執(zhí)行的指令緩沖區(qū)。指令可在任何計算機可讀介質(zhì)上記錄。優(yōu)化組件120可例如根據(jù)代數(shù)性質(zhì)等(例如,域特定信息、成本...)將所記錄的指令變換成優(yōu)化形式。如前所述,優(yōu)化可由內(nèi)部或外部觸發(fā)或事件觸發(fā)。作為示例而非限制,優(yōu)化可在記錄了確定數(shù)量的指令時和/或應(yīng)對于指令產(chǎn)生的結(jié)果的請求而觸發(fā)。在一個或多個觸發(fā)事件發(fā)生時,優(yōu)化組件120可將所記錄的指令變換成較佳的形式,以便于其指定的動作的優(yōu)化執(zhí)行。將注意力轉(zhuǎn)向圖2,描繪了代表性優(yōu)化組件120。優(yōu)化組件120可包括執(zhí)行優(yōu)化操作的多個子組件,包括但不限于移除組件210、重新排序組件220和組合組件230。移除組件210可移除或刪除指令。例如,如果存在將元素添加到列表以及然后從該列表中移除同一元素的指令,則因為動作抵消,移除組件210可移除這兩條指令。重新排序組件220可對指令重新排序以優(yōu)化計算。換言之,可能存在重新排序組件220可能試圖最小化的、與指令集排列相關(guān)聯(lián)的計算成本。例如,可通過在執(zhí)行某一動作之前過濾數(shù)據(jù)集來改進執(zhí)行,因為該數(shù)據(jù)集將有可能通過該過濾而縮減。更具體地,如果指令指示排序操作(例如,OrderBy)要在過濾操作(例如,Where)之前執(zhí)行,則指令可被顛倒,使得過濾操作在排序操作之前執(zhí)行,以使得就潛在縮減的數(shù)據(jù)集來執(zhí)行排序操作。組合組件230可將兩個或更多個指令組合(換言之,接合)成單個指令。更具體地,可生成捕捉多個指令然后可移除其它指令的新指令。例如,代替執(zhí)行要求多次遍歷數(shù)據(jù)集的多個過濾操作,過濾操作可被組合,使得數(shù)據(jù)集僅需被遍歷一次?;氐綀D1,指令優(yōu)化系統(tǒng)100可在執(zhí)行之前,在運行時操作。代替立即執(zhí)行指令,執(zhí)行可被延后,且指令可被記錄并優(yōu)化。為了清楚起見并利于理解,考慮以下類推。假定一個體(例如,人)要將三個美元金額(諸如$2. 5040. 25以及$1. 50)相加在一起。該個體可簡單地將金額按照所提供的方式相加在一起(例如,$2. 50+$0. 25 = $2. 75,$2. 75+$1. 50 = $4. 25)。然而,可通過延后計算直到獲取了要相加在一起的所有值,對值重新排序然后執(zhí)行計算,來使該計算較為容易。具體地,通常人們較易于將半美元(例如,$0.50)而非美元的其它分?jǐn)?shù)(例如,$0. 75、$0. 25...)加起來。從而,代替對所看到的金額執(zhí)行加法,可僅僅記錄值。隨后,金額可被重新排序為$2. 5041. 50和$0. 25,并被計算(例如,$2. 50+$1. 50 =$4. 00,$4. 00+$0. 25 = $4. 25)。相同的結(jié)果以較容易計算的方式得到。指令優(yōu)化系統(tǒng) 100可對于任何機器可執(zhí)行指令提供類似的功能。經(jīng)由優(yōu)化組件120的優(yōu)化也可在各個粒度級別執(zhí)行。根據(jù)一個實施例,優(yōu)化可對于一小組指令(例如,窺孔或窗口)執(zhí)行。例如,優(yōu)化可在對于先前的“N”個相鄰指令獲取了每一指令之后觸發(fā),其中“N”是正整數(shù)。另外或另選地,可采用其中在一大組指令上執(zhí)行優(yōu)化的更為全局的方法。例如,優(yōu)化可緊接在執(zhí)行之前啟動,諸如當(dāng)請求根據(jù)所記錄的指令而產(chǎn)生的結(jié)果時。在一個實施例中,較簡單的優(yōu)化可被指定為對一小組指令執(zhí)行,而更為復(fù)雜的優(yōu)化可被指定為對于較大一組指令執(zhí)行以利用關(guān)于指令的聚集知識。當(dāng)然,這不是必需的。實際上,優(yōu)化是高度可配置的,使得用戶可指定要執(zhí)行哪些優(yōu)化以及這些優(yōu)化應(yīng)在何時執(zhí)行。指令優(yōu)化系統(tǒng)100提供的功能可按照各種不同方式實現(xiàn)。在一個實例中,可利用動態(tài)分派,其中操作的結(jié)果展示具有用于相繼操作的專門行為的對象(例如,虛擬方法)。 類似地,可采用狀態(tài)機,其中經(jīng)由指令對附加知識的獲取根據(jù)知識(換言之,狀態(tài))從一個節(jié)點移至另一個。當(dāng)然,這只是所構(gòu)想的兩個實現(xiàn)機制。其它實現(xiàn)也是可能的,并且對于本領(lǐng)域技術(shù)人員而言是顯而易見的。指令優(yōu)化系統(tǒng)100可單獨使用,或與其它指令優(yōu)化系統(tǒng)結(jié)合使用。更具體地,指令優(yōu)化系統(tǒng)100可包括多個指令優(yōu)化子系統(tǒng)。如圖3所示,指令優(yōu)化系統(tǒng)100可包括另外兩個指令優(yōu)化子系統(tǒng)310和320。指令優(yōu)化系統(tǒng)100可將指令委托給子系統(tǒng)310和320以例如允許指令流的并行處理。此外,指令優(yōu)化子系統(tǒng)310可將指令優(yōu)化委托給另一個指令優(yōu)化子系統(tǒng)312。換言之,指令優(yōu)化系統(tǒng)是合成的,并相應(yīng)地支持并行以及遞歸處理等。作為示例而非限制,指令可涉及圖形,更具體地涉及呈現(xiàn)多邊形。饋送到指令優(yōu)化系統(tǒng)100的指令可被劃分,并被分發(fā)給指令優(yōu)化子系統(tǒng)310和320,這些指令例如可呈現(xiàn)三角形。從而,呈現(xiàn)多邊形的執(zhí)行可被虛擬化,因為它被分成更簡單的東西,或可呈現(xiàn)多個三角形來形成多邊形。而且,如果確定兩個多邊形重疊則可進行優(yōu)化,這可得到對僅一個多邊形的最佳分裂(rending)。根據(jù)一個示例性實施例,優(yōu)化可對于包括查詢表達式,如但不限于語言集成查詢 (LINQ)表達式的查詢指令(即運算符)執(zhí)行。用高級語言(諸如C# 和Visual Basic )指定的查詢表達式可受益于與通過查詢提供者針對的后端查詢語言(例如,事務(wù)SQL)無關(guān)地工作的優(yōu)化策略。
在局部級,優(yōu)化可對查詢運算符執(zhí)行,查詢運算符被表示為實現(xiàn)指定運算符(例如,SelectWhere...)的功能的方法。而且,可利用查詢運算符的語義屬性以協(xié)助優(yōu)化??紤]以下查詢表達式from x in xs where x% 2== Owhere x% 3== Oselect x+1該查詢表達式轉(zhuǎn)成三個查詢運算符方法調(diào)用(例如,Where、Where、Select)。這些運算符的樸素實現(xiàn)將導(dǎo)致創(chuàng)建并執(zhí)行三個迭代運算。所有這些運算對源序列分開地迭代,兩個執(zhí)行過濾(例如,使用if語句)而另一個執(zhí)行投影(例如,通過產(chǎn)生調(diào)用選擇函數(shù) “x+1”的結(jié)果)。為了優(yōu)化這一表達式,“where”過濾可被組合,而投影“select”可作為同一迭代代碼的部分執(zhí)行,如下For each (var x in xs)if (x% 2== 0&&x% 3 = = 0)yield return x+1 ;即使這些優(yōu)化起作用,可在查詢運算符級別上進行多得多的局部優(yōu)化。注意到,組合查詢的能力可易于導(dǎo)致次優(yōu)查詢。具體地,可按照間接的方式編寫嵌套查詢表達式,很像在數(shù)據(jù)庫產(chǎn)品中創(chuàng)建視圖
var productsInStock = from p in products
wherep.IsInStock select p;
var cheapProducts = from p in productsInStock
wherep.Price< 100 orderbyp.Price select p;
var discountTopToys = (from p in cheapProducts
orderbyp .Price descending select p)
Take(10);由于查詢是可被傳送的第一類對象,如上的查詢可駐留在不同的地方,導(dǎo)致使用了不是立即明顯的相鄰查詢運算符。例如,以上,“cheapProducts (便宜產(chǎn)品)”對價格建立了升序排序,而“discountTopToys (折扣熱銷玩具)”應(yīng)用了另一種排序,實際上使得前一種排序冗余。附錄A提供了對至少查詢運算符成立的一些示例性屬性。對大部分而言,這些屬性允許基于其的局部優(yōu)化并通常允許將兩個運算符折疊成一個運算符。可通過使用虛擬分派機制來實現(xiàn)這些和其它優(yōu)化,其中序列運算符的結(jié)果展示了具有連續(xù)序列運算符應(yīng)用的專門行為的對象。例如,以下示例代碼示出了“OrderBy (排序按照)”調(diào)用的結(jié)果如何對直接接在該調(diào)用之后的“Where (其中)”和“OrderBy”操作起作用
class OrderedSequence<T, K> : Sequence<T>
{
private Func<T, K> _keySelector;
internal OrderedSequence(Sequence<T> left, Func<T, K> keySelector): base(left)
{
一keySelector = keySelector;
public override Sequence<T> Where(Func<T, bool> filter)
{
returnnewOrderedSequence〈丁,K>(new
FilteredSequence<T>(_left, filter), _keySelector);
public override Sequence<T> OrderBy<K2>(Func<T, K2>
keySelector)
{
return new OrderedSequence<T, K2>(_lefl, keySelector);
public override IEnumerable<T> Source
{
get { return _left. Source. OrderBy(^keySelector);}
}
}這些運算符中的每一個覆蓋基類“Sequence (序列)〈T>”上的虛擬方法abstract class Sequence<T> : IEnumerable<T>
{
private Sequence<T> _left; protected Sequence(Sequence<T> left) {
_lefl = left;
public abstract IEnumerable<T> Source { get;} public virtual Sequence<T> Where(Func<T, bool> filter)
{
return new FilteredSequence<T>(this, filter);
}
public virtual OrderedSequence<T, K> OrderBy<K>(Func<T, K>
keySelector)
{
return new OrderedSequence<T, K>(this, keySelector);序列對象保持其左側(cè)序列對象(例如,該類型所表示的運算符所應(yīng)用的對象)。 子類可覆蓋所提供的虛擬查詢運算符方法以便進行局部優(yōu)化?!癝equence〈T>”實現(xiàn) "IEnumerable (可列舉)<T>”,其實現(xiàn)是經(jīng)由被稱為“Source (源)”的抽象屬性來提供的。 此處,序列操作可按照LINQ查詢重寫。對于創(chuàng)建這些“SequenceCD”對象存在不同的策略。 例如,“SequenceCD”對象可在現(xiàn)有的“ IEnumerableCD”擴展方法內(nèi)部利用,或者可允許用戶顯式地移入“優(yōu)化序列”世界中,例如利用“IEnumerableCD”上的擴展方法。圖4圖形地示出了運算符如何可被編碼為類型以及底層“IEnumerableCD”對象如何適應(yīng)于反映正被調(diào)用的查詢運算符的優(yōu)化。示例示出了對“OrderBy”和“Where”子句的使用from x in source orderby kl orderby k2 where fI select x
該查詢表達式被轉(zhuǎn)為from x in source where fI orderby k2 select x更具體地,在查詢執(zhí)行時,“源”400由其優(yōu)化版本封裝,即“SequenceCD” 410。 對于數(shù)據(jù)的操作現(xiàn)在可利用覆蓋基類“SeqUenCe〈T>”410的虛擬方法的方法來對 “Sequence〈T>” 410執(zhí)行。當(dāng)看到查詢表達式“OrderBy”的第一運算符時,產(chǎn)生對象 “OrderedSequence (有序序列)<T>” 420,它捕捉關(guān)于第一鍵選擇符(key selector) “kl” 的“OrderBy”查詢運算符。當(dāng)看到關(guān)于第二鍵選擇符“k2”的第二“OrderBy”運算符時,另一 “0rderedSequence〈T>”對象430取消第一排序并用第二排序代替它。換言之,對兩個 “OrderBy ”操作的查詢執(zhí)行計劃只包括最后的“Orderby ”操作,因為第一排序可作為冗余而被取消。隨后,當(dāng)標(biāo)識“where”運算符時,“0rderedSeqUenCe〈T>”440可交換過濾和排序的次序以在執(zhí)行排序之前潛在地限制數(shù)據(jù)集。換言之,兩個“OrderBy”操作繼之以“Where” 的查詢計劃是“Where”運算符繼之以第二 “OrderBy”操作。注意到,優(yōu)化可在查詢構(gòu)建/制定時(例如,在編譯之后但在執(zhí)行之前)作為調(diào)用查詢運算符方法的結(jié)果而執(zhí)行。該技術(shù)可用于不僅僅是“IEnumerableCD”下的各種查詢應(yīng)用編程接口(API)。具體地,“SequenceCD”層是操作的重寫及其相對排序上的抽象。簡單地用“源”屬性類型替換支持類似運算符的另一類型將足以重寫對其應(yīng)用的操作。例如, 該技術(shù)可用于優(yōu)化“IEnumeralbe〈T>”或““ IObservable (可觀察到)<T>”或其各自相同表現(xiàn)形式(homo-iconic) “ IQueryable (可查詢)<T>”和“IQbservable〈T>”形式上的查詢運算符。對于后面的形式,將向底層查詢提供者提供按照高級查詢操作的預(yù)先優(yōu)化的查詢。為了示出重寫機制的一般性質(zhì),可構(gòu)建與“System. String(系統(tǒng).串)”操作同構(gòu)
的類似的一組類型,例如為了消除沖突的操作(例如,可被抵消的那些操作)。
abstract class OptimizedString
/*理想上它將被展示為串,但是該類型被密封*/
protected OptimizedString —left; protected Sequence(OptimizedString left)
{
—left : left;
public virtual OptimizedString ToLower()
{
return new CaseChangingString(this, false /* lower */);
public virtual OptimizedString ToUpper()
{
return new CaseChangingString(this, true /* upper */);
}
}
class OptimizedStringSource : OptimizedString {
private string _s;
public OptimizedStringSource(string s)
:base(null /* no left-hand side */)
{
_s = s;
}
public override string ToStringO {
return _s;
}
}
class CaseChangingString : OptimizedString
{
private bool —upper;
internal CaseChangingString(OptimizedString left, bool upper) :base(left)
{
10_upper = upper;
public virtual OptimizedString ToLower()
{
return new CaseChangingString(_lefl3 false /* lower */);
//此處“this (這)”被丟棄,并將ToLower (至較低)連系至左手側(cè)。
public virtual OptimizedString ToUpper()
{
return new CaseChangingString(_left, true /* upper */); //此處“this”被丟棄,并將ToUpper (至較高)連系至左手側(cè)。
public override string ToStringO
{
return _upper 一left.ToUpper(): _left.ToLower();
//如果要求提供串,則該操作被啟動。實際上,一般模式是具有觸發(fā)優(yōu)化計算的懶惰操作。在以上“String(串)”示例中,它是“ToUpper ”。在“ Sequence<T> ”情況中,“ Source ”屬性的列舉觸發(fā)優(yōu)化計算。而且,本發(fā)明的優(yōu)化機制對任何不可變類型是有利的。關(guān)于不變可類型的問題是只要需要完成對應(yīng)于變化或改變的某些事物,就需要創(chuàng)建新“事物”(例如,對象、元素...)。例如,可能存在與創(chuàng)建新事物、刪除事物和創(chuàng)建新事物有關(guān)的許多指令。代替對于不可變事物執(zhí)行若干分配和取消分配,所有變化可被記錄,然后被用于僅創(chuàng)建捕捉至分配點為止所有變化的單個新不可變事物。參考若干組件之間的交互已經(jīng)描述了上述系統(tǒng)、架構(gòu)、環(huán)境等。應(yīng)該理解,這樣的系統(tǒng)和組件可以包括這些組件或其中指定的子組件,某些指定的組件或子組件,和/或附加的組件。子組件也可以被實現(xiàn)為在通信上被耦合到其他組件而不是被包括在父組件中的組件。此外,一個或多個組件和/或子組件可以結(jié)合成提供聚集功能的單個組件。系統(tǒng)、組件、和/或子組件之間的通信可以根據(jù)推送(push)和/或拉取(pull)模型來實現(xiàn)。各組件也可以與一個或多個其他組件進行交互,出于簡要考慮在此未具體描述該組件,但本領(lǐng)域的技術(shù)人員均已知。此外,以上公開系統(tǒng)以及以下方法的各個部分可以包括或包含基于人工智能、機器學(xué)習(xí)或知識或規(guī)則的組件、子組件、進程、裝置、方法或機制(例如,支持向量機、神經(jīng)網(wǎng)絡(luò)、專家系統(tǒng)、貝葉斯信任網(wǎng)絡(luò)、模糊邏輯、數(shù)據(jù)融合引擎、分類器...)。這樣的組件和其它組件可以自動化執(zhí)行某些機制或進程,由此使得系統(tǒng)和方法的各部分更為自適應(yīng)、高效及智能。作為示例而非限制,指令優(yōu)化系統(tǒng)100可采用這樣的機制來例如根據(jù)歷史或上下文信息來確定或推斷優(yōu)化??紤]到以上描述的示例性系統(tǒng),參考圖5-6的流程圖將可以更好地理解依照所公開的主題實現(xiàn)的方法。盡管為了說明簡潔起見,作為一系列框示出和描述了方法,但是,應(yīng)該理解,所要求保護的主題不僅限于所描述框的順序,一些框可以按與此處所描繪和描述的不同的順序進行和/或與其它框并發(fā)地進行。此外,并非全部所示出的框都是實現(xiàn)下面所描述的方法所必需的。參考圖5,示出了便于指令優(yōu)化的方法500。在參考標(biāo)號510,標(biāo)識、接收、檢索或以其他方式獲得或獲取指令。在標(biāo)號520,記錄所標(biāo)識的指令,或換言之,以不執(zhí)行指令的某種方式記住指令。在參考標(biāo)號530,作出是否應(yīng)就指令集執(zhí)行優(yōu)化的判斷。這樣的判斷可根據(jù)內(nèi)部或外部觸發(fā)來作出。一示例,內(nèi)部觸發(fā)可以是特定數(shù)量的指令的標(biāo)識(例如,在標(biāo)識每一指令之后優(yōu)化、在標(biāo)識每三個指令之后優(yōu)化...)。外部觸發(fā)可例如對應(yīng)于對指令或更具體地由指令指定的操作產(chǎn)生或操縱的數(shù)據(jù)的請求。如果確定優(yōu)化應(yīng)被執(zhí)行(“YES”),方法 500可在參考標(biāo)號540繼續(xù),其中優(yōu)化所記錄的一組指令。然而,如果不期望優(yōu)化(“NO”), 該方法可繼續(xù)至參考標(biāo)號510,其中標(biāo)識了另一指令??梢岳斫?,方法500可以是懶惰的。換言之,可繼續(xù)收集指令,指令可形成可對優(yōu)化利用的集合知識的部分,直到需要執(zhí)行為止, 例如以產(chǎn)生結(jié)果而非僅僅急切地在標(biāo)識指令時執(zhí)行指令。從而,方法500可被稱為執(zhí)行即時指令優(yōu)化。為便于清楚并理解關(guān)于所要求保護的主題的各方面起見,考慮以下真實世界比擬。假設(shè)房主指示承包商在該房主度假兩周時粉刷他的房子并裝上新窗戶。承包商可能會在次日急切地粉刷房子并裝上新窗戶?;蛘撸邪炭赡軆H僅注意到要粉刷房子并要裝上窗戶,并剛好在房主從度假回來之前,完成所有工作。換言之,承包商可虛擬化指令。然而, 房主可能認為工作將在指示之后不久就開始,對房主而言,至于工作何時執(zhí)行(例如,以及工作如何以及由誰執(zhí)行),沒有區(qū)別。然而,在后一情況中,可優(yōu)化工作執(zhí)行的效率。例如, 假定房主在其度假中途打電話,并改變房子的粉刷顏色。如果承包商已經(jīng)粉刷了房子,他將必須用新顏色重新粉刷房子,即兩倍的工作。然而,如果他還沒有開始,他可僅僅改變先前記下的顏色,并在他第一次且僅有的一次粉刷房子時利用新顏色。此外,假設(shè)房主增加了諸如修屋頂?shù)念~外任務(wù)。如果承包商已經(jīng)完成了工作,他有可能從工作地點撤走了其所有工具,并因此需要將它們帶回來以修理屋頂。然而,如果承包商懶惰地執(zhí)行工作,他可僅僅注意到向其列表增加任務(wù)。承包商然后可以等待,直到房主從度假回來之前剛好完成所有工作。當(dāng)然,如果房主決定早些回家,這也可觸發(fā)承包商完成列表上的所有任務(wù)。此外,可以理解,承包商不必親自完成所有任務(wù),而是承包商可將工作委托給一個或多個分包商,他們可執(zhí)行類似的懶惰優(yōu)化。
圖6是啟用運行時指令優(yōu)化的方法600的流程圖。在參考標(biāo)號610,可以分析計算機程序。例如,可在編譯進程期間分析源代碼。在參考標(biāo)號620,可基于分析對于程序注入代碼以支持如本文之前所述的運行時優(yōu)化。例如,利用特殊類型和虛擬分派以實現(xiàn)優(yōu)化的代碼可被注入或鏈接至程序?;蛘撸付ɡ缁诖鷶?shù)性質(zhì)編碼優(yōu)化技術(shù)的狀態(tài)機的代碼可被注入或鏈接至程序。例如,可采用修改現(xiàn)有指令實現(xiàn)的運行時庫。在此所用的術(shù)語“組件”、“系統(tǒng)”和“引擎”及其各種形式意指與計算機相關(guān)的實體,其可以是硬件、硬件和軟件的組合、軟件、或執(zhí)行中的軟件。例如,組件可以是但不限于是,在處理器上運行的進程、處理器、對象、實例、可執(zhí)行程序、執(zhí)行的線程、程序和/或計算機。作為說明,在計算機上運行的應(yīng)用和計算機都可以是組件。一個或多個組件可駐留在進程和/或執(zhí)行的線程內(nèi),并且組件可位于一個計算機上和/或分布在兩個或更多的計算機之間。在本文中使用的詞語“示例性”或其各種形式意味著用作示例、實例或說明。在此被描述為“示例性”的任何方面或設(shè)計并不一定要被解釋為相比其它方面或設(shè)計更優(yōu)選或有利。此外,各示例只是出于清楚和理解的目的來提供的并且并不意味著以任何方式限制或約束所要求保護主題或本發(fā)明的相關(guān)部分??梢岳斫?,本來可呈現(xiàn)不同范圍的多個附加或替換示例,但出于簡明的目的已被省略。如此處所使用,術(shù)語“推論”或“推斷”通常指的是從經(jīng)由事件和/或數(shù)據(jù)捕捉的一組觀察結(jié)果來推理或推斷系統(tǒng)、環(huán)境、和/或用戶的狀態(tài)的過程。可以使用推斷來標(biāo)識特定上下文或動作,也可以生成例如狀態(tài)上的概率分布。推斷可以是概率性的,即,基于對數(shù)據(jù)和事件的考慮,計算在感興趣狀態(tài)上的概率分布。推斷也可以是指用于從一組事件和/或數(shù)據(jù)構(gòu)成較高級別的事件的技術(shù)。這樣的推斷導(dǎo)致從一組觀察到的事件和/或存儲的事件數(shù)據(jù)構(gòu)建新的事件或動作,不管事件在時間上是否緊密相關(guān),以及事件和數(shù)據(jù)是來自一個還是多個事件和數(shù)據(jù)源??刹捎酶鞣N分類方案和/或系統(tǒng)(例如,支持向量機、神經(jīng)網(wǎng)絡(luò)、 專家系統(tǒng)、貝葉斯信任網(wǎng)絡(luò)、模糊邏輯、數(shù)據(jù)融合引擎……)來執(zhí)行關(guān)于所要求保護主題的自動化和/或推斷的動作。而且,對于在詳細描述或權(quán)利要求書中使用術(shù)語“包括”、“包含”、“具有”、“含有” 或其它形式的變型而言,這樣的術(shù)語旨在以類似于術(shù)語“包括”的方式體現(xiàn)包含性,如同“包括”在用作權(quán)利要求書中的過渡詞時所解釋的那樣。為了為所要求保護主題提供上下文,圖7以及以下討論旨在提供對其中可以實現(xiàn)本主題的各方面的合適環(huán)境的簡要、概括描述。然而,合適的環(huán)境只是示例并且并非旨在對使用范圍或功能提出任何限制。盡管能夠在可以在一臺或多臺計算機上運行的程序的計算機可執(zhí)行指令的一般上下文中描述以上公開的系統(tǒng)和方法,但是,本領(lǐng)域的技術(shù)人員將認識到,各方面也可以與其他程序模塊等相結(jié)合地實現(xiàn)。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件和數(shù)據(jù)結(jié)構(gòu)等。此外,本領(lǐng)域技術(shù)人員可以理解,上述系統(tǒng)和方法可用各種計算機系統(tǒng)配置實現(xiàn),包括單處理器、多處理器或多核處理器計算機系統(tǒng)、小型計算設(shè)備、大型計算機、以及個人計算機、手持式計算設(shè)備(例如,個人數(shù)字助理(PDA)、電話、 手表……)、基于微處理器或可編程消費者或工業(yè)電子設(shè)備等。各方面也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠程處理設(shè)備執(zhí)行的分布式計算環(huán)境中實現(xiàn)。然而,所要求保護主題的某些方面,如果不是所有方面的話,可以在獨立計算機上實施。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備中的一個或兩者中。參考圖7,示出了示例通用計算機710或計算設(shè)備(例如,臺式機、膝上型計算機、 服務(wù)器、手持式設(shè)備、可編程消費或工業(yè)電子產(chǎn)品、機頂盒、游戲系統(tǒng)……)。計算機710包括一個或多個處理器720、存儲器730、系統(tǒng)總線740、大容量存儲750、以及一個或多個接口組件770。系統(tǒng)總線740與至少上述系統(tǒng)組件通信地耦合。然而,可以理解,在其最簡單的形式中,計算機710可包括耦合到存儲器730的一個或多個處理器720,該一個或多個處理器720執(zhí)行存儲在存儲器730中的各種計算機可執(zhí)行動作、指令和或組件。處理器720可以用通用處理器、數(shù)字信號處理器(DSP)、應(yīng)用程序?qū)S眉呻娐?(ASIC)、現(xiàn)場可編程門陣列(FPGA)或其它可編程邏輯設(shè)備、分立門或晶體管邏輯、分立硬件組件或被設(shè)計為執(zhí)行此處描述的功能的其任意組合來實現(xiàn)。通用處理器可以是微處理器,但在替換方案中,處理器可以是任何處理器、控制器、微控制器、或狀態(tài)機。處理器720 還可被實現(xiàn)為計算設(shè)備的組合,例如DSP和微處理器的組合、多個微處理器、多核處理器、 結(jié)合一個DSP核的一個或多個微處理器、或任何其它這種配置。計算機710可包括各種計算機可讀介質(zhì)或以其他方式與各種計算機可讀介質(zhì)交互以便于控制計算機710來實現(xiàn)所要求保護主題的一個或多個方面。計算機可讀介質(zhì)可以是能由計算機710訪問的任何可用介質(zhì),并包含易失性和非易失性介質(zhì)以及可移動和不可移動介質(zhì)。作為示例而非限制,計算機可讀介質(zhì)可包括計算機存儲介質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)這樣的信息的任意方法或技術(shù)來實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。計算機存儲介質(zhì)包括,但不限于,存儲器設(shè)備(例如,隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)……)、磁存儲設(shè)備(例如,硬盤、軟盤、磁帶盒、磁帶……)、光盤(例如,緊致盤(CD)、數(shù)字多功能盤(DVD)……)、以及固態(tài)設(shè)備(例如, 固態(tài)驅(qū)動器(SSD)、閃存驅(qū)動器(例如,卡、棒、鍵驅(qū)動器……)……)、或者可用于存儲所需信息并且可由計算機710訪問的任何其他介質(zhì)。通信介質(zhì)通常以諸如載波或其他傳輸機制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并包括任何信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號” 是指具有以在信號中編碼信息的方式被設(shè)定或改變其一個或多個特征的信號。作為示例而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接線連接之類的有線介質(zhì),以及諸如聲學(xué)、RF、紅外及其他無線介質(zhì)之類的無線介質(zhì)。上面各項中的任何項的組合也應(yīng)該包括在計算機可讀介質(zhì)的范圍內(nèi)。存儲器730和大容量存儲750是計算機可讀存儲介質(zhì)的示例。取決于計算設(shè)備的確切配置和類型,存儲器730可以是易失性的(例如RAM)、非易失性的(例如ROM、閃存……)或是兩者的某種組合。作為示例,基本輸入/輸出系統(tǒng)(BIOS),包括諸如在啟動期間在計算機710內(nèi)的元件之間傳輸信息的基本例程,可被存儲在非易失性存儲器中,而易失性存儲器可擔(dān)當(dāng)外部高速緩存存儲器以便于處理器720的處理等。大容量存儲750包括相對于存儲器730用于存儲大量數(shù)據(jù)的可移動/不可移動、 易失性/非易失性計算機存儲介質(zhì)。例如,大容量存儲750包括但不限于,諸如磁盤或光盤驅(qū)動器、軟盤驅(qū)動器、閃存存儲器、固態(tài)驅(qū)動器、或記憶棒的一個或多個設(shè)備。
存儲器730和大容量存儲750可包括或其中存儲有操作系統(tǒng)760、一個或多個應(yīng)用 762、一個或多個程序模塊764和數(shù)據(jù)766。操作系統(tǒng)760用于控制和分配計算機710的資源。應(yīng)用762包括系統(tǒng)和應(yīng)用軟件中的一個或兩個,并且可利用操作系統(tǒng)760對資源的管理通過存儲在存儲器730和/或大容量存儲750中的程序模塊764和數(shù)據(jù)766來執(zhí)行一個或多個動作。因此,應(yīng)用762可根據(jù)由此提供的邏輯來將通用計算機710變成專用機器。所要求保護主題的全部或各部分可以使用產(chǎn)生控制計算機以實現(xiàn)所公開功能的軟件、固件、硬件或其任意組合的標(biāo)準(zhǔn)編程和/或工程技術(shù)來實現(xiàn)。作為示例而非限制,指令優(yōu)化系統(tǒng)100或其一部分可以是應(yīng)用762或形成應(yīng)用762的一部分,并且包括存儲在存儲器和/或大容量存儲750中的一個或多個模塊764和數(shù)據(jù)766,這些模塊和數(shù)據(jù)的功能可在由一個或多個處理器720執(zhí)行時可實現(xiàn)。根據(jù)一個特定實施例,處理器720可與片上系統(tǒng)(SOC)或在單個集成電路基座上包括或換言之集成硬件和軟件的類似體系結(jié)構(gòu)相對應(yīng)。此處,處理器720可包括至少與處理器720和存儲器730相似的一個或多個處理器以及存儲器等。常規(guī)處理器包括最少量的硬件和軟件并且廣泛依賴于外部硬件和軟件。作為對比,處理器的SOC實現(xiàn)更強大,因為它將硬件和軟件嵌入其中以能夠用最少的硬件和軟件或不依賴于外部硬件和軟件來啟用特定功能。例如,指令優(yōu)化系統(tǒng)100和/或相關(guān)聯(lián)的功能可被嵌入到SOC體系結(jié)構(gòu)中的硬件內(nèi)。計算機710還包括通信地耦合到系統(tǒng)總線740并方便與計算機710的交互的一個或多個接口組件770。作為示例,接口組件770可以是端口(例如,串行、并行、PCMCIA、USB、
火線......)或接口卡(例如,聲音、視頻......)等等。在一個示例實現(xiàn)中,接口組件770可被
具體化為用戶輸入/輸出接口,該用戶輸入/輸出接口使得用戶能夠通過一個或多個輸入設(shè)備(例如,諸如鼠標(biāo)等定點設(shè)備、跟蹤球、指示筆、觸摸墊、鍵盤、話筒、操縱桿、游戲手柄、 圓盤式衛(wèi)星天線、掃描儀、照相機、其他計算機……)來將命令和信息輸入到計算機710中。 在另一示例實現(xiàn)中,接口組件770可被具體化為輸出外圍接口,該輸出外圍接口向顯示器 (例如,CRT、LCD、等離子……)、揚聲器、打印機和/或其它計算機等提供輸出。此外,接口組件770可被具體化為網(wǎng)絡(luò)接口,該網(wǎng)絡(luò)接口使得能夠諸如通過有線或無線通信鏈路與其他計算設(shè)備(未示出)通信。以上所已經(jīng)描述的內(nèi)容包括所要求保護主題的各方面的示例。當(dāng)然,出于描繪所要求保護主題的目的而描述每一個可以想到的組件或方法的組合是不可能的,但本領(lǐng)域內(nèi)的普通技術(shù)人員應(yīng)該認識到,所要求保護主題的許多進一步的組合和排列都是可能的。從而,所公開的主題旨在涵蓋落入所附權(quán)利要求書的精神和范圍內(nèi)的所有這樣的變更、修改和變化。附錄A# 相鄰 where 過濾器xs. Where (fj · Where (f2) = = xs. Where (x = >
(X) &&f2 (X))〇也用于所得到的如OfType (類型)的運算符 相鄰 select 投影xs. Select (P1). Select (p2) = = xs. Select (x = > p2 (P1 (x))〇也用于所得到的如Cast (強制轉(zhuǎn)換)的運算符〇對Zip類似,假設(shè)存在η元選擇符過載
區(qū)別的幕等:xs. Distinct O · Distinct ()== xs. Distinct () 冗余排序的抵消=Xs^OrderBy(Ii1)LThenByCuMtOrderBy(Ii2)== xs. OrderBy (k2)〇對這些運算符的降序變型的使用也成立。 排序和過濾的可交換性xs. OrderBy (Ii1) · Where (fx) = = xs. Where (fx) · OrderBy (Ii1)〇基本原理對經(jīng)縮減的序列排序更為便宜· N元運算符還原O xs. Concat (ys) = = EnumerableEx. Concat (xs, ys)O EnumerableEx. Concat (xs, ys). Concat (zs) = = EnumerableEx. Concat (xs, ys, zs)〇也用于具有聯(lián)合屬性的類似運算符,諸如Union(并) 數(shù)量的傳播〇與保持為Empty (空)的各個運算符組合的Enumerable. EmptyO〇對于Return (例如,帶有Select)、Throw (拋)(除非后繼以Catch (接))類似
注釋成立。 抵消運算符的消除O xs. Reverse (). Reverse () = = xs〇這僅在輸入序列不是無限的時成立?!?Skip (跳過)和 Take(取)交互(當(dāng) m>=0,n>=0)O xs. Take (m) · Take (η) = = xs. Take (Math. Min (m,n))〇 xs. Take (m). Skip (n) (where m > n) = = xs. Skip (n). Take (m_n)〇 xs. Skip (m) · Skip (n) = = xs. Skip (m+n) 中間分配的縮減O xs. ToArray (). ToArray () = = xs. ToArray ()O xs. ToList (). ToList () = = xs. ToList ()〇一般而言,之后的.To*運算符消除之前這樣的.To*運算符的需要 將中間分配向下推送O xs. To [Array | List] O . [Where | Select | · · ·]==xs. [Where | Select | · · · ] · To [Array | List]()〇這僅在輸入序列不是無限的時成立?!?Reverse (顛倒)和OrderBy改變排序方向O xs. OrderBy (Ii1) · Reverse O = = xs. OrderByDescending (Ii1)O xs. OrderByDescending (Ii1) · Reverse ()== xs. OrderBy (Ii1)
1權(quán)利要求
1.一種優(yōu)化指令的方法,包括采用被配置來執(zhí)行存儲在存儲器(730)中的計算機可執(zhí)行指令的至少一個處理器 (720)以執(zhí)行以下動作記錄被指定來執(zhí)行的指令流;以及在執(zhí)行之前,在運行時優(yōu)化所述指令流。
2.如權(quán)利要求I所述的方法,其特征在于,在向所述指令流添加指令時增量式地優(yōu)化所述指令流。
3.如權(quán)利要求2所述的方法,其特征在于,全局地優(yōu)化所述指令流。
4.如權(quán)利要求I所述的方法,其特征在于,全局地優(yōu)化所述指令流。
5.如權(quán)利要求I所述的方法,其特征在于,還包括根據(jù)外部觸發(fā)啟動所述優(yōu)化。
6.一種指令優(yōu)化系統(tǒng)(100),包括耦合到存儲器(730)的處理器(720),所述處理器(720)被配置來執(zhí)行存儲在所述存儲器(730)中的以下計算機可執(zhí)行組件被配置成記錄指定來執(zhí)行的指令的第一組件(110);以及被配置成優(yōu)化所述指令的第二組件(120),其中所述第一和第二組件在指令執(zhí)行之前, 在運行時操作。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述第二組件被配置成在記錄指令時增量式地優(yōu)化所述指令。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述第二組件被配置成全局地優(yōu)化所述指令。
9.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述第二組件被配置成當(dāng)所述指令中的一條或多條將要被執(zhí)行時全局地優(yōu)化所述指令。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述第二組件被配置成根據(jù)外部觸發(fā)來優(yōu)化所述指令。
全文摘要
本發(fā)明涉及指令優(yōu)化。程序可在執(zhí)行之前,在運行時被優(yōu)化以提高性能。被指定來執(zhí)行的程序指令/操作可被記錄并隨后在執(zhí)行之前,在運行時例如通過對指令執(zhí)行變換來進行優(yōu)化。例如,這樣的優(yōu)化可移除、重新排序和/或組合指令等。
文檔編號G06F9/45GK102609292SQ201110434430
公開日2012年7月25日 申請日期2011年12月12日 優(yōu)先權(quán)日2010年12月13日
發(fā)明者B·德斯梅特, H·J·M·梅杰 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
儋州市| 唐河县| 富源县| 迁安市| 夏邑县| 广宗县| 平度市| 崇州市| 贵州省| 咸宁市| 乳山市| 海晏县| 湾仔区| 濮阳市| 乌什县| 博湖县| 宝清县| 巴彦淖尔市| 临西县| 二连浩特市| 阿尔山市| 古丈县| 固镇县| 汶上县| 渭南市| 乌审旗| 义乌市| 夏邑县| 饶平县| 正定县| 锦州市| 呼和浩特市| 视频| 怀柔区| 十堰市| 田东县| 湘西| 宁波市| 绥棱县| 葫芦岛市| 扶风县|