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

定制優(yōu)化/轉(zhuǎn)換/處理策略的系統(tǒng)和方法與流程

文檔序號(hào):12042000閱讀:335來(lái)源:國(guó)知局
定制優(yōu)化/轉(zhuǎn)換/處理策略的系統(tǒng)和方法與流程
定制優(yōu)化/轉(zhuǎn)換/處理策略的系統(tǒng)和方法相關(guān)申請(qǐng)案交叉申請(qǐng)本發(fā)明要求2011年11月29日遞交的發(fā)明名稱(chēng)為“定制優(yōu)化/轉(zhuǎn)換/處理策略的系統(tǒng)和方法”的第61/564,665號(hào)美國(guó)臨時(shí)申請(qǐng)案的優(yōu)先權(quán),以及2012年8月8日遞交的發(fā)明名稱(chēng)為“定制優(yōu)化/轉(zhuǎn)換/處理策略的系統(tǒng)和方法”的第13/570148號(hào)美國(guó)專(zhuān)利申請(qǐng)案的在先申請(qǐng)優(yōu)先權(quán),這些在先申請(qǐng)的內(nèi)容以引入的方式并入本文本中,如同全文再現(xiàn)一般。技術(shù)領(lǐng)域本發(fā)明涉及定制優(yōu)化/轉(zhuǎn)換/處理策略的系統(tǒng)和方法,所述系統(tǒng)和方法用于應(yīng)用不同策略到輸入的不同部分的編譯程序或者其他數(shù)據(jù)處理軟件。

背景技術(shù):
性能工程是開(kāi)發(fā)周期中關(guān)鍵的一步,可以確保高效二進(jìn)制由高級(jí)編程語(yǔ)言編寫(xiě)的軟件源生成。性能工程關(guān)注的焦點(diǎn)可以是運(yùn)行時(shí)間的性能和代碼大小。在軟件源代碼及其二進(jìn)制之間存在日益增長(zhǎng)的差距。軟件開(kāi)發(fā)者通過(guò)采用強(qiáng)調(diào)模塊性、代碼重用性以及可維護(hù)性的軟件工程技術(shù)來(lái)提高生產(chǎn)率。遺憾的是,這些軟件工程的具體實(shí)施通常與工程師們努力挖掘硬件能力的性能工程互相矛盾。通常的情況是,從軟件語(yǔ)義到低級(jí)別硬件特征并沒(méi)有直接的映射關(guān)系。編譯優(yōu)化程序負(fù)責(zé)將高級(jí)編程語(yǔ)言編寫(xiě)的應(yīng)用轉(zhuǎn)換為二進(jìn)制。雖然有相當(dāng)大比例的編譯程序僅適用于自動(dòng)二進(jìn)制的生成,可是在很多其他情況下,仍然要依賴(lài)編譯程序來(lái)生成能夠充分利用底層硬件的有效代碼。比如說(shuō),編譯優(yōu)化程序的重要性在數(shù)字信號(hào)處理(DSP)領(lǐng)域中尤其顯著,這是因?yàn)橐攵ㄖ频奶幚砥魍ǔV皇菫榱思铀僖唤M分享相同特性的應(yīng)用。在這些場(chǎng)景中,充分利用底層硬件對(duì)于增強(qiáng)硬件的總體競(jìng)爭(zhēng)力非常重要。由于學(xué)術(shù)界和業(yè)界不斷的努力,過(guò)去的50年內(nèi)內(nèi)出現(xiàn)了大量的優(yōu)化技術(shù)。越來(lái)越多強(qiáng)大的分析和優(yōu)化技術(shù)被集成至現(xiàn)代編譯程序中。盡管現(xiàn)代編譯程序用途廣泛并且功能強(qiáng)大,但工程師經(jīng)常會(huì)因?yàn)槠渖纱蝺?yōu)或差的二進(jìn)制而失望。導(dǎo)致低質(zhì)量?jī)?yōu)化的原因可歸為兩類(lèi):硬故障和軟故障。硬故障指的是所述編譯程序缺少處理某些場(chǎng)景的某些特征(分析或轉(zhuǎn)換)。這需要額外工作來(lái)改進(jìn)所述編譯程序。軟故障指的是編譯程序不能如預(yù)期運(yùn)行,但能夠通過(guò)使用編譯程序選項(xiàng)或微調(diào)編譯程序來(lái)運(yùn)行的場(chǎng)景。經(jīng)驗(yàn)表明,相當(dāng)大比例的性能故障是由軟故障導(dǎo)致的。

技術(shù)實(shí)現(xiàn)要素:
用于定制編譯程序優(yōu)化的實(shí)施例方法包括:從應(yīng)用程序中提取內(nèi)核;對(duì)內(nèi)核進(jìn)行性能調(diào)節(jié)以確定各個(gè)內(nèi)核的定制優(yōu)化策略,所述定制優(yōu)化策略不同于編譯程序針對(duì)各個(gè)內(nèi)核的默認(rèn)優(yōu)化策略;以及使用計(jì)算機(jī)對(duì)所述應(yīng)用程序進(jìn)行注釋來(lái)標(biāo)識(shí)針對(duì)各個(gè)內(nèi)核確定的定制優(yōu)化策略。用于定制編譯程序優(yōu)化的實(shí)施例方法包括:接收來(lái)自主機(jī)的已注解程序,所述已注解程序針對(duì)各個(gè)內(nèi)核標(biāo)識(shí)出定制優(yōu)化策略;通過(guò)一系列優(yōu)化引擎?zhèn)鬟f所述已注解程序,各個(gè)配備了適配器的優(yōu)化引擎用于實(shí)現(xiàn)對(duì)應(yīng)于至少一個(gè)內(nèi)核的定制優(yōu)化策略;以及在通過(guò)一系列優(yōu)化引擎?zhèn)鬟f已注解程序之后,輸出已編譯的對(duì)象程序。一種實(shí)施例處理系統(tǒng),用于實(shí)現(xiàn)定制編譯程序的優(yōu)化,包括一個(gè)處理器和一個(gè)可操作地耦合到所述處理器上的存儲(chǔ)器。所述存儲(chǔ)器存放定制優(yōu)化模塊和編譯程序模塊。所述定制優(yōu)化模塊,用于從加載在存儲(chǔ)器內(nèi)的應(yīng)用程序中提取內(nèi)核,使用編譯程序模塊和各種不同編譯策略來(lái)確定各個(gè)內(nèi)核的定制優(yōu)化策略,然后通過(guò)測(cè)試各個(gè)內(nèi)核的編譯質(zhì)量來(lái)對(duì)內(nèi)核進(jìn)行性能調(diào)節(jié),為各個(gè)內(nèi)核決定定制優(yōu)化策略以及對(duì)應(yīng)用程序進(jìn)行注釋來(lái)標(biāo)識(shí)出針對(duì)各個(gè)內(nèi)核而確定的定制優(yōu)化策略。附圖說(shuō)明為了更完整地理解本發(fā)明及其優(yōu)點(diǎn),現(xiàn)在參考下文結(jié)合附圖進(jìn)行的描述,其中:圖1示出了一項(xiàng)包括定制優(yōu)化(TAO)的實(shí)施例性能調(diào)節(jié)過(guò)程。圖2示出了不含圖1所示的定制優(yōu)化益處的編譯程序的操作。圖3示出了含有圖1所示的定制優(yōu)化益處的編譯程序的實(shí)施例操作。圖4為一種計(jì)算平臺(tái)的方框圖,所述計(jì)算平臺(tái)可用來(lái)實(shí)現(xiàn)如下文實(shí)施例所述的設(shè)備和方法。除非另有指示,否則不同圖中的對(duì)應(yīng)標(biāo)號(hào)和符號(hào)通常指代對(duì)應(yīng)部分。繪制各圖是為了清楚地說(shuō)明實(shí)施例的相關(guān)方面,因此未必是按比例繪制的。具體實(shí)施方式下文將詳細(xì)論述當(dāng)前優(yōu)選實(shí)施例的制作和使用。但應(yīng)了解,本發(fā)明提供了許多可以在多種具體環(huán)境中實(shí)施的適用的發(fā)明概念。所論述的具體實(shí)施例僅為說(shuō)明性的,而不限制本發(fā)明的范圍。實(shí)施例適用于編譯程序優(yōu)化、性能調(diào)節(jié)以及性能工程。實(shí)施例通常使性能工程師能夠使用編譯程序程序快速調(diào)節(jié)大型應(yīng)用程序中的各個(gè)重點(diǎn),然后將調(diào)解結(jié)果傳送回原應(yīng)用程序。編譯程序軟故障通常由兩個(gè)因素導(dǎo)致。首先,因?yàn)楹芏嗑幾g程序的問(wèn)題屬于非確定型多項(xiàng)式時(shí)間困難(NP-hard)問(wèn)題,所以編譯程序的編寫(xiě)人員經(jīng)常使用探試法來(lái)在嚴(yán)格的時(shí)間限制內(nèi)對(duì)決定做出分析。更糟糕的是,探試法中使用的大量參數(shù)通常是猜測(cè)和估算的結(jié)果。這種近似值使結(jié)果的有效性高度取決于編譯程序的輸入。如果這些探試法和估算是硬編入編譯程序中的,則性能工程師將無(wú)法對(duì)其進(jìn)行控制。雖然能夠用編譯程序選項(xiàng)來(lái)控制探試法,但是大部分編譯程序選項(xiàng)的有效性顆粒度很粗糙,這經(jīng)常影響到編譯程序的全局運(yùn)行,使得根本不可能在同一個(gè)源文件中找到符合所有熱點(diǎn)的探試法。其次,許多優(yōu)化的實(shí)現(xiàn)僅僅是為了盡實(shí)施人員所能地實(shí)現(xiàn)最常見(jiàn)的情況。常見(jiàn)情況的小幅變化就能夠輕易地使這些優(yōu)化遭受阻礙。通常情況下,輸入(中介碼(IR))中一個(gè)簡(jiǎn)單的細(xì)微差別就能夠破壞分析或優(yōu)化,使得編譯不被接受。因?yàn)橥ǔP枰幌盗蟹治龊娃D(zhuǎn)換才能實(shí)現(xiàn)所述工作,所以敏感性分析或優(yōu)化使得編譯成為一個(gè)充滿(mǎn)了蝴蝶效應(yīng)的微妙過(guò)程。也就是說(shuō),發(fā)生在上行分析或轉(zhuǎn)換上的看似很小的變化或故障都會(huì)使編譯結(jié)果有顯著差異。因此,通常每個(gè)涉及到的部分都應(yīng)如預(yù)期般運(yùn)行。上述兩個(gè)因素以及當(dāng)今流行的僵化的編譯程序工作模型可給性能工程造成嚴(yán)重問(wèn)題。在所述普通模型中,優(yōu)化編譯程序常被用作由有限數(shù)量的選項(xiàng)控制的黑盒工具。應(yīng)用最廣泛的選項(xiàng)是優(yōu)化級(jí)別,這些級(jí)別非常不靈活,用戶(hù)無(wú)法對(duì)編譯程序行為進(jìn)行細(xì)粒度控制?;蛘?,可以使用編譯程序選項(xiàng)。這些選項(xiàng)能夠用來(lái)開(kāi)啟或者關(guān)閉某些優(yōu)化和調(diào)整試探法的參數(shù)等等。然而,這些編譯程序選項(xiàng)的影響范圍粒度粗;就文件或整個(gè)項(xiàng)目方面來(lái)說(shuō),他們?nèi)中缘馗淖兙幾g程序的行為。其它更先進(jìn)的方法包括使用特殊的編譯指示、指令或擴(kuò)展關(guān)鍵字。盡管這些結(jié)構(gòu)由于某些特定目的(比如循環(huán)并行化、程序提示和數(shù)據(jù)屬性注釋)而被廣泛使用,他們的范圍仍太過(guò)于局限,無(wú)法控制編譯程序的大量行為。例如,編譯過(guò)程中沒(méi)有斷開(kāi)特定優(yōu)化實(shí)例的類(lèi)似編程結(jié)構(gòu)的編譯指令。再例如,編譯過(guò)程中特定的階段有現(xiàn)存編譯指令或告知編譯程序如何處理特定數(shù)據(jù)結(jié)構(gòu)的類(lèi)似編程結(jié)構(gòu)(如數(shù)據(jù)依賴(lài)圖的邊緣)。對(duì)這些編譯程序行為的細(xì)粒度控制有利于調(diào)節(jié)。如果上述方法都無(wú)效,最后的辦法是在編譯程序源可用的情況下修改編譯程序。修改編譯程序來(lái)調(diào)節(jié)性能是非常費(fèi)勁的。工程師不僅需要知道每項(xiàng)分析/優(yōu)化的內(nèi)容(同上述更先進(jìn)方法中所需要的類(lèi)似),還必須知道大量細(xì)節(jié),如算法和編譯程序的特性,如數(shù)據(jù)結(jié)構(gòu)、實(shí)施的技巧以及編譯程序中對(duì)最初設(shè)計(jì)的取舍(有時(shí)直接舍棄最初的設(shè)計(jì))。針對(duì)單個(gè)編譯程序的知識(shí)與經(jīng)驗(yàn)需要大量時(shí)間來(lái)獲取,并且經(jīng)常超出性能調(diào)節(jié)項(xiàng)目允許的時(shí)間和資源。具有諷刺意味的是,盡管在底層硬件、復(fù)雜軟件以及集成了最先進(jìn)技術(shù)的強(qiáng)大編譯程序上投入了如此多的時(shí)間和資源,但是由于探試法的一些小的不靈活性破壞了精巧的編譯過(guò)程,所生成的二進(jìn)制距離能夠充分利用硬件仍然存在很大的差距。此外,除了去熟悉編譯程序內(nèi)部的運(yùn)行之外,性能工程師們別無(wú)他法。隨著大量使用探試法和精巧的編譯過(guò)程,用現(xiàn)存的黑盒技術(shù)編譯程序工作模型來(lái)最大化性能基本上是不可能或不實(shí)際的。為了盡量發(fā)揮底層硬件的最佳性能,實(shí)施例分治策略可以從一個(gè)大型應(yīng)用程序中選出單獨(dú)的內(nèi)核(也叫做熱點(diǎn)),并用不同編譯策略對(duì)它們進(jìn)行微調(diào)。這些不同的編譯策略接著被以編譯指令的形式轉(zhuǎn)移回最初的應(yīng)用。通過(guò)為不同的熱點(diǎn)定制單獨(dú)的優(yōu)化策略,實(shí)施例基本避免了當(dāng)前編譯程序中的僵化和全局配置,并且實(shí)現(xiàn)了應(yīng)用中的不同熱點(diǎn)的最佳性能。這種定制的優(yōu)化使用了高度模塊化并且可配置的設(shè)計(jì)、對(duì)編譯程序組件的實(shí)現(xiàn)以及使編譯程序容易操作的強(qiáng)大注釋框架。實(shí)施例為編譯程序優(yōu)化提供一種簡(jiǎn)單、實(shí)用且強(qiáng)大的方法/系統(tǒng),被稱(chēng)為定制優(yōu)化(TAO)。TAO方便了優(yōu)化編譯程序和性能工程師之間的交互,從而提高了所述編譯程序的可操作性和可用性。與現(xiàn)存的黑盒式編譯方法相比,TAO使性能工程師能夠更多地控制編譯程序的運(yùn)行,并極大地降低性能調(diào)節(jié)的復(fù)雜性。一項(xiàng)實(shí)施例TAO方法包括幾個(gè)方面:對(duì)熱點(diǎn)進(jìn)行劃分和微調(diào)、高度模塊化和可配置的編譯程序框架以及能使每個(gè)優(yōu)化階段都受程序設(shè)計(jì)員或性能工程師控制的一種機(jī)制。實(shí)施例將單個(gè)熱點(diǎn)的調(diào)節(jié)結(jié)果無(wú)縫傳遞回主機(jī)程序,并且使每個(gè)優(yōu)化階段在單個(gè)熱點(diǎn)上受到控制。實(shí)施例為編譯程序的行為、編譯程序使用的靈活性以及高效的性能工程提供了細(xì)粒度的易受內(nèi)容影響的控制。實(shí)施例性能調(diào)整的方法使得編譯程序的各個(gè)組件能夠以高度可配置并且模塊化的方式進(jìn)行設(shè)計(jì),并且使用戶(hù)能夠利用指定位置的編譯程序選項(xiàng)對(duì)程序進(jìn)行注解,以指示所述編譯程序如何在編譯過(guò)程中優(yōu)化相關(guān)的代碼。這使得性能工程師能夠不用鉆研編譯程序的內(nèi)部運(yùn)行就可以對(duì)源代碼中各個(gè)重點(diǎn)進(jìn)行微調(diào),然后將局部的調(diào)整結(jié)果無(wú)縫轉(zhuǎn)移回整個(gè)應(yīng)用。實(shí)施例明顯使得性能工程變得更加快速和簡(jiǎn)單,從而縮短上市時(shí)間縮短、減少費(fèi)用支出、提高性能以及增強(qiáng)競(jìng)爭(zhēng)力。在實(shí)施例中,編譯程序的各個(gè)組件的設(shè)計(jì)與實(shí)現(xiàn),都采取高度可配置的方式,這就暴露出所有可能的取舍,或者允許用戶(hù)使用生硬的窮舉法來(lái)指示編譯程序如何行動(dòng)。實(shí)施例劃分并定位了應(yīng)用中的熱點(diǎn),對(duì)這些熱點(diǎn)進(jìn)行微調(diào),并為每個(gè)熱點(diǎn)找到特定的優(yōu)化策略,然后使用程序注釋(比如編譯指示、指令、關(guān)鍵字、數(shù)據(jù)庫(kù)以及描述文件等)來(lái)注解這些程序。每個(gè)組件接受針對(duì)各自的注釋并相應(yīng)采取行動(dòng)。實(shí)施例為代碼優(yōu)化中用戶(hù)自定義的點(diǎn)定制優(yōu)化措施,避免可能給源代碼中的一些熱點(diǎn)帶來(lái)負(fù)面影響的基本編譯配置。實(shí)施例不需要鉆研編譯程序或修改裝配的內(nèi)部運(yùn)行,就可以簡(jiǎn)化并加快對(duì)性能的調(diào)節(jié)。實(shí)施例適用于針對(duì)處理器、性能工程工具、編譯程序、編譯程序生成器、軟硬件協(xié)同設(shè)計(jì)以及處理器設(shè)計(jì)的編譯程序和編譯工具鏈。實(shí)施例TAO系統(tǒng)允許用戶(hù)對(duì)重要優(yōu)化項(xiàng)目或熱點(diǎn)進(jìn)行細(xì)粒度控制。用戶(hù)能夠?yàn)閮?yōu)化而微調(diào)探試法的參數(shù),這就使得探試的過(guò)程按照用戶(hù)的預(yù)期來(lái)發(fā)展。例如,一般會(huì)為了某個(gè)特定循環(huán)而下調(diào)成本門(mén)限,這就使編譯程序能夠提升一個(gè)特定的循環(huán)不變量,而通常按照默認(rèn)的編譯程序探試法,該不變量是不會(huì)被提升的。此外,用戶(hù)甚至可以直接指示編譯程序去忽略探試法或分析的結(jié)果而只遵從用戶(hù)的指令。例如,用戶(hù)能夠使用編譯指令來(lái)指示編譯程序忽略特定數(shù)據(jù)的依賴(lài)邊緣,該邊緣是由于進(jìn)行不完美的數(shù)據(jù)依賴(lài)分析而錯(cuò)誤生成的。為了修正編譯程序中造成虛假數(shù)據(jù)依賴(lài)邊緣的根因(如果可能的話(huà))將需要很多時(shí)間。但如果用戶(hù)確定該邊緣是虛假的并阻礙了重要的優(yōu)化,那么用戶(hù)只需要使用定制優(yōu)化就可以快速解決這個(gè)問(wèn)題。圖1示出了TAO系統(tǒng)工作模型中的性能調(diào)整過(guò)程。用于定制編譯程序優(yōu)化的方法10通常從應(yīng)用程序14中提取內(nèi)核12開(kāi)始。在實(shí)施例中,一個(gè)或多個(gè)從應(yīng)用程序14中提取出來(lái)的內(nèi)核12可以是應(yīng)用程序14中的或取自于應(yīng)用程序14的控制構(gòu)造符,直線(xiàn)代碼片段,或者函數(shù)等等。提取哪個(gè)內(nèi)核12的決定可能取決于多種不同因素或基于某種性能標(biāo)準(zhǔn),比如,例如所述內(nèi)核是否是應(yīng)用程序14的一個(gè)回路、所述內(nèi)核是性能工程師所識(shí)別出的應(yīng)用程序14的一部分還是會(huì)產(chǎn)生質(zhì)量問(wèn)題的另一部分(例如,內(nèi)核12使用編譯程序的默認(rèn)編譯策略來(lái)進(jìn)行編譯的質(zhì)量)、運(yùn)行時(shí)間長(zhǎng)短、代碼的大小以及編譯時(shí)間的長(zhǎng)短等等。所述內(nèi)核12可以以數(shù)字文件的形式存儲(chǔ)在存儲(chǔ)器中,該數(shù)字文件的大小小于整個(gè)應(yīng)用程序14。所述內(nèi)核12可以存儲(chǔ)在存儲(chǔ)器或某種存儲(chǔ)器設(shè)備中。仍然參見(jiàn)圖1,在提取了內(nèi)核12之后,使用定制優(yōu)化(TAO)16來(lái)調(diào)整內(nèi)核的性能,從而確定定制的優(yōu)化策略確實(shí)不同。所述定制的優(yōu)化策略通常不同于編譯程序的默認(rèn)優(yōu)化策略。因此,只要采用編譯程序的默認(rèn)編譯策略,特定內(nèi)核12進(jìn)行編譯的方式就會(huì)不同。作為使用定制優(yōu)化策略的結(jié)果,內(nèi)核12的編譯質(zhì)量和編譯后二進(jìn)制輸出的質(zhì)量等性能參數(shù)都可以得到提高。在一項(xiàng)實(shí)施例中,當(dāng)使用各種不同的編譯策略編譯時(shí),可以通過(guò)測(cè)試內(nèi)核的編譯質(zhì)量來(lái)對(duì)圖1中的各內(nèi)核12進(jìn)行性能調(diào)整。換句話(huà)說(shuō),一個(gè)嵌套循環(huán)使用第一編譯策略來(lái)測(cè)試內(nèi)核編譯質(zhì)量、使用第二編譯策略測(cè)試內(nèi)核編譯質(zhì)量并使用第三編譯策略測(cè)試內(nèi)核編譯質(zhì)量等等。由編譯程序提供的各編譯策略和可用策略的一些子集可能重復(fù)使用編譯程序編譯各內(nèi)核的重復(fù)過(guò)程。在一項(xiàng)實(shí)施例中,一旦內(nèi)核12被提取,計(jì)算機(jī)或其他處理設(shè)備完全地或自動(dòng)地進(jìn)行性能調(diào)節(jié)。當(dāng)使用不同編譯策略對(duì)各內(nèi)核12重復(fù)編譯之后,選擇各內(nèi)核的定制優(yōu)化策略?;谀膫€(gè)編譯策略最快地編譯內(nèi)核和哪個(gè)編譯策略最準(zhǔn)確地編譯內(nèi)核等等來(lái)選擇定制優(yōu)化策略。在一項(xiàng)實(shí)施例中,基于上述性能標(biāo)準(zhǔn)選擇定制優(yōu)化策略。在一項(xiàng)實(shí)施例中,用戶(hù)(例如,性能工程師)有機(jī)會(huì)從測(cè)試的一組編譯策略中選擇定制優(yōu)化策略。在一項(xiàng)實(shí)施例中,通過(guò)一個(gè)預(yù)定的性能指標(biāo),如哪個(gè)測(cè)試的編譯策略最快地編譯內(nèi)核12,最準(zhǔn)確地編譯內(nèi)核12等等自動(dòng)選擇定制優(yōu)化策略。當(dāng)定制優(yōu)化策略分配(也叫做,最優(yōu)化提示)給圖1中的各內(nèi)核12,應(yīng)用程序14標(biāo)注18來(lái)標(biāo)識(shí)為各個(gè)內(nèi)核12確定的定制優(yōu)化策略。在一項(xiàng)實(shí)施例中,計(jì)算機(jī)或類(lèi)似設(shè)備用于給應(yīng)用程序14標(biāo)注18。實(shí)施例中,通過(guò)在應(yīng)用程序14中直接插入編譯指示來(lái)給應(yīng)用程序14標(biāo)注18。實(shí)施例中,在應(yīng)用程序14中包括參考,指令,或指向配置文件,文本文件,數(shù)據(jù)庫(kù),或其他外部文件或源的指針來(lái)給應(yīng)用程序14標(biāo)注18。在實(shí)施例中,通過(guò)在應(yīng)用程序14中嵌入對(duì)應(yīng)各個(gè)內(nèi)核的編譯線(xiàn)索(例如,編譯指示、指令、神奇評(píng)論等等)標(biāo)注應(yīng)用程序。根據(jù)應(yīng)用程序的注解生成注釋?xiě)?yīng)用程序20。所述注釋?xiě)?yīng)用程序20用于裝載進(jìn)編譯程序。由于使用TAO,性能工程師密切關(guān)注編譯過(guò)程中與最終的二進(jìn)制文件中的重要轉(zhuǎn)換。TAO使用分治的策略:主機(jī)應(yīng)用程序中的熱點(diǎn)被標(biāo)識(shí)和挑選出來(lái)從而將內(nèi)核分離以便于調(diào)整。熱點(diǎn)可以是程序中的一個(gè)函數(shù)、循環(huán)或詞匯塊。性能調(diào)節(jié)是找到最佳策略或生成高效或預(yù)期代碼提示的過(guò)程。結(jié)果包含的信息可以微調(diào)探試法的參數(shù),打開(kāi)或關(guān)閉編譯程序的某個(gè)階段,以及在某個(gè)階段轉(zhuǎn)換不同的分析策略等等。因此,這種調(diào)節(jié)能夠影響編譯程序不同層次的進(jìn)程,指示所述編譯程序在編譯過(guò)程中如預(yù)期般運(yùn)行。顯然,各個(gè)熱點(diǎn)的策略和提示都很有可能不一樣。TAO允許性能工程師為各個(gè)熱點(diǎn)保持最佳編譯策略并將之反饋給所述編譯程序。通過(guò)為各個(gè)熱點(diǎn)定制優(yōu)化策略,TAO避免使用為某些擁有可能是對(duì)所有熱點(diǎn)來(lái)說(shuō)最好的策略的熱點(diǎn)生成次優(yōu)二進(jìn)制的策略。二階優(yōu)勢(shì)是TAO允許性能工程師安排多個(gè)編譯程序階段以達(dá)到復(fù)雜轉(zhuǎn)換次序。對(duì)內(nèi)核進(jìn)行性能調(diào)整之后,為各個(gè)熱點(diǎn)確定定制優(yōu)化提示,所述提示包括非來(lái)自默認(rèn)編譯程序的優(yōu)化策略。各個(gè)優(yōu)化提示集都與相應(yīng)熱點(diǎn)關(guān)聯(lián),因此他們能用于宿主程序的編譯。注解可以以不同的形式存在。比如,提示可以以編譯指示的形式注釋在宿主源代碼中。或者,提示還可以與配置文件或數(shù)據(jù)庫(kù)中的相應(yīng)熱點(diǎn)關(guān)聯(lián),當(dāng)編譯宿主程序時(shí)要查詢(xún)這些提示。宿主程序編譯過(guò)程中,所述編譯程序通過(guò)編譯指令或配置文件標(biāo)識(shí)帶有定制優(yōu)化的熱點(diǎn)。編譯程序通過(guò)關(guān)聯(lián)注釋提示和相應(yīng)熱點(diǎn)的IR生成工作項(xiàng)目。比如,一個(gè)循環(huán)和它的優(yōu)化提示可以是該循環(huán)優(yōu)化、軟件流水和硬件循環(huán)生成等的單個(gè)工作項(xiàng)目。類(lèi)似地,語(yǔ)法塊和函數(shù)也能是基于函數(shù)或者基于區(qū)域的優(yōu)化的工作項(xiàng)目。這些提示將用來(lái)控制關(guān)聯(lián)熱點(diǎn)的編譯程序行為。由于各熱點(diǎn)的定制提示可能覆蓋編譯過(guò)程中的不同組件,這些策略被準(zhǔn)確地分派到相應(yīng)的優(yōu)化階段。因此,所述編譯組件的設(shè)計(jì)與傳統(tǒng)編譯程序不同。圖2和圖3對(duì)帶有定制優(yōu)化的實(shí)施例編譯程序和傳統(tǒng)編譯程序進(jìn)行比較。通常,圖3的陰影特指帶有定制優(yōu)化的編譯程序。如圖2所示,應(yīng)用程序22(還不具備定制優(yōu)化)裝載進(jìn)編譯程序24。所述應(yīng)用程序22轉(zhuǎn)換為中介碼(IR),中介碼通常是與人讀格式相反的機(jī)讀格式的代碼。然后,通過(guò)一系列優(yōu)化引擎26為應(yīng)用程序22中的各函數(shù)傳遞應(yīng)用程序22(例如,opt1,opt2……optN)。換句話(huà)說(shuō),編譯程序24的優(yōu)化引擎26遍歷應(yīng)用程序22中的函數(shù)。在某些情況下,一個(gè)或更多優(yōu)化引擎26,如opt2,結(jié)構(gòu)復(fù)雜且遍歷工作項(xiàng)目列表(如,循環(huán)、地區(qū)等等)。通過(guò)優(yōu)化引擎26為各函數(shù)傳遞應(yīng)用程序22后,已編譯對(duì)象以二進(jìn)制代碼的形式輸出。參見(jiàn)圖3,帶有定制優(yōu)化16(圖1)的功能的應(yīng)用程序28裝載進(jìn)編譯程序30。應(yīng)用程序28可以從主機(jī),如,計(jì)算機(jī)存儲(chǔ)器、遠(yuǎn)程服務(wù)器、網(wǎng)絡(luò)等等裝入。應(yīng)用程序28轉(zhuǎn)換為中介碼(IR),中介碼通常是與人讀格式相反的機(jī)讀格式的代碼。此后,通過(guò)一系列優(yōu)化引擎32(例如,opt1,opt2……optN)為應(yīng)用程序28中的各函數(shù)傳遞應(yīng)用程序28。換句話(huà)說(shuō),編譯程序30的優(yōu)化引擎32遍歷應(yīng)用程序28中的函數(shù)。尤其是,圖3中的各優(yōu)化引擎32都配備適配器34,用于為已裝載入編譯程序30的已注解應(yīng)用程序28中的各內(nèi)核讀取或破譯定制優(yōu)化策略。換句話(huà)說(shuō),適配器34能夠讀取或理解加至原應(yīng)用程序的信息(如,編譯指示、指針、指令、參考信息等等)。因此,適配器34能夠指示相關(guān)優(yōu)化引擎32使用與圖2中傳統(tǒng)編譯程序24的默認(rèn)編譯策略相反的定制優(yōu)化策略編譯特定的內(nèi)核12或內(nèi)核。在實(shí)施例中,一個(gè)或更多優(yōu)化引擎32,如opt2,結(jié)構(gòu)復(fù)雜且遍歷工作項(xiàng)目列表(如,循環(huán)、地區(qū)等等)。通過(guò)優(yōu)化引擎32為各函數(shù)傳遞已注解應(yīng)用程序28優(yōu)化各函數(shù)后,已編譯對(duì)象以二進(jìn)制代碼的形式輸出。由于優(yōu)化引擎32被命令使用已注解程序28中各內(nèi)核12特定的定制優(yōu)化策略,當(dāng)不使用定制優(yōu)化16(圖1)時(shí),可以更快獲得更好質(zhì)量的編譯結(jié)果。TAO編譯的輸入是TAO注解源文件。TAO編譯程序逐一運(yùn)行在已注解源文件上。便于解釋?zhuān)瑳](méi)有描述內(nèi)部程序優(yōu)化(或IPO),但TAO方法可以輕易擴(kuò)展至IPO。內(nèi)聯(lián)、克隆、別名集消歧等許多IPO能夠從TAO提示中極大受益。TAO提示用來(lái)在編譯程序內(nèi)部生成已注解IR。在對(duì)定制優(yōu)化的支持下,每個(gè)編譯程序組件對(duì)注解在IR中注解的TAO提示進(jìn)行分析,并在啟動(dòng)最初的核心功能之前按照提示的指令進(jìn)行配置。這可以作為面向?qū)ο蟪绦蛟O(shè)計(jì)中的類(lèi)或者C語(yǔ)言中的包裝來(lái)實(shí)現(xiàn)。這確保了能為每個(gè)熱點(diǎn)配置優(yōu)化。如果一個(gè)熱點(diǎn)沒(méi)有任何相關(guān)的提示,那么編譯程序會(huì)使用默認(rèn)的策略。在TAO實(shí)施例中,提示可以包括任何可區(qū)別出優(yōu)化的項(xiàng)目,例如源文件、函數(shù)、循環(huán)、區(qū)域、基本塊,甚至圖形。只要編譯程序留下的痕跡含有足夠的信息可以讓用戶(hù)知道如何從內(nèi)部識(shí)別出提示(比如,循環(huán)的標(biāo)識(shí)、數(shù)據(jù)依賴(lài)邊界的標(biāo)識(shí)、探試法參數(shù)的名稱(chēng)等等),用戶(hù)就能夠通過(guò)這些優(yōu)化項(xiàng)目控制編譯程序的運(yùn)行,并且提示指導(dǎo)的這些配置也能夠解析用戶(hù)的輸入以及成功更新其內(nèi)部狀態(tài)?;蛘?,經(jīng)過(guò)TAO注解的原始源文件能夠被分成多個(gè)源文件,其中每個(gè)源文件都包括擁有同一組提示注釋的熱點(diǎn)。接著,將各個(gè)分解的源文件與提示注釋一起提供給編譯程序。該方法對(duì)于函數(shù)水平的熱點(diǎn)定制非常有效。在此實(shí)施例中,并不需要如前所述的每個(gè)熱點(diǎn)編譯程序的再次配置。然而,該方法不能解決進(jìn)行不同優(yōu)化定制的多個(gè)熱點(diǎn)存在于相同函數(shù)中的情況。圖4是處理系統(tǒng)40的方塊圖,可以用來(lái)實(shí)現(xiàn)下文公開(kāi)的設(shè)備和方法。特定設(shè)備可以應(yīng)用所示的所有組件,或僅組件的子集。集成水平隨設(shè)備而不同。進(jìn)一步地,設(shè)備可以包括組件的多個(gè)實(shí)例,如多個(gè)處理單元、處理器、存儲(chǔ)器、發(fā)送器、接收器等等。處理系統(tǒng)可以包括配備有一個(gè)或多個(gè)輸入/輸出設(shè)備42的處理單元,所述輸入/輸出設(shè)備包括揚(yáng)聲器、麥克風(fēng)、鼠標(biāo)、觸摸屏、按鍵、鍵盤(pán)、打印機(jī)、顯示器等等。處理單元可以包括中央處理器(CPU)44、存儲(chǔ)器46、海量存儲(chǔ)設(shè)備48、視頻適配器50以及連接至總線(xiàn)54的I/O接口52。所述總線(xiàn)54可以含有一個(gè)或多個(gè)類(lèi)型的若干總線(xiàn)架構(gòu),包括存儲(chǔ)總線(xiàn)或者存儲(chǔ)控制器、外設(shè)總線(xiàn)以及視頻總線(xiàn)等等。所述CPU44可包括任意類(lèi)型的電子數(shù)據(jù)處理器。所述存儲(chǔ)器46可包括任何類(lèi)型的系統(tǒng)存儲(chǔ)器,比如靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、同步DRAM(SDRAM)、只讀存儲(chǔ)器(ROM)或其組合等等。在實(shí)施例中,所述存儲(chǔ)器46可包括在開(kāi)機(jī)時(shí)使用的ROM以及執(zhí)行程序時(shí)使用的程序和數(shù)據(jù)存儲(chǔ)的DRAM。非暫時(shí)的海量存儲(chǔ)設(shè)備48可以包括任任意類(lèi)型存儲(chǔ)設(shè)備,所述任意類(lèi)型存儲(chǔ)設(shè)備用于存儲(chǔ)數(shù)據(jù)、程序和其他信息和,并使這些數(shù)據(jù)、程序和其他信息可通過(guò)總線(xiàn)54訪問(wèn)。所述存儲(chǔ)設(shè)備48可以包括如下項(xiàng)中的一種或多種:固態(tài)磁盤(pán)、硬盤(pán)驅(qū)動(dòng)器、磁盤(pán)驅(qū)動(dòng)器、光盤(pán)驅(qū)動(dòng)器等等。視頻適配器50和I/O接口52提供接口將外部輸入輸出設(shè)備42耦合至處理單元40。照說(shuō)明,輸入輸出設(shè)備示例包括將顯示器耦合至視頻適配器和將鼠標(biāo)/鍵盤(pán)/打印機(jī)耦合至連接I/O接口。其它設(shè)備可以耦合至處理單元40,可以利用附加的或更少的接口卡。例如,可使用串行接口卡(未示出)將串行接口提供給打印機(jī)。處理單元40可以包括一個(gè)或多個(gè)網(wǎng)絡(luò)接口56,所述網(wǎng)絡(luò)接口可包括以太網(wǎng)電纜等有線(xiàn)鏈路和/或接入節(jié)點(diǎn)或不同網(wǎng)絡(luò)的無(wú)線(xiàn)鏈路。網(wǎng)絡(luò)接口56允許處理單元通過(guò)網(wǎng)絡(luò)58與遠(yuǎn)程單元通信。比如,網(wǎng)絡(luò)接口56可以通過(guò)一個(gè)或多個(gè)發(fā)送器/發(fā)射天線(xiàn)以及一個(gè)或多個(gè)接收器/接收天線(xiàn)提供無(wú)線(xiàn)通信。在實(shí)施例中,所述處理單元40耦合到局域網(wǎng)或廣域網(wǎng)用于數(shù)據(jù)處理并與遠(yuǎn)程設(shè)備通信進(jìn)行通信,所述遠(yuǎn)程設(shè)備可包括其他處理單元、互聯(lián)網(wǎng)、遠(yuǎn)程存儲(chǔ)設(shè)施或諸如此類(lèi)。以下參考與本申請(qǐng)的主題相關(guān)。各引用以全文引用方式并入本文:·開(kāi)放多處理應(yīng)用程序接口,版本3.1(2011年7月)(http://www.openmp.org/mp-documents/OpenMP3.1.pdf.)雖然已參考說(shuō)明性實(shí)施例描述了本發(fā)明,但此描述并不旨在限制本發(fā)明。所屬領(lǐng)域的技術(shù)人員在參考該描述后,將會(huì)明白說(shuō)明性實(shí)施例的各種修改和組合,以及其他實(shí)施例。因此,希望所附權(quán)利要求書(shū)涵蓋任何此類(lèi)修改或?qū)嵤├?
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
玉环县| 汶上县| 庆云县| 天气| 永修县| 时尚| 宁晋县| 高邑县| 巢湖市| 枣强县| 新建县| 繁峙县| 大化| 营山县| 永泰县| 新化县| 秦皇岛市| 淮安市| 平湖市| 衡阳县| 滦南县| 平利县| 威宁| 荆门市| 象州县| 平武县| 龙岩市| 马公市| 屏山县| 城市| 内丘县| 福清市| 冷水江市| 诸城市| 廊坊市| 恩平市| 丰镇市| 嘉义县| 寻甸| 淅川县| 抚州市|