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

用于對非葉代碼進行基于編譯器的矢量化的系統(tǒng)和方法

文檔序號:6361812閱讀:214來源:國知局
專利名稱:用于對非葉代碼進行基于編譯器的矢量化的系統(tǒng)和方法
技術(shù)領(lǐng)域
本公開涉及計算機系統(tǒng),并且更具體地說,涉及用于使能軟件應用的通用矢量化的系統(tǒng)和方法。
背景技術(shù)
典型軟件開發(fā)范例是公知的。計算機程序員采用高級編程語言(例如,Basic, C++等)來編寫源代碼。在某一點處,程序員使用編譯器將源代碼變換成目標代碼。在變換成可執(zhí)行代碼之后(例如,在鏈接或其它編譯時間或運行時間處理之后),接著,所得目標代碼可以通過計算機或計算裝置來執(zhí)行。計算機如今具有多個處理單元,并且能夠并行地執(zhí)行指令。利用這種架構(gòu)的優(yōu)點,現(xiàn)代編譯器可以嘗試“并行化”或“矢量化”特定軟件功能,從而代替使單一處理單元順序地一次執(zhí)行一個指令,多個處理單元可以同時執(zhí)行多個指令。在編譯處理期間,編譯器分析軟件功能以確定是否存在針對矢量化的任何障礙。一個這種障礙例如是存在真實數(shù)據(jù)依賴關(guān)系(dependency)。這在當前指令引用通過執(zhí)行在前指令所獲取的數(shù)據(jù)時發(fā)生。在該情況下,較后指令僅可以在較早指令之后執(zhí)行,并由此兩個指令不能并行執(zhí)行。另一潛在障礙是存在函數(shù)調(diào)用。例如,如果要編譯的函數(shù)對外部函數(shù)進行調(diào)用,則編譯器不能夠矢量化該調(diào)用函數(shù)。

發(fā)明內(nèi)容
本公開提供了用于使能通用矢量化軟件應用的系統(tǒng)和方法。為此,在此公開的系統(tǒng)和方法提供對擴展編譯器的能力以矢量化函數(shù)的依賴關(guān)系和/或接口的表達。在一非限制實施例中,編譯器可以在其編譯期間檢查存儲器和/或一函數(shù)(“被調(diào)用函數(shù)”)內(nèi)的數(shù)據(jù)依賴關(guān)系,并且在依賴關(guān)系數(shù)據(jù)庫(舉例來說,如依賴關(guān)系文件)中表達那些依賴關(guān)系。一旦編譯,被調(diào)用函數(shù)就可以例如變?yōu)閹旌瘮?shù)等。在稍后的時間點,可以創(chuàng)建另一函數(shù)(“調(diào)用函數(shù)”),以使其針對被調(diào)用函數(shù)進行調(diào)用。在編譯調(diào)用函數(shù)期間,編譯器可以訪問與被調(diào)用函數(shù)相關(guān)聯(lián)的依賴關(guān)系文件,并且可以識別其依賴關(guān)系。基于被調(diào)用函數(shù)的依賴關(guān)系,編譯器可以進行有關(guān)是否矢量化調(diào)用函數(shù)的判定。另外或另選的是,編譯器可以判定僅矢量化調(diào)用函數(shù)的一部分。與其它可能方式相比,通過使用依賴關(guān)系文件而提供的可見性可以允許編譯器矢量化更高百分比的函數(shù)。例如,實現(xiàn)依賴關(guān)系文件允許矢量化包括非葉循環(huán)(non-leaf loop)(即,對源代碼不可見的外部函數(shù)進行調(diào)用的循環(huán))的函數(shù)。因為現(xiàn)今大多數(shù)軟件函數(shù)包括一個或多個非葉循環(huán),所以這些系統(tǒng)和方法可以增加可以被應用至任何應用的矢量化的量。在另一非限 制實施例中,編譯器可以根據(jù)單一源代碼描述生成函數(shù)的標量和矢量形式。函數(shù)的標量形式可以使用如由源代碼最初指定的標量接口。同時,函數(shù)的矢量形式可以實現(xiàn)針對該函數(shù)的、用于接收矢量參數(shù)和生成矢量返回值的矢量接口。例如,矢量接口可以在與函數(shù)相關(guān)聯(lián)的依賴關(guān)系文件中暴露。這種另選矢量接口的存在例如允許編譯器從矢量化循環(huán)內(nèi)進行矢量函數(shù)調(diào)用,而非從矢量化循環(huán)內(nèi)進行多個串行化標量函數(shù)調(diào)用。在此公開的技術(shù)的各種組合還準許函數(shù)的矢量化不包含循環(huán),其與公認知識相反,并且仍提供許多優(yōu)點。特別地講,這些技術(shù)可以增加軟件應用中的總矢量化的量。


圖1是例示根據(jù)某些實施例的、可操作以實現(xiàn)用于使能實現(xiàn)軟件應用的通用矢量化的技術(shù)的計算機系統(tǒng)的框圖。圖2是例示根據(jù)某些實施例的、在通過計算機系統(tǒng)執(zhí)行時可以生成可執(zhí)行代碼的編譯器的框圖。圖3示出了例示根據(jù)某些實施例的、表達依賴關(guān)系數(shù)據(jù)庫中的依賴關(guān)系的方法的流程圖。圖4示出了例示根據(jù)某些實施例的、矢量化函數(shù)的方法的流程圖。圖5示出了例示根據(jù)某些實施例的、全函數(shù)矢量化方法的流程圖。圖6示出了例示根據(jù)某些實施例的、利用所矢量化函數(shù)的方法的流程圖。雖然易受各種修改和另選形式,但在本說明書中討論的具體實施例在附圖中通過示例進行了示出,并且在此將進行詳細描述。然而,應當明白,附圖和詳細描述不是旨在將本公開限制成所公開的特定形式,但與此相反,本發(fā)明要覆蓋落入如所附權(quán)利要求書所限定的本公開的精神和范圍內(nèi)的所有修改例、等同物以及另選例。
具體實施例方式介紹下面的說明書首先討論例示計算機系統(tǒng)或裝置。本說明書還描述了例示編譯器,其可以被配置成執(zhí)行和/或生成用于計算機系統(tǒng)的可執(zhí)行代碼。接著,本說明書提出了用于使能實現(xiàn)非葉循環(huán)和全函數(shù)矢量化的幾種技術(shù)。例示性計算機系統(tǒng)圖1描繪了根據(jù)某些實施例的、可操作以實現(xiàn)用于使能實現(xiàn)軟件應用的通用矢量化的技術(shù)的例示計算機系統(tǒng)。在該非限制例中,計算機系統(tǒng)100包括經(jīng)由I/O接口 130耦接至存儲器120的一個或多個處理器110a-110n。計算機系統(tǒng)100還包括耦接至I/O接口130的網(wǎng)絡接口 140和存儲接口 150。存儲接口 150將外部存儲裝置155連接至I/O接口130。而且,網(wǎng)絡接口 140可以將系統(tǒng)100連接至網(wǎng)絡(未示出)或者連接至另一計算機系統(tǒng)(未示出)。在一些實施例中,計算機系統(tǒng)100可以是僅包括一個處理器IlOa的單一處理器系統(tǒng)。在其它實施例中,計算機系統(tǒng)100可以包括兩個或更多個處理器110a-110n。處理器IlOa-1lOn可以包括能夠執(zhí)行指令的任何處理器。例如,處理器IlOa-1lOn可以是實現(xiàn)任何合適指令集架構(gòu)(ISA)的通用或嵌入式處理器,舉例來說,如x86、PowerPC , SPARC 、或MIPStmI SAs0在一實施例中,處理器IlOa-1lOn可以包括在美國專利N0.7617496和美國專利N0.7395419中描述的Macroscalar處理器的各種特征。系統(tǒng)存儲器120可以被配置成存儲可通過處理器IlOa-1lOn訪問的指令和數(shù)據(jù)。例如,系統(tǒng)存儲器120可以是靜態(tài)隨機訪問存儲器(SRAM)、同步動態(tài)RAM (SDRAM)、非易失性/閃速型存儲器、或者任何其它任何合適類型的存儲器技術(shù)。實現(xiàn)下面詳細描述的希望功能或應用的程序指令和/或數(shù)據(jù)的一部分可以被示出存儲在系統(tǒng)存儲器120內(nèi)。另外或另選的是,那些程序指令和/或數(shù)據(jù)的一部分可以被存儲在存儲裝置155、一個或多個處理器IlOa-1lOn內(nèi)的高速緩沖存儲器中、或者可以經(jīng)由網(wǎng)絡接口 140從網(wǎng)絡抵達。I/O接口 130可操作以管理處理器IlOa-1lOru系統(tǒng)存儲器120以及該系統(tǒng)中的或接合至其的任何裝置(包括網(wǎng)絡接口 140、存儲接口 150或其它外圍接口)之間的數(shù)據(jù)通信。例如,I/O接口 130可以將來自一個組件的數(shù)據(jù)或控制信號轉(zhuǎn)換成適于供另一組件使用的格式。在一些實施例中,I/O接口 130可以包括對通過各種類型外圍總線接合的裝置的支持,舉例來說,如外圍組件互連(PCI)總線或通用串行總線(USB)。而且,在一些實施例中,I/O接口 130的一些或全部功能可以并入處理器110a-110n。網(wǎng)絡接口 140被配置成允許數(shù)據(jù)在計算機系統(tǒng)100與接合至網(wǎng)絡的其它裝置(舉例來說,如其它計算機系統(tǒng))之間交換。例如,網(wǎng)絡接口 140可以支持經(jīng)由有線或無線通用數(shù)據(jù)網(wǎng)絡、電信/電話網(wǎng)絡、諸如Fibre Channel SAN等的存儲區(qū)域網(wǎng)絡等的通信。存儲接口 150被配置成允許計算機系統(tǒng)100與諸如存儲裝置155的存儲裝置接口連接。存儲接口 150可以支持以下標準存儲接口:如高級技術(shù)附加數(shù)據(jù)包接口(ATAPI)標準(其還可以被稱為集成驅(qū)動電子設備(IDE))的一個或多個合適版本、小型計算機系統(tǒng)接口(SCSI)標準、IEEE 1394 “Firewire”標準、USB標準、或者適于互連海量存儲裝置與計算機系統(tǒng)100的另一標準或?qū)S薪涌凇@?,存儲裝置155可以包括可以固定或可去除的磁性、光學或固態(tài)介質(zhì)。存儲裝置155還可以對應于硬盤驅(qū)動器或驅(qū)動器陣列、CD或DVD驅(qū)動器、或者基于非易失性存儲器(例如,閃速存儲器)的裝置。系統(tǒng)存儲器120和存儲裝置155表示被配置成存儲程序指令和數(shù)據(jù)的計算機可訪問或計算機可讀存儲介質(zhì)的例示性實施例。在其它實施例中,程序指令和/或數(shù)據(jù)可以在不同類型的計算機可訪問介質(zhì)上接收、發(fā)送或存儲。一般來說,計算機可訪問介質(zhì)或存儲介質(zhì)可以包括任何類型的海量存儲介質(zhì)或存儲器介質(zhì),如磁性介質(zhì)或光學介質(zhì)。計算機可訪問介質(zhì)或存儲介質(zhì)還可以包括任何易失性或非易失性介質(zhì),如RAM (例如,SDRAM、DDRSDRAM、RDRAM、SRAM等)、ROM等,無論作為系統(tǒng)存儲器120還是另一類型存儲器包括在計算機系統(tǒng)100中。經(jīng)由計算機可訪問介質(zhì)存儲的程序指令和數(shù)據(jù)可以通過傳輸介質(zhì)或諸如電信號、電磁信號或數(shù)字信號的信號傳輸,其可以經(jīng)由諸如網(wǎng)絡和/或無線鏈路的通信介質(zhì)來輸送,如可以經(jīng)由網(wǎng)絡接口 140實現(xiàn)。典型地講,計算機系統(tǒng)100可以采取臺式或膝上型計算機的形式。然而,如根據(jù)本公開將容易理解,計算機系統(tǒng)100可以是能夠執(zhí)行軟件的任何合適裝置。例如,計算機系統(tǒng)100可以是平板計算機、電話等。例示性編譯器一般而言,編譯器可以對應于被配置成將源代碼翻譯或變換成目標代碼的軟件應用(例如,計算機可執(zhí)行指令中的一個或多個模塊),該源代碼可以采用諸如C、c++或任何其它合適編程語言的高級編程語言來表示。表達源代碼的語言可以被稱為源代碼語言或簡稱為源語言。典型地講,目標代碼可以采用適于供目標計算架構(gòu)處理的指令和數(shù)據(jù)的形式來表示,盡管在一些實施例中,可以針對所生成的目標代碼執(zhí)行附加處理((例如,鏈接),以將目標代碼變換成機器可執(zhí)行代碼。在各種實施例中,這種附加處理可以通過編譯器或者通過分離應用來執(zhí)行。目標代碼可以采用機器可讀形式(例如,二進制形式)、采用可需要附加處理以生成機器可讀代碼的人可讀形式(例如,匯編語言),或者采用人可讀形式和機器可讀形式的組合來表示。針對目標代碼的目標架構(gòu)可以和通過處理器IlOa-1ln所實現(xiàn)的、其上編譯器被配置成執(zhí)行的ISA相同。然而,在某些情況下,編譯器可以被配置成生成針對其上編譯器執(zhí)行(“交叉編譯器”)的ISA相比不同的ISA的目標代碼。圖2描繪了根據(jù)某些實施例的、在通過計算機系統(tǒng)100或另一合適計算機系統(tǒng)執(zhí)行時可以生成可執(zhí)行代碼的例示性編譯器。編譯器200包括前端220和后端230,其又可以包括優(yōu)化器240和代碼生成器250。如上所示,前端220接收源代碼210,而后端230生成目標代碼,舉例來說,如標量目標代碼260、矢量化目標代碼270或其組合。編譯器200還可以生成與目標代碼260和/或270中的一個或多個相關(guān)聯(lián)的依賴關(guān)系數(shù)據(jù)庫280。雖然源代碼210通常采用高級編程語言編寫,但源代碼210可以另選地對應于諸如匯編語言的機器級語言。例如,編譯器200可以被配置成應用其最優(yōu)化技術(shù),以匯編除了采用高級編程語言編寫的代碼以外的語言代碼。而且,編譯器200可以包括前端220的許多不同實例,其皆被配置成處理采用不同相應語言編寫的源代碼210,并且生成供后端230處理的類似中間表示。在這種實施例中,編譯器200可以有效地充任多語言編譯器。在一實施例中,前端220可以被配置成執(zhí)行源代碼210的初步處理,以確定源在詞匯上和/或語法上是否正確,并且執(zhí)行適于準備源代碼210以供后端230進一步處理的任何變換。例如,前端220可以被配置成處理存在于源代碼210內(nèi)的任何編譯器指令,如可以導致源代碼210的某些部分被包括在編譯處理中而其它部分不包括在其中的條件編譯指令。前端220還可以不同地被配置成將源代碼210轉(zhuǎn)換成記號(tokens)(例如,根據(jù)由源語言定義的空白和/或其它分隔符),確定源代碼210是否包括禁止為源語言的任何字符或記號,以及確定所得記號流是否服從按源語言定義的合式表達的語法規(guī)則。在不同情形下,前端220可以被配置成執(zhí)行這些處理活動的不同組合,可以省略上述特定動作,或者可以包括不同動作,根據(jù)前端220的實現(xiàn)和前端220的目標源語言,例如,如果源語言未提供用于定義編譯器指令的語法,則前端220可以省略包括掃描用于編譯器指令的源代碼210的處理動作。如果前端220在處理源代碼210期間遭遇錯誤,則其可以異常中止處理并且報告錯誤(例如,通過將錯誤信息寫入至日志文件或者顯示器)。否則,在充分分析源代碼210的語法和語義內(nèi)容時,前端220可以向后端230提供源代碼210的中間表示。一般而言,該中間表示可以包括表示源代碼210的結(jié)構(gòu)和語義內(nèi)容的一個或多個數(shù)據(jù)結(jié)構(gòu),如語法樹、圖表、符號表或其它合適數(shù)據(jù)結(jié)構(gòu)。該中間表示可以被配置成保存識別源代碼210的語法和語義特征的信息,并且還可以包括通過剖析和分析源代碼210而生成的附加注釋信息。例如,該中間表示可以包括明確地識別源代碼210的不同塊或段之間的控制關(guān)系的控制流程圖。這種控制流程信息可以被后端230采用,以例如確定,可以怎樣重新布置(例如,通過優(yōu)化器240)源代碼210的功能部分,以在保存源代碼210內(nèi)的必需執(zhí)行順序關(guān)系的同時改進性能。后端230通??梢员慌渲贸蓪⒅虚g表示變換成標量代碼260、矢量化代碼270、或兩者的組合中的一個或多個。具體來說,在所示實施例中,優(yōu)化器240可以被配置成試圖變換中間表示,以改進所得標量代碼260或矢量化代碼270的某一方面。例如,優(yōu)化器240可以被配置成分析中間表示以識別存儲器或數(shù)據(jù)依賴關(guān)系。在一些實施例中,優(yōu)化器240可以被配置成執(zhí)行各種其它類型的代碼優(yōu)化,如,矢量化、循環(huán)優(yōu)化(例如,循環(huán)融合、循環(huán)展開等)、數(shù)據(jù)流優(yōu)化(例如,共同子表達式消除、常量折疊等),或任何其它合適的優(yōu)化技術(shù)。優(yōu)化器240還可以被配置成生成依賴關(guān)系數(shù)據(jù)庫280。如下更詳細描述的,依賴關(guān)系數(shù)據(jù)庫280可以表達對存儲器和/或源代碼210內(nèi)的數(shù)據(jù)依賴關(guān)系的指示。另外或另選的是,連同源代碼210的矢量化,依賴關(guān)系數(shù)據(jù)庫280可以暴露與矢量化目標代碼270相關(guān)聯(lián)的矢量接口。代碼生成器250可以被配置成處理如通過優(yōu)化器206變換的中間表示,以便生成標量代碼260、矢量化代碼270、或者兩類代碼的組合。例如,代碼生成器250可以被配置成生成由目標架構(gòu)的ISA定義的矢量化機器指令,以使得由實現(xiàn)目標架構(gòu)的處理器(例如,處理器IlOa-1lOn之一,或者不同處理器)執(zhí)行所生成指令可以實現(xiàn)由源代碼210指定的功能行為。在一實施例中,代碼生成器250還可以被配置成生成與可能不是源代碼210中所固有的操作相對應的指令,但其在優(yōu)化處理期間可以由優(yōu)化器240添加。在其它實施例中,編譯器200可以被分區(qū)成與所示那些組件相比更多、更少或不同的組件。例如,編譯器200可以包括鏈接器(未示出),其被配置成采取一個或多個目標文件或庫作為輸入,并且組合它們以生成單一(通??蓤?zhí)行的)文件。另選的是,該鏈接器可以是與編譯器200分離的實體。如上所述,編譯器200的組件中的任一個,以及所執(zhí)行的由此包括下面參照圖3-6描述的那些的方法或技術(shù)中的任一種,可以部分地或者整體地被實現(xiàn)為存儲在合適計算機可訪問存儲介質(zhì)內(nèi)的軟件代碼。源代碼210例如可以表示軟件功能或算法。所得目標代碼260和/或270例如可以是可以被其它函數(shù)調(diào)用的庫或外部函數(shù)。下面,對在操作期間(并且具體地說,在其矢量化操作期間)由編譯器200采用的例示性技術(shù)進行更詳細討論。非葉循環(huán)的矢量化許多現(xiàn)代計算機具有通過并發(fā)地執(zhí)行兩個或更多個不同操作來執(zhí)行計算工作量的某一類型并行處理的能力。例如,超標量處理器可以允許計算機嘗試一次執(zhí)行多個獨立指令。通稱為“矢量計算”(其可以被視為并行計算的特定情況)的另一技術(shù)允許計算機嘗試執(zhí)行一次對多個數(shù)據(jù)項操作的單一指令。矢量計算的各種示例可以在該單一指令、現(xiàn)今在各種處理器中可用的多個數(shù)據(jù)(SMD)指令集中找到,例如,包括用于PowerPC 處理器的IBM的AltiVec 和SPE 指令集擴展,和Intel的MMX 和SSE 指令集擴展的變型。這種SIMD指令是可以被矢量化編譯器作為目標的矢量指令的示例,盡管其它類型的矢量指令或運算(包括可變長度矢量運算、預測(predicated)矢量運算、對矢量和標量/立即(immediates)的組合操作的矢量運算)也是可能并且可以設想的。一般而言,將源代碼變換成矢量化目標代碼的處理可以被稱為“矢量化”。當利用編譯器執(zhí)行時(例如,與手工矢量化源代碼相反),可以將矢量化稱為“編譯器自動矢量化”。自動矢量化的一個特定類型是循環(huán)自動矢量化。循環(huán)自動矢量化可以將在多個數(shù)據(jù)項上迭代的過程循環(huán)轉(zhuǎn)換成能夠在分離處理單元(例如,圖1中的計算機系統(tǒng)100的處理器IlOa-1lOn,或者處理器內(nèi)的分離功能單元)內(nèi)并發(fā)地處理多個數(shù)據(jù)項的代碼。例如,為將兩個數(shù)字陣列A[]和B[]相加在一起,過程循環(huán)可以通過這些陣列迭代,在每一個迭代期間將一對陣列組元相加。當編譯這種循環(huán)時,矢量化編譯器可以利用目標處理器實現(xiàn)能夠并發(fā)地處理數(shù)量固定或可變的矢量組元的矢量運算的事實。例如,編譯器可以自動矢量化陣列相加循環(huán),以使得在每一個迭代,并發(fā)地相加陣列A[]和B[]的多個組元,縮減為完成該相加所需的迭代數(shù)。典型程序在這種循環(huán)內(nèi)花費其顯著量的執(zhí)行時間。這樣,自動矢量化循環(huán)可以產(chǎn)生性能改進而不需要程序員干涉。在一些實施例中,編譯器自動矢量化受限于葉循環(huán),S卩,不對其它函數(shù)進行調(diào)用的循環(huán)。非葉循環(huán)的矢量化(即,對其它函數(shù)進行調(diào)用的那些)因外部函數(shù)調(diào)用的副作用通常不清楚(opaque)而通常非常困難,尤其是在它們的源代碼不可用于過程間分析時候,舉例
來說,如利用庫的情況。出于例示的目的,考慮下面的循環(huán):
權(quán)利要求
1.一種方法,包括: 通過一個或多個計算機來執(zhí)行以下步驟: 識別調(diào)用函數(shù),該調(diào)用函數(shù)包括針對被調(diào)用函數(shù)的調(diào)用; 訪問與被調(diào)用函數(shù)相關(guān)聯(lián)的永久依賴關(guān)系數(shù)據(jù)庫,其中,該永久依賴關(guān)系數(shù)據(jù)庫指示被調(diào)用函數(shù)的被表達的依賴關(guān)系,其中,該被表達的依賴關(guān)系指示被調(diào)用函數(shù)是僅讀取數(shù)據(jù)項、僅寫入數(shù)據(jù)項、還是既讀取又寫入數(shù)據(jù)項;以及 至少部分地基于被表達的依賴關(guān)系生成調(diào)用函數(shù)是否與被調(diào)用函數(shù)交互的確定。
2.根據(jù)權(quán)利要求1所述的方法,其中,針對被調(diào)用函數(shù)的調(diào)用發(fā)生在調(diào)用函數(shù)的循環(huán)內(nèi)。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述執(zhí)行還包括: 從永久依賴關(guān)系數(shù)據(jù)庫確定被調(diào)用函數(shù)的矢量版本的存在;并且 在調(diào)用函數(shù)內(nèi),將針對被調(diào)用函數(shù)的標量版本的調(diào)用變換成針對被調(diào)用函數(shù)的矢量版本的調(diào)用。
4.根據(jù)權(quán)利要求1所述的方法,其中,所述執(zhí)行還包括:基于由永久依賴關(guān)系數(shù)據(jù)庫指示的下列項中的一個或多個來確定是否矢量化調(diào)用函數(shù)的至少一部分:變量由調(diào)用函數(shù)讀取還是寫入、變量對于調(diào)用函數(shù)是公共的還是私有的、以及與變量相關(guān)聯(lián)的尋址模式。
5.根據(jù)權(quán)利要求1所述的方法,其中,所述執(zhí)行還包括: 編譯與一函數(shù)相對應的源代碼; 在編譯期間,識別該函數(shù)對數(shù)據(jù)項的被表達的依賴關(guān)系,其中,該被表達的依賴關(guān)系指示該函數(shù)是僅讀取數(shù)據(jù)項、僅寫入數(shù)據(jù)項、還是既讀取又寫入數(shù)據(jù)項;以及 將對被表達的依賴關(guān)系的指示存儲在永久依賴關(guān)系數(shù)據(jù)庫中。
6.根據(jù)權(quán)利要求5所述的方法,其中,存儲對被表達的依賴關(guān)系的指示包括:除了存儲變量的名稱以外,還將對以下各項中的一個或多個的指示存儲在永久依賴關(guān)系數(shù)據(jù)庫中:變量對于該函數(shù)是公共的還是私有的、以及與變量相關(guān)聯(lián)的尋址模式。
7.根據(jù)權(quán)利要求5所述的方法,其中,所述執(zhí)行還包括:生成該函數(shù)具有矢量接口的矢量版本,并且將對矢量接口的指示存儲在永久依賴關(guān)系數(shù)據(jù)庫中。
8.根據(jù)權(quán)利要求5所述的方法,其中,所述執(zhí)行還包括:在函數(shù)的編譯時創(chuàng)建永久依賴關(guān)系數(shù)據(jù)庫。
9.根據(jù)權(quán)利要求5所述的方法,其中,存儲指示包括:表達以下各項中的一個或多個:與該函數(shù)內(nèi)的數(shù)據(jù)項相關(guān)聯(lián)的尋址模式、與該函數(shù)內(nèi)的數(shù)據(jù)項相關(guān)聯(lián)的公共或私有限定符、與該函數(shù)相關(guān)聯(lián)的推測安全指示符、以及與函數(shù)內(nèi)的數(shù)據(jù)項相關(guān)聯(lián)的混疊指示符。
10.根據(jù)權(quán)利要求5所述的方法,其中,存儲指示包括:表達以下各項中的一個或多個:對該函數(shù)向被指向?qū)ο髢?nèi)的已知偏移讀取還是寫入的指示、對該函數(shù)向一對象內(nèi)的可變偏移讀取還是寫入的指示、或者對該函數(shù)向一對象內(nèi)的未知偏移讀取還是寫入的指示。
11.根據(jù)權(quán)利要求1或權(quán)利要求5所述的方法,其中,數(shù)據(jù)項不是經(jīng)由函數(shù)的編程接口傳遞到該函數(shù)的參數(shù)。
12.根據(jù)權(quán)利要求1所述的方法,其中,所述執(zhí)行還包括:至少部分地基于所述確定來矢量化調(diào)用函數(shù)內(nèi)的代碼。
13.根據(jù)權(quán)利要求12所述的方法,其中,所述矢量化調(diào)用函數(shù)內(nèi)的代碼還包括:至少部分地基于所述確定來矢量化調(diào)用函數(shù)內(nèi)的循環(huán)。
14.根據(jù)權(quán)利要求12所述的方法,其中,所述矢量化調(diào)用函數(shù)內(nèi)的代碼還包括:將所述調(diào)用修改成引用被調(diào)用函數(shù)的矢量版本。
15.根據(jù)權(quán)利要求1所述的方法,其中,所述操作還包括: 根據(jù)對調(diào)用函數(shù)是否與被調(diào)用函數(shù)交互的確定,至少部分地基于被表達的依賴關(guān)系來確定是否矢量化調(diào)用函數(shù)的至少一部分;并且 響應于確定矢量化調(diào)用函數(shù)的至少一部分,生成當被執(zhí)行時使矢量運算針對調(diào)用函數(shù)內(nèi)所引用的多個數(shù)據(jù)項并發(fā)執(zhí)行的矢量代碼。
16.根據(jù)權(quán)利要求15所述的方法,其中,被調(diào)用函數(shù)包括預編譯代碼內(nèi)的函數(shù),并且其中,所述確定操作確定矢量化調(diào)用函數(shù)的至少一部分,即使預編譯代碼的源代碼不可用。
17.根據(jù)權(quán)利要求1所述的方法,其中,該調(diào)用函數(shù)包括非葉循環(huán),該非葉循環(huán)包括針對被調(diào)用函數(shù)的調(diào)用。
18.根據(jù)權(quán)利要求17所述的方法,其中,所述執(zhí)行還包括: 矢量化非葉循環(huán)的第一部分;并且 串行化非葉循環(huán)的第二部分。
19.一種其中存儲有程序指令的計算機可讀存儲介質(zhì),所述程序指令響應于計算機系統(tǒng)的執(zhí)行,使該計算機系統(tǒng)執(zhí)行實現(xiàn)根據(jù)權(quán)利要求1-18中的任一項所述的方法的操作。
20.—種系統(tǒng),包括: 一個或多個存儲器,其在操作期間,存儲指令;和 一個或多個處理器,其在操作期間,從所述一個或多個存儲器檢索指令,并且執(zhí)行該指令以使該系統(tǒng)執(zhí)行實現(xiàn)根據(jù)權(quán)利要求1-18中的任一項所述的方法的操作。
全文摘要
本發(fā)明描述了用于軟件應用的矢量化的系統(tǒng)和方法。在一些實施例中,源代碼依賴關(guān)系可以按可以擴展編譯器的能力以矢量化否則為標量的函數(shù)的方式來表達。例如,當編譯被調(diào)用函數(shù)時,編譯器可以識別被調(diào)用函數(shù)與除了傳遞至該被調(diào)用函數(shù)的參數(shù)以外的其它變量的依賴關(guān)系。該編譯器可以記錄這些依賴關(guān)系,例如,記錄在依賴關(guān)系文件中。稍后,當編譯調(diào)用該被調(diào)用函數(shù)的調(diào)用函數(shù)時,同一(或另一)編譯器可以引用先前識別的依賴關(guān)系,并將它們用于確定是否和怎樣矢量化調(diào)用函數(shù)。具體來說,這些技術(shù)可以輔助非葉循環(huán)的矢量化。因為非葉循環(huán)相對常見,所以在此描述的技術(shù)可以增加可以被應用至許多應用的矢量化的量。
文檔編號G06F9/45GK103119561SQ201180045583
公開日2013年5月22日 申請日期2011年9月7日 優(yōu)先權(quán)日2010年9月23日
發(fā)明者J·E·戈尼諾 申請人:蘋果公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阜新| 祁连县| 迁安市| 慈利县| 漠河县| 岱山县| 南丹县| 邵阳县| 新巴尔虎左旗| 上杭县| 正镶白旗| 康平县| 浮梁县| 潮安县| 永川市| 滁州市| 家居| 汶川县| 恩施市| 五原县| 元氏县| 子长县| 桦川县| 疏勒县| 休宁县| 宁德市| 黄冈市| 香港 | 万全县| 泰安市| 福清市| 高唐县| 瑞昌市| 信丰县| 洛南县| 白山市| 兰溪市| 海门市| 虹口区| 榆树市| 乐业县|