專利名稱:用于執(zhí)行點(diǎn)積運(yùn)算的指令和邏輯的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及執(zhí)行數(shù)學(xué)運(yùn)算的處理裝置及相關(guān)軟件和軟件序列的領(lǐng)域。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)已經(jīng)越來(lái)越深入我們的社會(huì)。計(jì)算機(jī)的處理能力已經(jīng)提高了各種職業(yè)的工人的效率和生產(chǎn)力。由于購(gòu)買和擁有計(jì)算機(jī)的費(fèi)用持續(xù)下降,所以越來(lái)越多的消費(fèi)者能夠利用更新、更快的機(jī)器。此外,許多人由于使用自由而樂(lè)于使用筆記本電腦。移動(dòng)計(jì)算機(jī)使用戶可在離開(kāi)辦公室或旅行時(shí)輕松地傳輸他們的數(shù)據(jù)以及利用所述移動(dòng)計(jì)算機(jī)進(jìn)行工作。這種情況在營(yíng)銷人員、公司管理人員甚至學(xué)生中是常見(jiàn)的。隨著處理器技術(shù)的進(jìn)步,還產(chǎn)生了更新的軟件代碼來(lái)在具有這些處理器的機(jī)器上運(yùn)行。用戶一般預(yù)期并要求來(lái)自他們的計(jì)算機(jī)的更高性能,而不管所使用的軟件類型。從處理器內(nèi)實(shí)際執(zhí)行的指令和操作的種類中可能產(chǎn)生一個(gè)這樣的問(wèn)題。根據(jù)操作的復(fù)雜度和/或所需電路的類型,某些類型的操作需要更多時(shí)間來(lái)完成。這提供了優(yōu)化在處理器內(nèi)部執(zhí)行某些復(fù)雜操作的方式的機(jī)會(huì)。十多年來(lái),媒體應(yīng)用推動(dòng)了微處理器的發(fā)展。實(shí)際上,媒體應(yīng)用推動(dòng)了近年來(lái)的大多數(shù)計(jì)算升級(jí)。這些升級(jí)主要在消費(fèi)者方面發(fā)生,但是,為了娛樂(lè)性增強(qiáng)的教育和通信目的,在企業(yè)方面也看到顯著的進(jìn)步。然而,未來(lái)的媒體應(yīng)用需要更高的計(jì)算要求。因此,將來(lái)的個(gè)人計(jì)算體驗(yàn)在視聽(tīng)效果方面將更為豐富,并且更容易使用,更重要的是,計(jì)算將與通信融合。因此,圖像的顯示以及統(tǒng)稱為內(nèi)容的音頻和視頻數(shù)據(jù)的回放已經(jīng)逐漸成為當(dāng)前計(jì)算設(shè)備的流行應(yīng)用。濾波和卷積操作是對(duì)內(nèi)容數(shù)據(jù)、如圖像音頻和視頻數(shù)據(jù)執(zhí)行的最常見(jiàn)操作的一部分。這類操作是計(jì)算密集的,但是提供可通過(guò)采用各種數(shù)據(jù)存儲(chǔ)設(shè)備(如單指令多數(shù)據(jù)(SMD)寄存器)的有效實(shí)現(xiàn)來(lái)利用的高級(jí)數(shù)據(jù)并行性。多個(gè)當(dāng)前的體系結(jié)構(gòu)還需要多個(gè)操作、指令或子指令(通常稱作“微操作”或“μop”)來(lái)對(duì)多個(gè)操作數(shù)執(zhí)行各種數(shù)學(xué)運(yùn)算,由此減小吞吐量并增加執(zhí)行數(shù)學(xué)運(yùn)算所需的時(shí)鐘周期數(shù)量。例如,可能需要由多個(gè)指令組成的指令序列來(lái)執(zhí)行產(chǎn)生點(diǎn)積所必需的一個(gè)或多個(gè)運(yùn)算,包括將由處理裝置、系統(tǒng)或計(jì)算機(jī)程序內(nèi)的各種數(shù)據(jù)類型所表示的兩個(gè)或兩個(gè)以上數(shù)值之積相加。但是,這類現(xiàn)有技術(shù)可能需要許多處理周期,并且可能使處理器或系統(tǒng)消耗不必要的功率以產(chǎn)生點(diǎn)積。此外,一些現(xiàn)有技術(shù)可能在可進(jìn)行操作的操作數(shù)的數(shù)據(jù)類型方面受到限制。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于執(zhí)行點(diǎn)積運(yùn)算的處理器,包括
解碼器,用于對(duì)單指令多數(shù)據(jù) (SIMD)點(diǎn)積指令進(jìn)行解碼,該點(diǎn)積指令指定存儲(chǔ)包括第一數(shù)據(jù)值和第三數(shù)據(jù)值的第一打包操作數(shù)的第一寄存器,存儲(chǔ)包括第二數(shù)據(jù)值和第四數(shù)據(jù)值的第二打包操作數(shù)的第二寄存器,和控制值;以及邏輯,對(duì)解碼的SIMD點(diǎn)積指令作出響應(yīng),取決于所述控制值從所述第一打包操作數(shù)和所述第二打包操作數(shù)中選擇各自的數(shù)據(jù)值,以便將它們的乘積包括在點(diǎn)積中,該邏輯包括將所選的第一數(shù)據(jù)值和第二數(shù)據(jù)值相乘以產(chǎn)生第一乘積的第一乘法器、將所選的第三數(shù)據(jù)值和第四數(shù)據(jù)值相乘以產(chǎn)生第二乘積的第二乘法器,該邏輯還包括至少將所述第一乘積和所述第二乘積相加在一起以產(chǎn)生和數(shù)的加法器,并取決于控制值將和數(shù)或空值存儲(chǔ)為目標(biāo)寄存器的第一打包值,以及取決于控制值將和數(shù)或空值存儲(chǔ)為目標(biāo)寄存器的第二打包值。根據(jù)本發(fā)明的另一方面,提供了一種用于按照由點(diǎn)積指令指示的控制值執(zhí)行單指令多數(shù)據(jù)(SIMD)點(diǎn)積指令的方法,該方法包括按照所述控制值,從第一打包操作數(shù)和第二打包操作數(shù)中選擇各自的數(shù)據(jù)元素以便將它們的乘積包括在點(diǎn)積中;將第一打包操作數(shù)的第一對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第一對(duì)應(yīng)的數(shù)據(jù)元素相乘以產(chǎn)生所選的第一乘積;將第一打包操作數(shù)的第二對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第二對(duì)應(yīng)的數(shù)據(jù)元素相乘以產(chǎn)生所選的第二乘積;將所選的第一乘積與所選的第二乘積相加在一起,以至少部分產(chǎn)生點(diǎn)積結(jié)果;以及按照所述控制值,或者將所述點(diǎn)積結(jié)果或者將零值存儲(chǔ)為目標(biāo)操作數(shù)的第一打包值,以及或者將所述點(diǎn)積結(jié)果或者將零值存儲(chǔ)為目標(biāo)操作數(shù)的第二打包值。根據(jù)本發(fā)明的又一方面,提供了一種處理系統(tǒng),包括存儲(chǔ)單指令多數(shù)據(jù)(SIMD)點(diǎn)積指令的存儲(chǔ)器;耦合到所述存儲(chǔ)器的處理器,用于對(duì)多個(gè)操作數(shù)執(zhí)行SMD點(diǎn)積指令,每個(gè)操作數(shù)包括可按照由SIMD點(diǎn)積指令指示的控制值選擇的多個(gè)對(duì)應(yīng)的打包值,以便將它們的乘積包括在點(diǎn)積中,并取決于控制值將點(diǎn)積或零值存儲(chǔ)為目標(biāo)操作數(shù)的第一打包值,以及取決于控制值將點(diǎn)積或零值存儲(chǔ)為目標(biāo)操作數(shù)的第二打包值。
通過(guò)附圖、作為實(shí)例而非限制地來(lái)說(shuō)明本發(fā)明圖IA是根據(jù)本發(fā)明的一個(gè)實(shí)施例采用處理器組成的計(jì)算機(jī)系統(tǒng)的框圖,所述處理器包括執(zhí)行點(diǎn)積操作的指令的執(zhí)行單元;圖IB是根據(jù)本發(fā)明的一個(gè)備選實(shí)施例的另一個(gè)示范性計(jì)算機(jī)系統(tǒng)的框圖;圖IC是根據(jù)本發(fā)明的另一個(gè)備選實(shí)施例的再一個(gè)示范性計(jì)算機(jī)系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器的微體系結(jié)構(gòu)的框圖,所述處理器包括執(zhí)行點(diǎn)積操作的邏輯電路;圖3A示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的多媒體寄存器中的各種打包(packed)數(shù)據(jù)類型表示;
圖3B示出根據(jù)一備選實(shí)施例的打包數(shù)據(jù)類型;圖3C示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的多媒體寄存器中的各種有符號(hào)和無(wú)符號(hào)打包數(shù)據(jù)類型表示;圖3D示出一種操作編碼(操作碼)格式的一個(gè)實(shí)施例;圖3E示出一種備選操作編碼(操作碼)格式;圖3F示出又一種備選操作編碼格式;圖4是根據(jù)本發(fā)明對(duì)打包數(shù)據(jù)操作數(shù)執(zhí)行點(diǎn)積操作的邏輯(logic)的一個(gè)實(shí)施例 的框圖;圖5A是根據(jù)本發(fā)明的一個(gè)實(shí)施例對(duì)單精度打包數(shù)據(jù)操作數(shù)執(zhí)行點(diǎn)積操作的邏輯的框圖;圖5B是根據(jù)本發(fā)明的一個(gè)實(shí)施例對(duì)雙精度打包數(shù)據(jù)操作數(shù)執(zhí)行點(diǎn)積操作的邏輯的框圖;圖6A是根據(jù)本發(fā)明的一個(gè)實(shí)施例用于執(zhí)行點(diǎn)積操作的電路的框圖;圖6B是根據(jù)本發(fā)明的另一個(gè)實(shí)施例用于執(zhí)行點(diǎn)積操作的電路的框圖;圖7是根據(jù)一個(gè)實(shí)施例對(duì)數(shù)據(jù)進(jìn)行打包符號(hào)操作的示意圖。圖7A是根據(jù)一個(gè)實(shí)施例可通過(guò)執(zhí)行DPPS指令來(lái)執(zhí)行的操作的偽碼表示;圖7B是根據(jù)一個(gè)實(shí)施例可通過(guò)執(zhí)行DPH)指令來(lái)執(zhí)行的操作的偽碼表示。
具體實(shí)施例方式以下說(shuō)明描述了在處理裝置、計(jì)算機(jī)系統(tǒng)或軟件程序中執(zhí)行點(diǎn)積操作的一種技術(shù)的實(shí)施例。在以下描述中,闡述諸如處理器類型、微體系結(jié)構(gòu)條件、事件、啟用機(jī)制等的大量具體細(xì)節(jié),以提供對(duì)本發(fā)明的充分理解。然而,本領(lǐng)域的技術(shù)人員會(huì)理解,沒(méi)有這類具體細(xì)節(jié),也可實(shí)施本發(fā)明。另外,沒(méi)有詳細(xì)說(shuō)明一些公知的結(jié)構(gòu)、電路等,以免不必要地影響對(duì)本發(fā)明的理解。雖然參照處理器來(lái)描述以下實(shí)施例,但是,其它實(shí)施例適用于其它類型的集成電路和邏輯設(shè)備。本發(fā)明的相同技術(shù)和理論可容易地應(yīng)用到可獲益于較高流水線吞吐量和改進(jìn)的性能的其它類型的電路或半導(dǎo)體器件。本發(fā)明的理論適用于執(zhí)行數(shù)據(jù)操作的任何處理器或機(jī)器。但是,本發(fā)明不限于執(zhí)行256位、128位、64位、32位或16位數(shù)據(jù)操作的處理器或機(jī)器,而是可適用于其中需要操縱打包數(shù)據(jù)的任何處理器和機(jī)器。為便于說(shuō)明,以下描述中闡述了大量具體細(xì)節(jié),以便提供對(duì)本發(fā)明的充分理解。但是,本領(lǐng)域的技術(shù)人員會(huì)理解,這些具體細(xì)節(jié)不是實(shí)施本發(fā)明所必需的。在其它情況下,沒(méi)有對(duì)公知的電氣結(jié)構(gòu)和電路進(jìn)行特別詳細(xì)的闡述,以免不必要地影響對(duì)本發(fā)明的理解。另夕卜,為了說(shuō)明的目的,以下描述提供實(shí)例,以及附圖示出各種實(shí)例。但是,這些實(shí)例不應(yīng)當(dāng)以限制的意義來(lái)理解,因?yàn)樗鼈儍H旨在提供本發(fā)明的實(shí)例,而不是提供本發(fā)明的所有可能實(shí)現(xiàn)的窮盡列表。雖然以下實(shí)例在執(zhí)行單元和邏輯電路的上下文中來(lái)描述指令處理和分配,但是,本發(fā)明的其它實(shí)施例可通過(guò)軟件來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本發(fā)明的方法以機(jī)器可執(zhí)行指令來(lái)體現(xiàn)。這些指令可用于使采用指令編程的通用或?qū)S锰幚砥鲌?zhí)行本發(fā)明的步驟。本發(fā)明可作為計(jì)算機(jī)程序產(chǎn)品或軟件來(lái)提供,它可包括其中已存儲(chǔ)指令的機(jī)器或計(jì)算機(jī)可讀介質(zhì),這些指令可用于對(duì)計(jì)算機(jī)(或其它電子設(shè)備)編程以執(zhí)行根據(jù)本發(fā)明的過(guò)程。作為備選的方案,本發(fā)明的步驟可由包含用于執(zhí)行所述步驟的硬連線邏輯的特定硬件部件來(lái)執(zhí)行,或者由已編程計(jì)算機(jī)部件和定制硬件部件的任何組合來(lái)執(zhí)行。這種軟件可存儲(chǔ)在系統(tǒng)中的存儲(chǔ)器內(nèi)。類似地,代碼可經(jīng)由網(wǎng)絡(luò)或者通過(guò)其它計(jì)算機(jī)可讀媒體來(lái)分配。因此,機(jī)器可讀介質(zhì)可包括用于存儲(chǔ)或傳輸機(jī)器(例如計(jì)算機(jī))可讀形式的信息的任何機(jī)構(gòu),包括但不限于軟盤、光盤、光盤只讀存儲(chǔ)器(CD-ROM)以及磁光盤、只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、可擦除可編程只讀存儲(chǔ)器(EPROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、磁或光卡、閃存(flash memory)、通過(guò)因特網(wǎng)的傳輸、電、光、聲或其它形式的傳播信號(hào)(例如載波、紅外信號(hào)、數(shù)字信號(hào)等)等。相應(yīng)地,計(jì)算機(jī)可讀介質(zhì)包括適于存儲(chǔ)或傳輸機(jī)器(如計(jì)算機(jī))可讀形式的電子指令或信息的任何類型的媒體/機(jī)器可讀介質(zhì)。此外,本發(fā)明還可作為計(jì)算機(jī)程序產(chǎn)品來(lái)下載。因此,程序可從遠(yuǎn)程計(jì)算機(jī)(例如服務(wù)器)傳送到請(qǐng)求計(jì)算機(jī)(例如客戶機(jī))。程序的傳送可通過(guò)電、光、聲或者在載波或其它傳播介質(zhì)中包含的其它形式的數(shù)據(jù)信號(hào)經(jīng)由通信鏈路(例如調(diào)制解調(diào)器、網(wǎng)絡(luò)連接等)來(lái)進(jìn)行。設(shè)計(jì)可能經(jīng)過(guò)從創(chuàng)建到仿真(simulation)直到制造的各種階段。表示設(shè)計(jì)的數(shù)據(jù)可通過(guò)多種方式來(lái)表示設(shè)計(jì)。首先,如在仿真中有用的那樣,硬件可采用硬件描述語(yǔ)言或者另一種功能描述語(yǔ)言來(lái)表示。另外,采用邏輯和/或晶體管門電路的電路級(jí)模型可在設(shè)計(jì)過(guò)程的某些階段產(chǎn)生。此外,在某個(gè)階段,大部分設(shè)計(jì)達(dá)到表示硬件模型中的各種設(shè)備的物理設(shè)置的數(shù)據(jù)級(jí)。在采用常規(guī)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是指定用于生產(chǎn)集成電路的掩模的不同掩模層上的各種特征是否存在的數(shù)據(jù)。在該設(shè)計(jì)的任何表示中,數(shù)據(jù)可存儲(chǔ)在任何形式的機(jī)器可讀介質(zhì)中。經(jīng)調(diào)制或者以其它方式產(chǎn)生來(lái)傳輸這種信息的光或電波、存儲(chǔ)器或者磁或光存儲(chǔ)裝置(storage)(如磁盤)可以是機(jī)器可讀介質(zhì)。這些介質(zhì)的任一種可“攜帶”或“指示”設(shè)計(jì)或軟件信息。在傳輸指示或攜帶代碼或設(shè)計(jì)的電載波達(dá)到執(zhí)行電信號(hào)的復(fù)制、緩沖或重傳的程度時(shí),就制作了新的副本。因此,通信提供商或網(wǎng)絡(luò)提供商可能制作體現(xiàn)本發(fā)明的技術(shù)的產(chǎn)品(載波)的復(fù)制品。在現(xiàn)代處理器中,多個(gè)不同的執(zhí)行單元用來(lái)處理和執(zhí)行各種代碼及指令。并非所有指令都同等地創(chuàng)建,因?yàn)橐恍┲噶顣?huì)較快地完成,而其它指令則耗用大量時(shí)鐘周期。指令的吞吐量越大,處理器的整體性能就越好。因此,讓許多指令盡可能快地執(zhí)行是有利的。但是,存在具有較高復(fù)雜度并且在執(zhí)行時(shí)間和處理器資源方面要求更多的某些指令。例如存在浮點(diǎn)指令、加載/存儲(chǔ)操作、數(shù)據(jù)移動(dòng)等。隨著越來(lái)越多的計(jì)算機(jī)系統(tǒng)用于互聯(lián)網(wǎng)和多媒體應(yīng)用,隨時(shí)間引入了附加處理器支持。例如,單指令多數(shù)據(jù)(SIMD)整數(shù)/浮點(diǎn)指令和流式(streaming) SIMD擴(kuò)展(SSE)是減少執(zhí)行特定程序任務(wù)所需的指令的總體數(shù)量的指令,它又可降低功耗。通過(guò)并行地對(duì)多個(gè)數(shù)據(jù)元素進(jìn)行操作,這些指令可加速軟件執(zhí)行。因此,可在包括視頻、語(yǔ)音和圖像/照片處理的大量應(yīng)用中實(shí)現(xiàn)性能增益。微處理器以及相似類型的邏輯電路中的SMD指令的實(shí)現(xiàn)通常涉及多個(gè)問(wèn)題。此外,SMD操作的復(fù)雜度通常導(dǎo)致需要附加電路,以正確地處理和操縱數(shù)據(jù)。 當(dāng)前,SIMD點(diǎn)積指令不可用。在不存在SIMD點(diǎn)積指令的情況下,在諸如音頻/視頻壓縮、處理和操縱之類的應(yīng)用中可能需要大量指令和數(shù)據(jù)寄存器來(lái)實(shí)現(xiàn)同樣的結(jié)果。因此,根據(jù)本發(fā)明的實(shí)施例的至少一個(gè)點(diǎn)積指令可減少代碼開(kāi)銷和資源要求。本發(fā)明的實(shí)施例提供一種實(shí)現(xiàn)作為使用SIMD相關(guān)硬件的算法的點(diǎn)積操作的方式。當(dāng)前,對(duì)SIMD寄存器中的數(shù)據(jù)執(zhí)行點(diǎn)積操作有些困難且冗長(zhǎng)。一些算法需要比執(zhí)行那些操作的指令的實(shí)際數(shù)量更多的指令來(lái)設(shè)置用于算術(shù)運(yùn)算的數(shù)據(jù)。通過(guò)實(shí)現(xiàn)根據(jù)本發(fā)明的實(shí)施例的點(diǎn)積操作,實(shí)現(xiàn)點(diǎn)積處理所需的指令數(shù)量可顯著減少。本發(fā)明的實(shí)施例包括用于實(shí)現(xiàn)點(diǎn)積操作的指令。點(diǎn)積操作一般包括將至少兩個(gè)值相乘并將該乘積加到至少兩個(gè)其它值的乘積上??蓪?duì)通用點(diǎn)積算法進(jìn)行其它變更,包括將各個(gè)點(diǎn)積操作的結(jié)果相加以產(chǎn)生另一個(gè)點(diǎn)積。例如,根據(jù)一個(gè)實(shí)施例,應(yīng)用于數(shù)據(jù)元素的點(diǎn)積操作可一般表示為DESTl — SRC1*SRC2 ;DEST2 — SRC3*SRC4 ;DEST3 — DEST1+DEST2 ;對(duì)于打包SMD數(shù)據(jù)操作數(shù),該流程可應(yīng)用于各個(gè)操作數(shù)的各個(gè)數(shù)據(jù)元素。在以上流程中,“DEST”和“SRC”是表示相應(yīng)數(shù)據(jù)或操作的源和目標(biāo)(destination)的一般術(shù)語(yǔ)。在一些實(shí)施例中,它們可通過(guò)具有不同于所述的名稱或功能的寄存器、存儲(chǔ)器或其它存儲(chǔ)區(qū)來(lái)實(shí)現(xiàn)。例如,在一個(gè)實(shí)施例中,DESTl和DEST2可以是第一和第二暫時(shí)存儲(chǔ)區(qū)(例如“TEMPI和“TEMP2”寄存器),SRCl和SRC3可以是第一和第二目標(biāo)存儲(chǔ)區(qū)(例如“DEST?!汀癉EST2”寄存器)等。在其它實(shí)施例中,SRC和DEST存儲(chǔ)區(qū)的兩個(gè)或兩個(gè)以上可對(duì)應(yīng)于相同存儲(chǔ)區(qū)(例如SIMD寄存器)中的不同數(shù)據(jù)存儲(chǔ)單元(data storage element)。此外,在一個(gè)實(shí)施例中,點(diǎn)積操作可產(chǎn)生通過(guò)上述一般流程所產(chǎn)生的點(diǎn)積之和。圖IA是根據(jù)本發(fā)明的一個(gè)實(shí)施例采用處理器組成的示范性計(jì)算機(jī)系統(tǒng)的框圖,所述處理器包括執(zhí)行點(diǎn)積操作的指令的執(zhí)行單元。根據(jù)本發(fā)明,例如在本文所描述的實(shí)施例中,系統(tǒng)100包括采用包含執(zhí)行用于處理數(shù)據(jù)的算法的邏輯的執(zhí)行單元的部件,例如處理器 102。系統(tǒng) 100 表不基于可向 Intel Corporation(Snata Clara, California)購(gòu)買
的PENTIUM III、PENTIUM 4、Xeon 、Itanium 、XScale 如 / 或 StrongARM 微處理器的處理系統(tǒng),但是也可采用其它系統(tǒng)(包括具有其它微處理器的個(gè)人計(jì)算機(jī)(PC)、工程工作站、機(jī)頂盒等)。在一個(gè)實(shí)施例中,示例系統(tǒng)100可運(yùn)行可向MicrosoftCorporation (Redmond, Washington)購(gòu)買的一種版本的WINDOWS 操作系統(tǒng),但也可采用其它操作系統(tǒng)(例如UNIT和Linux)、嵌入式軟件和/或圖形用戶接口。因此,本發(fā)明的實(shí)施例不限于硬件電路和軟件的任何特定結(jié)合。實(shí)施例不限于計(jì)算機(jī)系統(tǒng)。本發(fā)明的備選實(shí)施例可用于其它設(shè)備(如手持設(shè)備)和嵌入式應(yīng)用。手持設(shè)備的一些實(shí)例包括蜂窩電話、因特網(wǎng)協(xié)議裝置、數(shù)字照相機(jī)、個(gè)人數(shù)字助理(PDA)和手持PC。嵌入式應(yīng)用可包括微控制器、數(shù)字信號(hào)處理器(DSP)、片上系統(tǒng)、網(wǎng)絡(luò)計(jì)算機(jī)(NetPC)、機(jī)頂盒、網(wǎng)絡(luò)集線器、廣域網(wǎng)(WAN)交換機(jī)或者對(duì)操作數(shù)執(zhí)行點(diǎn)積操作的任何其它系統(tǒng)。此外,已經(jīng)實(shí)現(xiàn)一些體系結(jié)構(gòu)以使指令能夠同時(shí)對(duì)若干數(shù)據(jù)進(jìn)行操作,從而提高多媒體應(yīng)用的效率。隨著數(shù)據(jù)的類型和容量增加,必須增強(qiáng)計(jì)算機(jī)及其處理器以通過(guò)更有效的方法來(lái)操縱數(shù)據(jù)。圖IA是根據(jù)本發(fā)明的一個(gè)實(shí)施例采用處理器102組成的計(jì)算機(jī)系統(tǒng)100的框圖,所述處理器包括一個(gè)或 多個(gè)執(zhí)行單元108來(lái)執(zhí)行計(jì)算一個(gè)或多個(gè)操作數(shù)中的數(shù)據(jù)元素的點(diǎn)積的算法。一個(gè)實(shí)施例可在單處理器臺(tái)式或服務(wù)器系統(tǒng)的上下文中來(lái)描述,但是備選實(shí)施例可包含在多處理器系統(tǒng)中。系統(tǒng)100是中心(hub)體系結(jié)構(gòu)的一實(shí)例。計(jì)算機(jī)系統(tǒng)100包括處理數(shù)據(jù)信號(hào)的處理器102。處理器102可以是復(fù)雜指令集計(jì)算機(jī)(CISC)微處理器、簡(jiǎn)化指令集計(jì)算(RISC)微處理器、超長(zhǎng)指令字(VLIW)微處理器、實(shí)現(xiàn)指令集的組合的處理器或者例如數(shù)字信號(hào)處理器之類的任何其它處理器設(shè)備。處理器102耦合到可在處理器102與系統(tǒng)100中的其它部件之間傳輸數(shù)據(jù)信號(hào)的處理器總線110。系統(tǒng)100的元件執(zhí)行本領(lǐng)域的技術(shù)人員公知的常規(guī)功能。在一個(gè)實(shí)施例中,處理器102包括第一級(jí)(LI)內(nèi)部高速緩沖存儲(chǔ)器104。根據(jù)該體系結(jié)構(gòu),處理器102可具 有單個(gè)內(nèi)部高速緩存或多級(jí)內(nèi)部高速緩存。作為備選的方案,在另一個(gè)實(shí)施例中,高速緩沖存儲(chǔ)器可位于處理器102的外部。根據(jù)具體實(shí)現(xiàn)和需要,其它實(shí)施例也可包括內(nèi)部和外部?jī)煞N高速緩存的組合。寄存器文件(register file) 106可在包括整數(shù)寄存器、浮點(diǎn)寄存器、狀態(tài)寄存器和指令指針寄存器的各種寄存器中存儲(chǔ)不同類型的數(shù)據(jù)。包含執(zhí)行整數(shù)和浮點(diǎn)運(yùn)算的邏輯的執(zhí)行單元108也位于處理器102中。處理器102還包括存儲(chǔ)某些宏指令的微碼的微碼(μ code)ROM。對(duì)于該實(shí)施例,執(zhí)行單元108包括處理打包指令集109的邏輯。在一個(gè)實(shí)施例中,打包指令集109包括用于計(jì)算多個(gè)操作數(shù)的點(diǎn)積的打包點(diǎn)積指令。通過(guò)在通用處理器102的指令集中包含打包指令集109,結(jié)合執(zhí)行指令的相關(guān)電路,許多多媒體應(yīng)用使用的操作可采用通用處理器102中的打包數(shù)據(jù)來(lái)執(zhí)行。因此,通過(guò)采用處理器的數(shù)據(jù)總線的全寬度(full width)對(duì)打包數(shù)據(jù)執(zhí)行操作,可加速并且更有效地執(zhí)行許多多媒體應(yīng)用。這可消除通過(guò)處理器的數(shù)據(jù)總線來(lái)傳送較小的數(shù)據(jù)單元以一次對(duì)一個(gè)數(shù)據(jù)元素執(zhí)行一個(gè)或多個(gè)操作的需要。執(zhí)行單元108的備選實(shí)施例也可用于微控制器、嵌入式處理器、圖形設(shè)備、DSP和其它類型的邏輯電路。系統(tǒng)100包括存儲(chǔ)器120。存儲(chǔ)器120可以是動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)設(shè)備、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)設(shè)備、閃存設(shè)備或者其它存儲(chǔ)設(shè)備。存儲(chǔ)器120可存儲(chǔ)通過(guò)可由處理器102執(zhí)行的數(shù)據(jù)信號(hào)所表示的指令和/或數(shù)據(jù)。系統(tǒng)邏輯芯片116耦合到處理器總線110和存儲(chǔ)器120。所述實(shí)施例中的系統(tǒng)邏輯芯片116是存儲(chǔ)器控制器中心(memory controller hub) (MCH)。處理器102可經(jīng)由處理器總線110與MCH 116通信。MCH 116為指令和數(shù)據(jù)存儲(chǔ)以及為圖形命令、數(shù)據(jù)和文本的存儲(chǔ)提供到存儲(chǔ)器120的高帶寬存儲(chǔ)器通路118。MCH 116引導(dǎo)處理器102、存儲(chǔ)器120和系統(tǒng)100中的其它部件之間的數(shù)據(jù)信號(hào),并且作為處理器總線110、存儲(chǔ)器120和系統(tǒng)1/0122之間的數(shù)據(jù)信號(hào)的橋梁。在一些實(shí)施例中,系統(tǒng)邏輯芯片116可提供用于耦合到圖形控制器112的圖形端口。MCH 116通過(guò)存儲(chǔ)器接口 118耦合到存儲(chǔ)器120。圖形卡112通過(guò)加速圖形端口(AGP)互連114耦合到MCH 116。系統(tǒng)100采用專有中心(hub)接口總線122將MCH 116耦合到1/0控制器中心(ICH) 130。ICH 130通過(guò)本地1/0總線提供對(duì)一些1/0裝置的直接連接。本地1/0總線是用于將外圍設(shè)備連接到存儲(chǔ)器120、芯片組和處理器102的高速1/0總線。一些實(shí)例是音頻控制器、固件中心(閃速BIOS) 128、無(wú)線收發(fā)器126、數(shù)據(jù)存儲(chǔ)設(shè)備124、包含用戶輸入和鍵盤接口的傳統(tǒng)1/0控制器、諸如通用串行總線(USB)之類的串行擴(kuò)展端口和網(wǎng)絡(luò)控制器134。數(shù)據(jù)存儲(chǔ)設(shè)備124可包括硬盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器、⑶-ROM設(shè)備、閃存設(shè)備或者其它海量存儲(chǔ)設(shè)備。
對(duì)于系統(tǒng)的另 一個(gè)實(shí)施例,執(zhí)行具有點(diǎn)積指令的算法的執(zhí)行單元可與片上系統(tǒng)配合使用。片上系統(tǒng)的一個(gè)實(shí)施例包括處理器和存儲(chǔ)器。一種這樣的系統(tǒng)的存儲(chǔ)器是閃存。閃存可與處理器和其它系統(tǒng)部件位于相同的管芯上。另外,諸如存儲(chǔ)控制器或圖形控制器等其它邏輯塊也可設(shè)置在片上系統(tǒng)中。圖IB示出實(shí)現(xiàn)本發(fā)明的一個(gè)實(shí)施例的原理的數(shù)據(jù)處理系統(tǒng)140。本領(lǐng)域的技術(shù)人員容易理解,本文所述的實(shí)施例可與備選處理系統(tǒng)配合使用,而不會(huì)背離本發(fā)明的范圍。計(jì)算機(jī)系統(tǒng)140包括能夠執(zhí)行包括點(diǎn)積操作的SMD操作的處理核心159。對(duì)于一個(gè)實(shí)施例,處理核心159表示任何類型的體系結(jié)構(gòu)的處理單元,包括但不限于CISC、RISC或VLIW類型的體系結(jié)構(gòu)。處理核心159還可適于以一種或多種加工技術(shù)制造,并且通過(guò)在機(jī)器可讀媒體上充分詳細(xì)地表示,可適合于促進(jìn)所述制造。處理核心159包括執(zhí)行單兀142、寄存器文件集合145和解碼器144。處理核心159還包括對(duì)本發(fā)明的理解不必要的附加電路(圖中未示出)。執(zhí)行單元142用于執(zhí)行處理核心159所接收的指令。除了識(shí)別典型的處理器指令之外,執(zhí)行單元142還可識(shí)別用于對(duì)打包數(shù)據(jù)格式執(zhí)行操作的打包指令集143中的指令。打包指令集143包括用于支持點(diǎn)積操作的指令,并且還可包括其它打包指令。執(zhí)行單元142通過(guò)內(nèi)部總線耦合到寄存器文件145。寄存器文件145表示處理核心159上用于存儲(chǔ)包括數(shù)據(jù)在內(nèi)的信息的存儲(chǔ)區(qū)。如前所述,會(huì)理解到,用于存儲(chǔ)打包數(shù)據(jù)的存儲(chǔ)區(qū)不是關(guān)鍵的。執(zhí)行單元142耦合到解碼器144。解碼器144用于將處理核心159所接收的指令解碼為控制信號(hào)和/或微碼入口點(diǎn)(entrypoint)。響應(yīng)這些控制信號(hào)和/或微碼入口點(diǎn),執(zhí)行單元142執(zhí)行適當(dāng)?shù)牟僮?。處理核?59與總線141耦合,用于與各種其它系統(tǒng)設(shè)備進(jìn)行通信,它們例如可包括但不限于同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)控制裝置(control) 146、靜態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)控制裝置147、突發(fā)(burst)閃存接口 148、個(gè)人計(jì)算機(jī)存儲(chǔ)卡國(guó)際聯(lián)盟(PCMCIA)/壓縮閃存(compact flash) (CF)卡控制裝置149、液晶顯示器(LCD)控制裝置150、直接存儲(chǔ)器存取(DMA)控制器151以及備選總線主接口 152。在一個(gè)實(shí)施例中,數(shù)據(jù)處理系統(tǒng)140還可包括I/O橋接器154,用于經(jīng)由I/O總線153與各種I/O設(shè)備進(jìn)行通信。這類I/O設(shè)備例如可包括但不限于通用異步接收器/發(fā)射器(UART) 155、通用串行總線(USB) 156、藍(lán)牙無(wú)線UART 157和I/O擴(kuò)展接口 158。數(shù)據(jù)處理系統(tǒng)140的一個(gè)實(shí)施例提供移動(dòng)、網(wǎng)絡(luò)和/或無(wú)線通信以及能夠執(zhí)行包括點(diǎn)積操作在內(nèi)的SMD操作的處理核心159。處理核心159可采用各種音頻、視頻、成像和通信算法來(lái)編程,所述算法包括諸如沃爾什-哈達(dá)瑪變換、快速傅立葉變換(FFT)、離散余弦變換(DCT)及其各自的逆變換之類的離散變換,諸如色彩空間變換、視頻編碼運(yùn)動(dòng)估計(jì)或視頻解碼運(yùn)動(dòng)補(bǔ)償之類的壓縮/解壓縮技術(shù),以及諸如脈沖編碼調(diào)制(PCM)之類的調(diào)制/解調(diào)(MODEM)功能。本發(fā)明的一些實(shí)施例還可適用于圖形應(yīng)用,例如三維(“3D”)建模、呈現(xiàn)(rendering)、對(duì)象沖突檢測(cè)、3D對(duì)象變換和照明等。圖IC示出能夠執(zhí)行SMD點(diǎn)積操作的數(shù)據(jù)處理系統(tǒng)的又一備選實(shí)施例。根據(jù)一個(gè)備選實(shí)施例,數(shù)據(jù)處理系統(tǒng)160可包括主處理器166、SIMD協(xié)處理器161、高速緩沖存儲(chǔ)器167和輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可任選地耦合到無(wú)線接口 169。SIMD協(xié)處理器161能夠執(zhí)行包括點(diǎn)積操作在內(nèi)的SMD操作。處理核心170可適合于以一種或多種加工技術(shù)制造,并且通過(guò)在機(jī)器可讀媒體上充分詳細(xì)地表示,可適合于促進(jìn)包括處理核心170在內(nèi)的數(shù)據(jù)處理系統(tǒng)160的全部或部分的制造。對(duì)于一個(gè)實(shí)施例,SMD協(xié)處理器161包括執(zhí)行單元162和寄存器文件集合164。主處理器165的一個(gè)實(shí)施例包括解碼器165,以識(shí)別供執(zhí)行單元162執(zhí)行的包括SMD點(diǎn)積計(jì)算指令在內(nèi)的指令集163的指令。對(duì)于備選實(shí)施例,SMD協(xié)處理器161還包括解碼器165B的至少一部分,以對(duì)指令集163的指令進(jìn)行解碼。處理核心170還包括對(duì)本發(fā)明的實(shí)施例的理解不必要的附加電路(圖中未示出)。在操作中,主處理器166執(zhí)行數(shù)據(jù)處理指令流,所述指令控制包括與高速緩沖存儲(chǔ)器167和輸入/輸出系統(tǒng)168進(jìn)行交互在內(nèi)的一般類型的數(shù)據(jù)處理操作。嵌入數(shù)據(jù)處理指令流中的是SMD協(xié)處理器指令。主處理 器166的解碼器165將這些SMD協(xié)處理器指令識(shí)別為屬于應(yīng)當(dāng)由附屬的SMD協(xié)處理器161來(lái)執(zhí)行的類型。因此,主處理器166在協(xié)處理器總線166上發(fā)出這些SMD協(xié)處理器指令(或者表示SMD協(xié)處理器指令的控制信號(hào)),它們從所述總線上由任何附屬的SMD協(xié)處理器來(lái)接收。在這種情況下,SIMD協(xié)處理器161將接受并執(zhí)行發(fā)送給它的任何所接收的SMD協(xié)處理器指令。數(shù)據(jù)可經(jīng)由無(wú)線接口 169來(lái)接收,以供SMD協(xié)處理器指令進(jìn)行處理。對(duì)于一個(gè)實(shí)例,可采取數(shù)字信號(hào)的形式來(lái)接收語(yǔ)音通信,其可由SMD協(xié)處理器指令進(jìn)行處理,以再生(regenerate)表示語(yǔ)音通信的數(shù)字音頻樣本。對(duì)于另一個(gè)實(shí)例,可采取數(shù)字比特流的形式來(lái)接收壓縮音頻和/或視頻,其可由SMD協(xié)處理器指令進(jìn)行處理,以再生數(shù)字音頻樣本和/或運(yùn)動(dòng)視頻幀。對(duì)于處理核心170的一個(gè)實(shí)施例,主處理器166和SMD協(xié)處理器161集成到包括執(zhí)行單元162、寄存器文件集合164和解碼器165的單個(gè)處理核心170中,以識(shí)別包括SIMD點(diǎn)積指令在內(nèi)的指令集163的指令。圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器200的微體系結(jié)構(gòu)的框圖,所述處理器包括執(zhí)行點(diǎn)積指令的邏輯電路。對(duì)于點(diǎn)積指令的一個(gè)實(shí)施例,該指令可將第一數(shù)據(jù)元素與第二數(shù)據(jù)元素相乘,并且將該乘積與第三和第四數(shù)據(jù)元素之積相加。在一些實(shí)施例中,點(diǎn)積指令可實(shí)現(xiàn)成對(duì)于具有字節(jié)、字、雙字、四字等大小以及諸如單和雙精度整數(shù)及浮點(diǎn)數(shù)據(jù)類型之類的數(shù)據(jù)類型的數(shù)據(jù)元素進(jìn)行操作。在一個(gè)實(shí)施例中,有序前端201是處理器200的組成部分,它取出待執(zhí)行的宏指令,并對(duì)它們進(jìn)行準(zhǔn)備以供之后在處理器流水線中使用。前端201可包括若干單元。在一個(gè)實(shí)施例中,指令預(yù)取器226從存儲(chǔ)器中取出宏指令,并將其饋送到指令解碼器228,指令解碼器228轉(zhuǎn)而將這些宏指令解碼為稱作微指令或微操作(又稱作micro op或μ op)的機(jī)器可執(zhí)行的原語(yǔ)。在一個(gè)實(shí)施例中,追蹤高速緩存(tracecache) 230取出解碼后的μ op,并將其組裝為μ op隊(duì)列234中的程序排序序列或路線(trace)供執(zhí)行。當(dāng)追蹤高速緩存230遇到復(fù)雜宏指令時(shí),微碼ROM 232提供完成該操作所需的μ op。許多宏指令被轉(zhuǎn)換為單個(gè)微操作,而其它的則需要若干微操作來(lái)完成整個(gè)操作。在一個(gè)實(shí)施例中,若需要四個(gè)以上微操作來(lái)完成宏指令,則解碼器228訪問(wèn)微碼ROM 232來(lái)對(duì)宏指令進(jìn)行處理。對(duì)于一個(gè)實(shí)施例,可將打包點(diǎn)積指令解碼為少量微操作以在指令解碼器228上進(jìn)行處理。在另一個(gè)實(shí)施例中,若需要多個(gè)微操作來(lái)完成該操作,則打包點(diǎn)積算法的指令可存儲(chǔ)在微碼ROM 232中。追蹤高速緩存230參照入口點(diǎn)可編程邏輯陣列(PLA)來(lái)確定用于讀取微碼ROM 232中的點(diǎn)積算法的微碼序列的正確微指令指針。在微碼ROM 232完成當(dāng)前宏指令的定序(sequencing)微操作之后,機(jī)器的前端201繼續(xù)從追蹤高速緩存230中取出微操作。某種SMD和其它多媒體類型的指令被看作復(fù)雜指令。大多數(shù)浮點(diǎn)相關(guān)的指令也是復(fù)雜指令。因此,當(dāng)指令解碼器228遇到復(fù)雜宏指令時(shí),在適當(dāng)位置上對(duì)微碼ROM 232進(jìn)行訪問(wèn),以檢索那個(gè)宏指令的微碼序列。將執(zhí)行那個(gè)宏指令所需的各個(gè)微操作傳送給無(wú)序執(zhí)行引擎203,以在適當(dāng)?shù)恼麛?shù)和浮點(diǎn)執(zhí)行單元上執(zhí)行。無(wú)序執(zhí)行引擎203是在其中準(zhǔn)備微指令供執(zhí)行的單元。無(wú)序執(zhí)行邏輯具有多個(gè)緩沖器以在微指令沿流水線前進(jìn)并被安排執(zhí)行時(shí)對(duì)所述微指令的流程進(jìn)行平滑處理及重新排序來(lái)優(yōu)化性能。分配器邏輯分配各μ op執(zhí)行所需的機(jī)器緩沖器和資源。寄存器重命名邏輯將邏輯寄存器重命名到寄存器文件的條目上。在以下指令調(diào)度器之前,分配器還分配兩個(gè)μ op隊(duì)列之一中的各μ op的條目,所述兩個(gè)隊(duì)列中的一個(gè)用于存儲(chǔ)器操作,一個(gè)用于非存儲(chǔ)器操作存儲(chǔ)器調(diào)度器,快速調(diào)度器202,慢速/通用浮點(diǎn)調(diào)度器204,以及簡(jiǎn)單浮點(diǎn)調(diào)度器206。μ op調(diào)度器202、204、206根據(jù)它們的相關(guān)輸入寄存器操作數(shù)源的預(yù)備狀態(tài)以及μ op完成其操作所需的執(zhí)行資源的可用性來(lái)確定何時(shí)μ op準(zhǔn)備好執(zhí)行。該實(shí)施例的快速調(diào)度器202可在主時(shí)鐘周期的每一半上進(jìn)行調(diào)度,而其它調(diào)度器在每個(gè)主處理器時(shí)鐘周期只可調(diào)度一次。調(diào)度器對(duì)分配端口進(jìn)行仲裁,以調(diào)度μ op來(lái)執(zhí)行。寄存器文件208、210位于調(diào)度器202、204、206與執(zhí)行塊211中的執(zhí)行單元212、214、216、218、220、222、224之間。存在分別用于整數(shù)和浮點(diǎn)操作的獨(dú)立寄存器文件208、210。該實(shí)施例的各寄存器文件208、210還包括旁路網(wǎng)絡(luò)(bypass network),它可向新的相關(guān)μ op分流(bypass)或轉(zhuǎn)發(fā)還未寫入寄存器文件的剛完成的結(jié)果。整數(shù)寄存器文件208和浮點(diǎn)寄存器文件210還能互相傳送數(shù)據(jù)。對(duì)于一個(gè)實(shí)施例,整數(shù)寄存器文件208被分為兩個(gè)獨(dú)立寄存器文件,一個(gè)寄存器文件用于數(shù)據(jù)的低階32位,而第二寄存器文件用于數(shù)據(jù)的高階32位。一個(gè)實(shí)施例的浮點(diǎn)寄存器文件210具有128位寬的條目,因?yàn)楦↑c(diǎn)指令通常具有從64到128位寬的操作數(shù)。執(zhí)行塊211包含執(zhí)行單元212、214、216、218、220、222、224,指令實(shí)際上在這些執(zhí)行單元中執(zhí)行。該部分包括寄存器文件208、210,它們存儲(chǔ)微指令需要執(zhí)行的整數(shù)和浮點(diǎn)數(shù)據(jù)操作數(shù)值。該實(shí)施例的處理器200包括多個(gè)執(zhí)行單元地址生成單元(AGU)212,AGU 214,快速ALU 216,快速ALU 218,慢速ALU 220,浮點(diǎn)ALU 222,浮點(diǎn)移動(dòng)單元224。對(duì)于該實(shí)施例,浮點(diǎn)執(zhí)行塊222、224執(zhí)行浮點(diǎn)、MMX, SIMD和SSE操作。該實(shí)施例的浮點(diǎn)ALU 222包括64位除64位浮點(diǎn)除法器,以執(zhí)行除法、平方根及求余(remainder)微操作。對(duì)于本發(fā)明的實(shí)施例,涉及浮點(diǎn)值的任何動(dòng)作采用浮點(diǎn)硬件進(jìn)行。例如,整數(shù)格式與浮點(diǎn)格式之間的轉(zhuǎn)換涉及浮點(diǎn)寄存器文件。類似地,浮點(diǎn)除法操作在浮點(diǎn)除法器上進(jìn)行。另一方面,非浮點(diǎn)數(shù)值和整數(shù)類型采用整數(shù)硬件資源來(lái)處理。非常頻繁的簡(jiǎn)單ALU運(yùn)算轉(zhuǎn)到高速ALU執(zhí)行單元216、218。該實(shí)施例的快速ALU 216、218可采用半個(gè)時(shí)鐘周期的有效等待時(shí)間來(lái)執(zhí)行快速運(yùn)算。對(duì)于一個(gè)實(shí)施例,大多數(shù)復(fù)雜整數(shù)操作轉(zhuǎn)到慢速ALU 220,因?yàn)槁貯LU 220包括用于長(zhǎng)等待時(shí)間類型的操作的整數(shù)執(zhí)行硬件,所述操作例如乘數(shù)、移位、標(biāo)志(flag)邏輯和分支處理。存儲(chǔ)器加載/存儲(chǔ)操作由AGU 212、21 4執(zhí)行。對(duì)于該實(shí)施例,在對(duì)64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作的上下文中描述整數(shù)ALU216、218、220。在備選實(shí)施例中,ALU 216、218、220可被實(shí)現(xiàn)為支持包括16、32、128、256等的各種數(shù)據(jù)位。類似地,浮點(diǎn)單元222、224可被實(shí)現(xiàn)為支持具有各種寬度的位的一系列操作數(shù)。對(duì)于一個(gè)實(shí)施例,結(jié)合SIMD和多媒體指令,浮點(diǎn)單元222、224可對(duì)128位寬的打包數(shù)據(jù)操作數(shù)進(jìn)行操作。在該實(shí)施例中,4 0 調(diào)度器202、204、206在父加載已經(jīng)完成執(zhí)行之前分派(dispatch)相關(guān)操作。由于μ op在處理器200中推測(cè)地調(diào)度和執(zhí)行,所以處理器200還包括處理存儲(chǔ)器未命中的邏輯。若數(shù)據(jù)加載在數(shù)據(jù)高速緩存中未命中,則在流水線中可能存在為調(diào)度器留下了暫時(shí)不正確數(shù)據(jù)的執(zhí)行中(in flight)相關(guān)操作。重放(r印lay)機(jī)構(gòu)跟蹤并重新執(zhí)行采用不正確數(shù)據(jù)的指令。只有相關(guān)操作才需要被重放,而允許不相關(guān)操作完成。處理器的一個(gè)實(shí)施例的 調(diào)度器和重放機(jī)構(gòu)還設(shè)計(jì)成捕捉點(diǎn)積操作的指令序列。術(shù)語(yǔ)“寄存器”在本文中用來(lái)表示用作標(biāo)識(shí)操作數(shù)的宏指令的一部分的板載(on-board)處理器存儲(chǔ)單元。換言之,本文提到的寄存器是從處理器外部(從程序員的角度)可見(jiàn)的。但是,實(shí)施例的寄存器的含義不應(yīng)當(dāng)限于特定類型的電路。而是,實(shí)施例的寄存器只需要能夠存儲(chǔ)和提供數(shù)據(jù)以及執(zhí)行本文所述的功能。本文所述的寄存器可通過(guò)處理器中的電路采用任何數(shù)量的不同技術(shù)來(lái)實(shí)現(xiàn),例如專用物理寄存器、采用寄存器重命名的動(dòng)態(tài)分配物理寄存器、專用和動(dòng)態(tài)分配物理寄存器的組合等。在一個(gè)實(shí)施例中,整數(shù)寄存器存儲(chǔ)32位整數(shù)數(shù)據(jù)。一個(gè)實(shí)施例的寄存器文件還包含用于打包數(shù)據(jù)的16個(gè)XMM和通用寄存器、8個(gè)多媒體(例如“EM64T”加法)多媒體SIMD寄存器。對(duì)于以下論述,寄存器被理解為設(shè)計(jì)成保存打包數(shù)據(jù)的數(shù)據(jù)寄存器,例如采用Intel Corporation (Santa Clara,California)開(kāi)發(fā)的MMX技術(shù)實(shí)現(xiàn)的微處理器中的64位寬MMX 寄存器(在某些情況下又稱作“mm”寄存器)??捎糜谡麛?shù)和浮點(diǎn)這兩種形式的這些MMX寄存器可與伴隨SIMD和SSE指令的打包數(shù)據(jù)元素配合操作。類似地,與SSE2、SSE3、SSE4或者以上(一般性地稱作“SSEx”)的技術(shù)有關(guān)的128位寬XMM寄存器也可用于保存這類打包數(shù)據(jù)操作數(shù)。在該實(shí)施例中,在存儲(chǔ)打包數(shù)據(jù)和整數(shù)數(shù)據(jù)時(shí),寄存器無(wú)需區(qū)分這兩種數(shù)據(jù)類型。在以下附圖的實(shí)例中,描述了多個(gè)數(shù)據(jù)操作數(shù)。圖3A示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的多媒體寄存器中的各種打包數(shù)據(jù)類型表示。圖3A示出128位寬操作數(shù)的打包字節(jié)310、打包字320和打包雙字(dword)330的數(shù)據(jù)類型。該實(shí)例的打包字節(jié)格式310是128位長(zhǎng)的,并包含16個(gè)打包字節(jié)數(shù)據(jù)元素。字節(jié)在這里定義為8位的數(shù)據(jù)。各字節(jié)數(shù)據(jù)元素的信息是這樣存儲(chǔ)的字節(jié)O存儲(chǔ)在O至7位,字節(jié)I存儲(chǔ)在8至15位,字節(jié)2存儲(chǔ)在16至23位,以及最后,字節(jié)15存儲(chǔ)在120至127位。這樣,寄存器中的所有可用的位都被使用。這種存儲(chǔ)設(shè)置增加了處理器的存儲(chǔ)效率。另外,通過(guò)訪問(wèn)16個(gè)數(shù)據(jù)元素,現(xiàn)在可并行地對(duì)16個(gè)數(shù)據(jù)元素執(zhí)行一個(gè)操作。一般來(lái)說(shuō),數(shù)據(jù)元素是與相同長(zhǎng)度的其它數(shù)據(jù)元素一起存儲(chǔ)在單個(gè)寄存器或存儲(chǔ)單元中的一段單獨(dú)的數(shù)據(jù)。在與SSEx技術(shù)相關(guān)的打包數(shù)據(jù)序列中,XMM寄存器中存儲(chǔ)的數(shù)據(jù)元素的數(shù)量是128位除以單獨(dú)的數(shù)據(jù)元素的位的長(zhǎng)度。類似地,在與MMX和SSE技術(shù)相關(guān)的打包數(shù)據(jù)序列中,MMX寄存器中存儲(chǔ)的數(shù)據(jù)元素的數(shù)量是64位除以單獨(dú)的數(shù)據(jù)元素的位的長(zhǎng)度。雖然圖3A所示的數(shù)據(jù)類型為128位長(zhǎng),但是,本發(fā)明的實(shí)施例還可與64位寬或者其它大小的操作數(shù)配合操作。該實(shí)例的打包字格式320是128位長(zhǎng)的,并且包含8個(gè)打包字?jǐn)?shù)據(jù)元素。各打包字包含16位的信息。圖3A的打包雙字格式330是128位長(zhǎng),并且包含四個(gè)打包雙字?jǐn)?shù)據(jù)元素。各打包雙字?jǐn)?shù)據(jù)元素包含32位的信息。打包四字是128位長(zhǎng)的,并包含兩個(gè)打包四字?jǐn)?shù)據(jù)元素。圖3B示出備選的寄存器中數(shù)據(jù)存儲(chǔ)格式。各打包數(shù)據(jù)可包括一個(gè)以上獨(dú)立數(shù)據(jù)元素。示出三種打包數(shù)據(jù)格式,即打包半字341、打包單字342和打包雙字343。打包半字341、打包單字342和打包雙字343的一個(gè)實(shí)施例包含定點(diǎn)數(shù)據(jù)元素。對(duì)于一備選實(shí)施例,打包半字341、打包單字342和打包雙字343這三者中的一個(gè)或多個(gè)可包含浮點(diǎn)數(shù)據(jù)元素。打包半字341的一個(gè)備選實(shí)施例是包含八個(gè)16位數(shù)據(jù)元素的128位長(zhǎng)的。打包單字342的一個(gè)實(shí)施例為128位長(zhǎng),并且包含四個(gè)32位數(shù)據(jù)元素。打包雙字343的一個(gè)實(shí)施例為128位長(zhǎng),并且包含兩個(gè)64位數(shù)據(jù)元素。大家會(huì)理解,這類打包數(shù)據(jù)格式還可擴(kuò)展到其它寄存器長(zhǎng)度,例如擴(kuò)展到96位、160位、192位、224位、256位或者更大的長(zhǎng)度。圖3C示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的多媒體寄存器中的各種有符號(hào)和無(wú)符號(hào)打包數(shù)據(jù)類型表示。無(wú)符號(hào)打包字節(jié)表示344示出在SMD寄存器中的無(wú)符號(hào)打包字節(jié)的存儲(chǔ)。各字節(jié)數(shù)據(jù)元素的信息是這樣存儲(chǔ)的字節(jié)零存儲(chǔ)在零至七位,字節(jié)一存儲(chǔ)在八至十五位,字節(jié)二存儲(chǔ)在十六至二十三位,以及最后,字節(jié)十五存儲(chǔ)在一百二十至一百二十七位。這樣,寄存器中的所有可用的位都被使用。這種存儲(chǔ)設(shè)置可增加處理器的存儲(chǔ)效率。另外,通過(guò)訪問(wèn)十六個(gè)數(shù)據(jù)元素,現(xiàn)在可通過(guò)并行方式對(duì)十六個(gè)數(shù)據(jù)元素執(zhí)行一個(gè)操作。有符號(hào)打包字節(jié)表示345示出有符號(hào)打包字節(jié)的存儲(chǔ)。注意,每一個(gè)字節(jié)數(shù)據(jù)元素的第八位是符號(hào)指示符。無(wú)符號(hào)打包字表示346示出如何在SMD寄存器中存儲(chǔ)字七至字零。有符號(hào)打包字表示347與無(wú)符號(hào)打包字的寄存器內(nèi)(in-register)表示346相似。注意,各字?jǐn)?shù)據(jù)元素的第十六位是符號(hào)指示符。無(wú)符號(hào)打包雙字表示348示出如何存儲(chǔ)雙字?jǐn)?shù)據(jù)元素。有符號(hào)打包雙字表示349與無(wú)符號(hào)打包雙字的寄存器內(nèi)表示348相似。注意,必要的符號(hào)位是各雙字?jǐn)?shù)據(jù)元素的第三十二位。圖3D是對(duì)操作編碼(操作碼)格式360的一個(gè)實(shí)施例的描述,其中具有三十二或者更多位,以及寄存器/存儲(chǔ)器操作數(shù)尋址模式符合在以下文獻(xiàn)中描述的一種類型的操作碼格式“IA-32Intel體系結(jié)構(gòu)軟件開(kāi)發(fā)人員手冊(cè)第2卷指令集參考”,可在萬(wàn)維網(wǎng)(www)的 intel. com/design/litcentr 上從 Intel Corporation (Santa Clara, CA)獲得。在一個(gè)實(shí)施例中,點(diǎn)積操作可通過(guò)字段361和362這兩者中的一個(gè)或多個(gè)來(lái)編碼??勺R(shí)別每個(gè)指令總共兩個(gè)操作數(shù)位置,包括總共兩個(gè)源操作數(shù)標(biāo)識(shí)符364和365。對(duì)于點(diǎn)積指令的一個(gè)實(shí)施例,目標(biāo)操作數(shù)標(biāo)識(shí)符366與源操作數(shù)標(biāo)識(shí)符364相同,而在其它實(shí)施例中,它們是不同的。對(duì)于一備選實(shí)施例,目標(biāo)操作數(shù)標(biāo)識(shí)符366與源操作數(shù)標(biāo)識(shí)符365相同,而在其它實(shí)施例中,它們是不同的。在點(diǎn)積指令的一個(gè)實(shí)施例中,通過(guò)源操作數(shù)標(biāo)識(shí)符364和365標(biāo)識(shí)的源操作數(shù)之一被點(diǎn)積操作的結(jié)果重寫,而在其它實(shí)施例中,標(biāo)識(shí)符364對(duì)應(yīng)于源寄存器元件,以及標(biāo)識(shí)符365對(duì)應(yīng)于目標(biāo)寄存器元件。對(duì)于點(diǎn)積指令的一個(gè)實(shí)施例,操作數(shù)標(biāo)識(shí)符364和365可用來(lái)標(biāo)識(shí)32位或64位源和目標(biāo)操作數(shù)。圖3E是對(duì)具有四十或更多位的另一種備選操作編碼(操作碼)格式370的描述。操作碼格式370與操作碼格式360 —致,并包括任選的前置字節(jié)378。點(diǎn)積操作的類型可通過(guò)字段378、371和372這三者中的一個(gè)或多個(gè)來(lái)編碼。可通過(guò)源操作數(shù)標(biāo)識(shí)符374和375以及通過(guò)前置字節(jié)378來(lái)標(biāo)識(shí)每個(gè)指令總共兩個(gè)操作數(shù)位置。對(duì)于點(diǎn)積指令的一個(gè)實(shí)施 例,前置字節(jié)378可用來(lái)標(biāo)識(shí)32位或64位源和目標(biāo)操作數(shù)。對(duì)于點(diǎn)積指令的一個(gè)實(shí)施例,目標(biāo)操作數(shù)標(biāo)識(shí)符376與源操作數(shù)標(biāo)識(shí)符374相同,而在其它實(shí)施例中,它們是不同的。對(duì)于一備選實(shí)施例,目標(biāo)操作數(shù)標(biāo)識(shí)符376與源操作數(shù)標(biāo)識(shí)符375相同,而在其它實(shí)施例中,它們是不同的。在一個(gè)實(shí)施例中,點(diǎn)積操作將操作數(shù)標(biāo)識(shí)符374和375所標(biāo)識(shí)的操作數(shù)之一與操作數(shù)標(biāo)識(shí)符374和375所標(biāo)識(shí)的另一個(gè)操作數(shù)相乘,該點(diǎn)積操作的結(jié)果會(huì)重寫所述操作數(shù)中的一個(gè),而在其它實(shí)施例中,標(biāo)識(shí)符374和375所標(biāo)識(shí)的操作數(shù)的點(diǎn)積被寫入另一個(gè)寄存器中的另一個(gè)數(shù)據(jù)元素。操作碼格式360和370允許部分由MOD字段363和373以及由任選的scale-index-base和偏移字節(jié)(displacement byte)指定的寄存器到寄存器(register to regis ter)、存儲(chǔ)器到寄存器(memory to register)、寄存器通過(guò)存儲(chǔ)器(register by memory)、寄存器通過(guò)寄存器(register by register)、寄存器通過(guò)立即尋址(register by immediate)、寄存器至Ij存儲(chǔ)器(register to memory)的尋址。接下來(lái)看圖3F,在一些備選實(shí)施例中,64位單指令多數(shù)據(jù)(SMD)算術(shù)運(yùn)算可通過(guò)協(xié)處理器數(shù)據(jù)處理(CDP)指令來(lái)執(zhí)行。操作編碼(操作碼)格式380示出具有CDP操作碼字段382和389的一種這樣的⑶P指令。對(duì)于點(diǎn)積操作的備選實(shí)施例,⑶P指令的類型可通過(guò)字段383、384、387和388這四者中的一個(gè)或多個(gè)來(lái)編碼??蓸?biāo)識(shí)每個(gè)指令總共三個(gè)操作數(shù)位置,包括總共兩個(gè)源操作數(shù)標(biāo)識(shí)符385、390和一個(gè)目標(biāo)操作數(shù)標(biāo)識(shí)符386。協(xié)處理器的一個(gè)實(shí)施例可對(duì)8、16、32和64位的值進(jìn)行操作。對(duì)于一個(gè)實(shí)施例,對(duì)整數(shù)數(shù)據(jù)元素執(zhí)行點(diǎn)積操作。在一些實(shí)施例中,可采用選擇字段381來(lái)有條件地執(zhí)行點(diǎn)積指令。對(duì)于一些點(diǎn)積指令,源數(shù)據(jù)大小可通過(guò)字段383來(lái)編碼。在點(diǎn)積指令的一些實(shí)施例中,可在SMD字段上進(jìn)行零(Z)、負(fù)值(N)、進(jìn)位(C)和溢出(V)檢測(cè)。對(duì)于一些指令,飽和的類型可通過(guò)字段384來(lái)編碼。圖4是根據(jù)本發(fā)明對(duì)打包數(shù)據(jù)操作數(shù)執(zhí)行點(diǎn)積操作的邏輯的一個(gè)實(shí)施例的框圖。本發(fā)明的實(shí)施例可實(shí)現(xiàn)為與諸如以上所述之類的各種類型的操作數(shù)配合工作。對(duì)于一種實(shí)現(xiàn),根據(jù)本發(fā)明的點(diǎn)積操作實(shí)現(xiàn)為對(duì)指定數(shù)據(jù)類型進(jìn)行操作的指令集。例如,提供點(diǎn)積打包單精度(DPPS)指令以確定包括整數(shù)和浮點(diǎn)在內(nèi)的32位數(shù)據(jù)類型的點(diǎn)積。類似地,提供點(diǎn)積打包雙精度(DPPD)指令以確定包括整數(shù)和浮點(diǎn)在內(nèi)的64位數(shù)據(jù)類型的點(diǎn)積。雖然這些指令具有不同名稱,但它們執(zhí)行的一般點(diǎn)積操作是相似的。為了簡(jiǎn)潔起見(jiàn),以下論述和實(shí)例在處理數(shù)據(jù)元素的點(diǎn)積指令的上下文中進(jìn)行。在一個(gè)實(shí)施例中,點(diǎn)積指令識(shí)別各種信息,包括第一數(shù)據(jù)操作數(shù)DATAA410的標(biāo)識(shí)符和第二數(shù)據(jù)操作數(shù)DATAB420的標(biāo)識(shí)符,以及點(diǎn)積操作的所得結(jié)果RESULTANT440的標(biāo)識(shí)符(在一個(gè)實(shí)施例中,它可能與第一數(shù)據(jù)操作數(shù)標(biāo)識(shí)符之一相同)。對(duì)于以下論述,DATAA, DATAB和RESULTANT —般稱作操作數(shù)或數(shù)據(jù)塊,但不限于此,并且還包括寄存器、寄存器文件和存儲(chǔ)單元。在一個(gè)實(shí)施例中,將各點(diǎn)積指令(DPPS、DPPD)解碼為一個(gè)微操作。在一備選實(shí)施例中,可將各指令解碼為各種數(shù)量的微操作,以對(duì)數(shù)據(jù)操作數(shù)執(zhí)行點(diǎn)積操作。對(duì)于該實(shí)例,操作數(shù)410、420是在具有字寬數(shù)據(jù)元素的源寄存器/存儲(chǔ)器中存儲(chǔ)的128位寬的信息段。在一個(gè)實(shí)施例中,操作數(shù)410、420保存在128位長(zhǎng)的SMD寄存器(如128位SSEx XMM寄存器)中。對(duì)于一個(gè)實(shí)施例,RESULTANT 440也是XMM數(shù)據(jù)寄存器。此外,RESULTANT 440也可能是與源操作數(shù)之一相同的寄存器或存儲(chǔ)單元。根據(jù)具體實(shí)現(xiàn),操作數(shù)和寄存器可能是諸如32、64和256位等的其它長(zhǎng)度,并且具有字節(jié)、雙字或四字大小的數(shù)據(jù)元素。雖然該實(shí)例的數(shù)據(jù)元素為字大小,但是,同樣的概念可擴(kuò)展到字節(jié)和雙字大小的元素。在其中的數(shù)據(jù)操作數(shù)為64位寬的一個(gè)實(shí)施例中,MMX寄存器用來(lái)代替XMM寄存器。該實(shí)例中的第一操作數(shù)410包括八個(gè)數(shù)據(jù)元素的集合A3、A2、Al和A0。各個(gè)單獨(dú)的數(shù)據(jù)元素對(duì)應(yīng)于所得結(jié)果440中的數(shù)據(jù)元素位置。第二操作數(shù)420包括八個(gè)數(shù)據(jù)段的另一個(gè)集合B3、B2、B1和BO。在這里,數(shù)據(jù)段具有相等長(zhǎng)度,并且各包括數(shù)據(jù)的單字(32位)。但是,數(shù)據(jù)元素和數(shù)據(jù)元素位置可具有與字不同的其它粒度(granularity)。若各數(shù)據(jù)元素為字節(jié)(8位)、雙字(32位)或四字(64位),則128位操作數(shù)分別具有十六字節(jié)寬、四個(gè)雙字寬或者兩個(gè)四字寬的數(shù)據(jù)元素。本發(fā)明的實(shí)施例不限于特定長(zhǎng)度的數(shù)據(jù)操作數(shù)或數(shù)據(jù)段,而是可能對(duì)于各實(shí)現(xiàn)來(lái)適當(dāng)?shù)卮_定大小。
操作數(shù)410、420可駐留在寄存器或存儲(chǔ)單元或寄存器文件或者它們的組合中。數(shù)據(jù)操作數(shù)410、420與點(diǎn)積指令一起被發(fā)送到處理器中的執(zhí)行單元的點(diǎn)積計(jì)算邏輯430。在一個(gè)實(shí)施例中,當(dāng)點(diǎn)積指令到達(dá)執(zhí)行單元時(shí),先前應(yīng)當(dāng)已經(jīng)在處理器流水線中對(duì)指令進(jìn)行了解碼。因此,點(diǎn)積指令可能采取微操作(μορ)或者某種其它已解碼格式的形式。對(duì)于一個(gè)實(shí)施例,在點(diǎn)積計(jì)算邏輯430上接收兩個(gè)數(shù)據(jù)操作數(shù)410、420。點(diǎn)積計(jì)算邏輯430產(chǎn)生第一操作數(shù)410的兩個(gè)數(shù)據(jù)元素的第一乘積,以及處于第二操作數(shù)420的對(duì)應(yīng)數(shù)據(jù)元素位置中的兩個(gè)數(shù)據(jù)元素的第二乘積,以及將第一和第二乘積之和存儲(chǔ)在所得結(jié)果440中的適當(dāng)位置中,所得結(jié)果可能與第一或第二操作數(shù)對(duì)應(yīng)于相同的存儲(chǔ)單元。在一個(gè)實(shí)施例中,第一和第二操作數(shù)中的數(shù)據(jù)元素為單精度(例如32位),而在其它實(shí)施例中,第一和第二操作數(shù)中的數(shù)據(jù)元素為雙精度(例如64位)。對(duì)于一個(gè)實(shí)施例,并行處理所有數(shù)據(jù)位置的數(shù)據(jù)元素。在另一個(gè)實(shí)施例中,一次可一起處理某個(gè)部分的數(shù)據(jù)元素位置。在一個(gè)實(shí)施例中,根據(jù)是執(zhí)行DPro還是DPPS,所得結(jié)果440分別包括兩個(gè)或四個(gè)可能的點(diǎn)積結(jié)果位置dot-productA31_q、dot_productA63_32、D0T-PR0DUCTA95_64、D0T-PR0DUCTA127_96 (對(duì)于 DPPS 指令的結(jié)果),以及 dot-productA63_。、D0T-PR0DUCTa127_64 (對(duì)于 DPPD 指令的結(jié)果)。在一個(gè)實(shí)施例中,所得結(jié)果440中的點(diǎn)積結(jié)果的位置取決于與點(diǎn)積指令相關(guān)聯(lián)的選擇字段。例如,對(duì)于DPPS指令,所得結(jié)果440中的點(diǎn)積結(jié)果的位置在選擇字段等于第一值時(shí)為Dot-PRoDucta3K,在選擇字段等于第二值時(shí)為dot-productA63_32,在選擇字段等于第三值時(shí)為dot-productA95_64,以及在選擇字段等于第四值時(shí)為dot-producta127_64。在DPro指令的情況下,所得結(jié)果440中的點(diǎn)積結(jié)果的位置在選擇字段為第一值時(shí)是D0T-PR0DUCTA63_q,在選擇字段為第二值時(shí)是dot-producta127_64。圖5A示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的點(diǎn)積指令的操作。具體來(lái)說(shuō),圖5A示出根據(jù)一個(gè)實(shí)施例的DPPS指令的操作。在一個(gè)實(shí)施例中,圖5A所示的實(shí)例的點(diǎn)積操作實(shí)質(zhì)上可由圖4的點(diǎn)積計(jì)算邏輯430來(lái)執(zhí)行。在其它實(shí)施例中,圖5A的點(diǎn)積操作可由包括硬件、軟件或者它們的某種結(jié)合在內(nèi)的其它邏輯來(lái)執(zhí)行。在其它實(shí)施例中,圖4、圖5A和圖5B所示的操作可按照任何組合或順序來(lái)執(zhí)行,以產(chǎn)生點(diǎn)積結(jié)果。在一個(gè)實(shí)施例中,圖5A示出包括總共存儲(chǔ)各為32位的四個(gè)單精度浮點(diǎn)或整數(shù)值A(chǔ)0-A3的存儲(chǔ)單元的128位源寄存器501a。類似地,圖5A中所示的是包括總共存儲(chǔ)各為32位的四個(gè)單精度浮點(diǎn)或整數(shù)值B0-B3的存儲(chǔ)單元的128位目標(biāo)寄存器505a。在一個(gè)實(shí)施例中,源寄存器中存儲(chǔ)的各值A(chǔ)0-A3與目標(biāo)寄存器的對(duì)應(yīng)位置中存儲(chǔ)的對(duì)應(yīng)值B0-B3相乘,以及各所得值A(chǔ)0*B0、A1*B 1、A2*B2、A3*B3(本文中稱作“乘積”)存儲(chǔ)在包括總共存儲(chǔ)各為32位的四個(gè)單精度浮點(diǎn)或整數(shù)值的存儲(chǔ)單元的第一 128位臨時(shí)寄存器(“TEMPI”) 510a的對(duì)應(yīng)存儲(chǔ)單元中。在一個(gè)實(shí)施例中,將乘積對(duì)相加在一起,以及各個(gè)和數(shù)(本文中稱作“中間和數(shù)”)存儲(chǔ)到第二 128位臨時(shí)寄存器(“TEMP2”) 515a和第三128位臨時(shí)寄存器(“TEMP3”)520a的存儲(chǔ)單元中。在一個(gè)實(shí)施例中,乘積存儲(chǔ)到第一和第二臨時(shí)寄存器的最低有效32位元素存儲(chǔ)單元中。在其它實(shí)施例中,它們可存儲(chǔ)在第一和第二臨時(shí)寄存器的其它元素存儲(chǔ)單元中。此外,在一些實(shí)施例中,乘積可存儲(chǔ)在相同寄存器(如第一或第二臨時(shí)寄存器)中。在一個(gè)實(shí)施例中,中間和數(shù)相加在一起(本文中稱作“最終和數(shù)”),并存儲(chǔ)到第四128位臨時(shí)寄存器(“TEMP4”)525a的存儲(chǔ)單元中。在一個(gè)實(shí)施例中,最終和數(shù)存儲(chǔ)到TEMP4 的最低有效32位存儲(chǔ)單元中,而在其它實(shí)施例中,最終和數(shù)存儲(chǔ)到TEMP4的其它存儲(chǔ)單元中。最終和數(shù)然后存儲(chǔ)到目標(biāo)寄存器505a的存儲(chǔ)單元中。最終和數(shù)將要存儲(chǔ)到其中的準(zhǔn)確存儲(chǔ)單元可取決于點(diǎn)積指令中可配置的變量。在一個(gè)實(shí)施例中,包含多個(gè)位存儲(chǔ)單元的立即字段(“IMMy[x]”)可用來(lái)確定最終和數(shù)將要存儲(chǔ)到其中的目標(biāo)寄存器存儲(chǔ)單元。例如,在一個(gè)實(shí)施例中,若IMM8
字段包含第一值(例如“I”),則最終和數(shù)存儲(chǔ)到目標(biāo)寄存器的存儲(chǔ)單元BO中,若IMM8[1]字段包含第一值(例如“I”),則最終和數(shù)存儲(chǔ)到存儲(chǔ)單元BI中,若IMM8[2]字段包含第一值(例如“I”),則最終和數(shù)存儲(chǔ)到目標(biāo)寄存器的存儲(chǔ)單元B2中,以及若IMM8 [3]字段包含第一值(例如“ I”),則最終和數(shù)存儲(chǔ)到目標(biāo)寄存器的存儲(chǔ)單元B3中。在其它實(shí)施例中,其它立即字段可用來(lái)確定最終和數(shù)將要存儲(chǔ)到其中的目標(biāo)寄存器中的存儲(chǔ)單元。在一個(gè)實(shí)施例中,立即字段可用來(lái)控制各乘法和加法運(yùn)算是否在圖5A所示的操作中執(zhí)行。例如,IMM8[4]可用來(lái)表明(例如通過(guò)設(shè)置為“O”或“1”)A0是否將與BO相乘且結(jié)果被存儲(chǔ)到TEMPI中。類似地,IMM8[5]可用來(lái)表明(例如通過(guò)設(shè)置為“O”或“I”)Al是否將與BI相乘且結(jié)果被存儲(chǔ)到TEMPI中。同樣,IMM8[6]可用來(lái)表明(例如通過(guò)設(shè)置為“O”或“1”)A2是否將與Β2相乘且結(jié)果被存儲(chǔ)到TEMPI中。最后,IMM8[7]可用來(lái)表明(例如通過(guò)設(shè)置為“O”或“I”)A3是否將與B3相乘且結(jié)果被存儲(chǔ)到TEMPI中。圖5B示出根據(jù)一個(gè)實(shí)施例的DPH)指令的操作。DPPS與DPTO指令之間的一個(gè)差別在于,DPro對(duì)雙精度浮點(diǎn)和整數(shù)值(例如64位值)而不是單精度值進(jìn)行操作。相應(yīng)地,在一個(gè)實(shí)施例中,執(zhí)行DPro指令與執(zhí)行DPPS指令相比,存在更少要管理的數(shù)據(jù)元素,因此涉及更少的中間操作和存儲(chǔ)裝置(例如寄存器)。在一個(gè)實(shí)施例中,圖5B示出包括總共存儲(chǔ)各為64位的兩個(gè)雙精度浮點(diǎn)或整數(shù)值A(chǔ)O-Al的存儲(chǔ)單元的128位源寄存器501b。類似地,圖5B中所示的是包括總共存儲(chǔ)各為64位的兩個(gè)雙精度浮點(diǎn)或整數(shù)值BO-Bl的存儲(chǔ)單元的128位目標(biāo)寄存器505b。在一個(gè)實(shí)施例中,源寄存器中存儲(chǔ)的各個(gè)值A(chǔ)O-Al與目標(biāo)寄存器的對(duì)應(yīng)位置中存儲(chǔ)的對(duì)應(yīng)值BO-Bl相乘,以及各所得結(jié)果值A(chǔ)0*B0、A1*B1 (本文中稱作“乘積”)存儲(chǔ)在包括總共存儲(chǔ)各為64位的兩個(gè)雙精度浮點(diǎn)或整數(shù)值的存儲(chǔ)單元的第一 128位臨時(shí)寄存器(“TEMPl”)510b的對(duì)應(yīng)存儲(chǔ)單元中。在一個(gè)實(shí)施例中,乘積對(duì)相加在一起,以及各個(gè)和數(shù)(本文中稱作“最終和數(shù)”)存儲(chǔ)到第二 128位臨時(shí)寄存器(“TEMP2”)515b的存儲(chǔ)單元中。在一個(gè)實(shí)施例中,乘積與最終和數(shù)分別存儲(chǔ)到第一和第二臨時(shí)寄存器的最低有效64位元素存儲(chǔ)單元中。在其它實(shí)施例中,它們可存儲(chǔ)在第一和第二臨時(shí)寄存器的其它元素存儲(chǔ)單元中。在一個(gè)實(shí)施例中,最終和數(shù)存儲(chǔ)到目標(biāo)寄存器505b的存儲(chǔ)單元中。最終和數(shù)將要存儲(chǔ)到其中的準(zhǔn)確存儲(chǔ)單元可取決于點(diǎn)積指令中可配置的變量。在一個(gè)實(shí)施例中,包含多個(gè)位存儲(chǔ)單元的立即字段(“IMMy[x]”)可用來(lái)確定最終和數(shù)將要存儲(chǔ)到其中的目標(biāo)寄存器存儲(chǔ)單元。例如,在一個(gè)實(shí)施例中,若IMM8
字段包含第一值(例如“1”),則最終和數(shù)存儲(chǔ)到目標(biāo)寄存器的存儲(chǔ)單元BO中,若IMM8[1]字段包含第一值(例如“I”),則最終和數(shù)存儲(chǔ)到存儲(chǔ)單元BI中。在其它實(shí)施例中,其它立即字段可用來(lái)確定最終和數(shù)將要存儲(chǔ)到其中的目標(biāo)寄存器中的存儲(chǔ)單元。在一個(gè)實(shí)施例中,立即字段可用來(lái)控制各乘法運(yùn)算是否在圖5B所示的點(diǎn)積操作中執(zhí)行。例如,IMM8 [4]可用來(lái)表明(例如通過(guò)設(shè)置為“O”或“1”)A0是否將與BO相乘且結(jié)果被存儲(chǔ)到TEMPI中。類似地,IMM8[5]可用來(lái)表明(例如通過(guò)設(shè)置為“O”或“I”)Al是否將與B I相乘且結(jié)果被存儲(chǔ)到TEMPI中。在其它實(shí)施例中,可采用用于確定是否執(zhí)行點(diǎn)積的乘法運(yùn)算的其它控制技術(shù)。圖6A是根據(jù)一個(gè)實(shí)施例對(duì)單精度整數(shù)或浮點(diǎn)值執(zhí)行點(diǎn)積操作的電路600a的框圖。該實(shí)施例的電路600a通過(guò)乘法器610a_613a將兩個(gè)寄存器601a和605a的對(duì)應(yīng)單精度元素相乘,其結(jié)果可采用立即字段IMM8 [7:4]由復(fù)用器615a-618a進(jìn)行選擇。作為備選的方案,復(fù)用器615a-618a可選擇零值而不是各元素的乘法運(yùn)算的對(duì)應(yīng)乘積。復(fù)用器615a_618a選擇的結(jié)果然后由加法器620a相加在一起,且相加的結(jié)果被存儲(chǔ)在結(jié)果寄存器630a的單元的任一個(gè)中,根據(jù)立即字段IMM8 [3:0]的值,所述結(jié)果寄存器采用復(fù)用器625a-628a來(lái)選擇來(lái)自加法器620a的對(duì)應(yīng)和數(shù)結(jié)果。在一個(gè)實(shí)施例中,若和數(shù)結(jié)果沒(méi)有被選擇來(lái)存儲(chǔ)在結(jié)果單元中,則復(fù)用器625a-628a可選擇零值來(lái)填充結(jié)果寄存器630a的單元。在其它實(shí)施例中,更多加法器可用來(lái)產(chǎn)生各個(gè)乘積之和。此外,在一些實(shí)施例中,中間存儲(chǔ)單元可用來(lái)存儲(chǔ)乘積或和數(shù)結(jié)果,直到對(duì)它們進(jìn)行進(jìn)一步操作為止。圖6B是根據(jù)一個(gè)實(shí)施例對(duì)單精度整數(shù)或浮點(diǎn)值執(zhí)行點(diǎn)積操作的電路600b的框圖。該實(shí)施例的電路600b通過(guò)乘法器610b、612b將兩個(gè)寄存器601b和605b的對(duì)應(yīng)單精度元素相乘,其結(jié)果可采用立即字段IMM8[7:4]由復(fù)用器615b、617b進(jìn)行選擇。作為備選的方案,復(fù)用器615b、618b可選擇零值而不是各元素的乘法運(yùn)算的對(duì)應(yīng)乘積。復(fù)用器615b、618b選擇的結(jié)果然后由加法器620b相加在一起,且相加的結(jié)果被存儲(chǔ)在結(jié)果寄存器630b的單元的任一個(gè)中,根據(jù)立即字段IMM8 [3:0]的值,所述結(jié)果寄存器采用復(fù)用器625b、627b來(lái)選擇來(lái)自加法器620b的對(duì)應(yīng)和數(shù)結(jié)果。在一個(gè)實(shí)施例中,若和數(shù)結(jié)果沒(méi)有被選擇來(lái)存儲(chǔ)在結(jié)果單元中,則復(fù)用器625b-627b可選擇零值來(lái)填充結(jié)果寄存器630b的單元。在其它實(shí)施例中,更多加法器可用來(lái)產(chǎn)生各個(gè)乘積之和。此外,在一些實(shí)施例中,中間存儲(chǔ)單元可用來(lái)存儲(chǔ)乘積或和數(shù)結(jié)果,直到對(duì)它們進(jìn)行進(jìn)一步操作為止。圖7A是根據(jù)一個(gè)實(shí)施例執(zhí)行DPPS指令的操作的偽碼表示。圖7A所示的偽碼表明,源寄存器(“SRC”)中在31-0位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值將與目標(biāo)寄存器(“DEST”)中在31-0位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值相乘,且僅當(dāng)立即字段(“IMM8[4]”)中存儲(chǔ)的立即值等于“I”時(shí),才將結(jié)果存儲(chǔ)在臨時(shí)寄存器(“TEMPI”)的31-0位中。否則,位存儲(chǔ)單元31-0可包含空值,如全零。圖7A中還示出了偽碼來(lái)表明,SRC寄存器中在63-32位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值將與DEST寄存器中在63-32位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值相乘,且僅當(dāng)立即字段(“IMM8[5]”)中存儲(chǔ)的立即值等于“I”時(shí),才將結(jié)果存儲(chǔ)在TEMPI寄存器的63-32位中。否則,位存儲(chǔ)單元63-32可包含空值,如全零。
類似地,圖7A中還示出了偽碼來(lái)表明,SRC寄存器中在95-64位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值將與DEST寄存器中在95-64位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值相乘,且僅當(dāng)立即字段(“IMM8[6]”)中存儲(chǔ)的立即值等于“I”時(shí),才將結(jié)果存儲(chǔ)在TEMPI寄存器的95-64位中。否則,位存儲(chǔ)單元95-64可包含空值,如全零。最后,圖7A中還示出了偽碼來(lái)表明,SRC寄存器中在127-96位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值將與DEST寄存器中在127-96位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值相乘,且僅當(dāng)立即字段(“IMM8[7]”)中存儲(chǔ)的立即值等于“I”時(shí),才將結(jié)果存儲(chǔ)在TEMPI寄存器的127-96位中。否則,位存儲(chǔ)單元127-96可包含空值,如全零。接下來(lái),圖7A示出TEMPI的31-0位被加到TEMPI的63-32位,且結(jié)果被存儲(chǔ)到第二臨時(shí)寄存器(“TEMP2”)的位存儲(chǔ)單元31-0中。類似地,TEMPI的95-64位被加到TEMPI的127-96位,且結(jié)果被存儲(chǔ)到第三臨時(shí)寄存器(“TEMP3”)的位存儲(chǔ)單元31-0中。最后,TEMP2的31-0位被加到TEMP3的31-0位,且結(jié)果被存儲(chǔ)到第四臨時(shí)寄存器(“TEMP4”)的位存儲(chǔ)單元31-0中。在一個(gè)實(shí)施例中,臨時(shí)寄存器中存儲(chǔ)的數(shù)據(jù)然后被存儲(chǔ)到DEST寄存器中。要存儲(chǔ)數(shù)據(jù)的DEST寄存器中的具體位置可取決于DPPS指令中的其它字段,如IMM8[x]中的字段。具體來(lái)說(shuō),圖7A說(shuō)明,在一個(gè)實(shí)施例中,TEMP4的31-0位在IMM8
等于“ I”時(shí)存儲(chǔ)到DEST位存儲(chǔ)單元31-0中,在IMM8[1]等于“I”時(shí)存儲(chǔ)到DEST位存儲(chǔ)單元63-32中,在IMM8[2]等于“ 1 ”時(shí)存儲(chǔ)到DEST位存儲(chǔ)單元95-64中,或者在IMM8 [3]等于“ I ”時(shí)存儲(chǔ)到DEST位存儲(chǔ)單元127-96中。否則,對(duì)應(yīng)的DEST位存儲(chǔ)單元將包含空值,如全零。圖7B是根據(jù)一個(gè)實(shí)施例執(zhí)行DPF1D指令的操作的偽碼表示。圖7B所示的偽碼表明,源寄存器(“SRC”)中在63-0位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值將與目標(biāo)寄存器(“DEST”)中在63-0位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值相乘,且僅當(dāng)立即字段(“IMM8[4]”)中存儲(chǔ)的立即值等于“I”時(shí),才將結(jié)果存儲(chǔ)在臨時(shí)寄存器(“TEMPI”)的63-0位中。否則,位存儲(chǔ)單元63-0可包含空值,如全零。圖7B中還示出了偽碼來(lái)表明,SRC寄存器中在127-64位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值將與DEST寄存器中在127-64位中存儲(chǔ)的單精度浮點(diǎn)或整數(shù)值相乘,且僅當(dāng)立即字段(“IMM8[5]”)中存儲(chǔ)的立即值等于“I”時(shí),才將結(jié)果存儲(chǔ)在TEMPI寄存器的127-64位中。否則,位存儲(chǔ)單元127-64可包含空值,如全零。接下來(lái),圖7B示出,TEMPI的63-0位被加到TEMPI的127-64位,且結(jié)果被存儲(chǔ)到第二臨時(shí)寄存器(“TEMP2”)的位存儲(chǔ)單元63-0中。在一個(gè)實(shí)施例中,臨時(shí)寄存器中存儲(chǔ)的數(shù)據(jù)然后可存儲(chǔ)到DEST寄存器中。要存儲(chǔ)數(shù)據(jù)的DEST寄存器中的具體位置可取決于DPPS指令中的其它字段,如IMM8[x]中的字段。具體地說(shuō),圖7A示出,在一個(gè)實(shí)施例中,若IMM8 [O]等于“ I ”,則TEMP2的63-0位存儲(chǔ)到DEST位存儲(chǔ)單元63-0中,或者若IMM8 [I]等于“ I ”,則TEMP2的63-0位存儲(chǔ)在DEST位存儲(chǔ)單元127-64中。否則,對(duì)應(yīng)的DEST位存儲(chǔ)單元將包含空值,如全零。圖7A和圖7B中公開(kāi)的操作只是可用于本發(fā)明的一個(gè)或多個(gè)實(shí)施例的操作的一種表示。具體地說(shuō),圖7A和圖7B所示的偽碼對(duì)應(yīng)于按照具有128位寄存器的一個(gè)或多個(gè)處理器體系結(jié)構(gòu)所執(zhí)行的操作。其它實(shí)施例可在具有任何大小的寄存器或者其它類型的存儲(chǔ)區(qū)的處理器體系結(jié)構(gòu)中執(zhí)行。此外,其它實(shí)施例可能不采用與圖7A和圖7B中所示的寄存器完全相同的寄存器。例如,在一些實(shí)施例中,不同數(shù)量的臨時(shí)寄存器或者根本沒(méi)有寄存器可用來(lái)存儲(chǔ)操作數(shù)。最后,本發(fā)明的實(shí)施例可采用任何數(shù)量的寄存器或數(shù)據(jù)類型在眾多處理器或處理核心之間來(lái)執(zhí)行。
這樣,公開(kāi)了用于執(zhí)行點(diǎn)積操作的技術(shù)。雖然在附圖中描述和示出了某些示范性實(shí)施例,但是要理解,這些實(shí)施例只是對(duì)寬泛的發(fā)明的說(shuō)明而不是限制,并且本發(fā)明不限于所示及所述的具體構(gòu)造和設(shè)置,因?yàn)楸绢I(lǐng)域的技術(shù)人員在研究本公開(kāi)之后可能會(huì)想到其它各種修改。在例如成長(zhǎng)迅速并且不易預(yù)見(jiàn)進(jìn)一步發(fā)展的這樣的技術(shù)領(lǐng)域中,通過(guò)實(shí)現(xiàn)技術(shù)發(fā)展來(lái)推動(dòng),可在不背離本公開(kāi)的原理或所附權(quán)利要求的范圍的前提下,容易地對(duì)所公開(kāi)的實(shí)施例在設(shè)置和細(xì)節(jié)方面進(jìn)行修改。
權(quán)利要求
1.一種用于執(zhí)行點(diǎn)積運(yùn)算的處理器,包括解碼器,用于對(duì)單指令多數(shù)據(jù)(SIMD)點(diǎn)積指令進(jìn)行解碼,該點(diǎn)積指令指定存儲(chǔ)包括第一數(shù)據(jù)值和第三數(shù)據(jù)值的第一打包操作數(shù)的第一寄存器,存儲(chǔ)包括第二數(shù)據(jù)值和第四數(shù)據(jù)值的第二打包操作數(shù)的第二寄存器,和控制值;以及邏輯,對(duì)解碼的SIMD點(diǎn)積指令作出響應(yīng),取決于所述控制值從所述第一打包操作數(shù)和所述第二打包操作數(shù)中選擇各自的數(shù)據(jù)值,以便將它們的乘積包括在點(diǎn)積中,該邏輯包括將所選的第一數(shù)據(jù)值和第二數(shù)據(jù)值相乘以產(chǎn)生第一乘積的第一乘法器、將所選的第三數(shù)據(jù)值和第四數(shù)據(jù)值相乘以產(chǎn)生第二乘積的第二乘法器,該邏輯還包括至少將所述第一乘積和所述第二乘積相加在一起以產(chǎn)生和數(shù)的加法器,并取決于控制值將和數(shù)或空值存儲(chǔ)為目標(biāo)寄存器的第一打包值,以及取決于控制值將和數(shù)或空值存儲(chǔ)為目標(biāo)寄存器的第二打包值。
2.如權(quán)利要求I所述的處理器,其中,所述第二寄存器與所述目標(biāo)寄存器相同。
3.如權(quán)利要求I或2所述的處理器,其中,所述第一打包操作數(shù)還包括第五數(shù)據(jù)值且所述第二打包操作數(shù)包括第六數(shù)據(jù)值,且其中所述邏輯還包括將所選的第五數(shù)據(jù)值和第六數(shù)據(jù)值相乘以產(chǎn)生第三乘積的第三乘法器,至少將所述第一乘積、所述第二乘積和所述第三乘積相加在一起以產(chǎn)生和數(shù)的加法器。
4.如權(quán)利要求3所述的處理器,其中,所述邏輯還取決于控制值將所述和數(shù)或空值存儲(chǔ)為目標(biāo)寄存器的第三打包值。
5.如權(quán)利要求3或4所述的處理器,其中,所述第一打包操作數(shù)還包括第七數(shù)據(jù)值且所述第二打包操作數(shù)包括第八數(shù)據(jù)值,且其中所述邏輯還包括將所選的第七數(shù)據(jù)值和第八數(shù)據(jù)值相乘以產(chǎn)生第四乘積的第四乘法器,至少將所述第一乘積、所述第二乘積、所述第三乘積和所述第四乘積相加在一起以產(chǎn)生和數(shù)的加法器。
6.如權(quán)利要求5所述的處理器,其中,所述邏輯還取決于控制值將所述和數(shù)或空值存儲(chǔ)為目標(biāo)寄存器的第四打包值。
7.如權(quán)利要求1-6中任一項(xiàng)所述的處理器,其中,所述邏輯還包括取決于控制值的第一位,在所述第一乘積和空值之間進(jìn)行選擇的第一復(fù)用器。
8.如權(quán)利要求7所述的處理器,其中,所述邏輯還包括取決于控制值的第二位,在所述第二乘積和空值之間進(jìn)行選擇的第二復(fù)用器。
9.如權(quán)利要求8所述的處理器,其中,所述邏輯還包括在將要存儲(chǔ)在目標(biāo)寄存器的第一單元中的所述和數(shù)和空值之間進(jìn)行選擇的第三復(fù)用器。
10.如權(quán)利要求9所述的處理器,其中,所述邏輯還包括在將要存儲(chǔ)在目標(biāo)寄存器的第二單元中的所述和數(shù)和空值之間進(jìn)行選擇的第四復(fù)用器。
11.如權(quán)利要求I或2所述的處理器,其中,所述第一打包操作數(shù)和第二打包操作數(shù)包括為64位整數(shù)值的數(shù)據(jù)值。
12.如權(quán)利要求I或2所述的處理器,其中,所述第一打包操作數(shù)和第二打包操作數(shù)包括為64位浮點(diǎn)值的數(shù)據(jù)值。
13.如權(quán)利要求1-10中任一項(xiàng)所述的處理器,其中,所述第一打包操作數(shù)和第二打包操作數(shù)包括為32位整數(shù)值的數(shù)據(jù)值。
14.如權(quán)利要求1-10中任一項(xiàng)所述的處理器,其中,所述第一打包操作數(shù)和第二打包操作數(shù)包括為32位浮點(diǎn)值的數(shù)據(jù)值。
15.如權(quán)利要求1-14中任一項(xiàng)所述的處理器,其中,所述第一寄存器和第二寄存器將存儲(chǔ)至少128位數(shù)據(jù)。
16.一種用于按照由點(diǎn)積指令指示的控制值執(zhí)行單指令多數(shù)據(jù)(SIMD)點(diǎn)積指令的方法,該方法包括 按照所述控制值,從第一打包操作數(shù)和第二打包操作數(shù)中選擇各自的數(shù)據(jù)元素以便將它們的乘積包括在點(diǎn)積中; 將第一打包操作數(shù)的第一對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第一對(duì)應(yīng)的數(shù)據(jù)元素相乘以產(chǎn)生所選的第一乘積; 將第一打包操作數(shù)的第二對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第二對(duì)應(yīng)的數(shù)據(jù)元素相乘以產(chǎn)生所選的第二乘積; 將所選的第一乘積與所選的第二乘積相加在一起,以至少部分產(chǎn)生點(diǎn)積結(jié)果;以及按照所述控制值,或者將所述點(diǎn)積結(jié)果或者將零值存儲(chǔ)為目標(biāo)操作數(shù)的第一打包值,以及或者將所述點(diǎn)積結(jié)果或者將零值存儲(chǔ)為目標(biāo)操作數(shù)的第二打包值。
17.如權(quán)利要求16所述的方法,還包括 將第一打包操作數(shù)的第三對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第三對(duì)應(yīng)的數(shù)據(jù)元素相乘以產(chǎn)生所選的第三乘積; 將所選的第一乘積、所選的第二乘積與所選的第三乘積相加在一起,以至少部分產(chǎn)生點(diǎn)積結(jié)果;以及 按照所述控制值,或者將所述點(diǎn)積結(jié)果或者將零值存儲(chǔ)為目標(biāo)操作數(shù)的第三打包值。
18.如權(quán)利要求17所述的方法,還包括 將第一打包操作數(shù)的第四對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第四對(duì)應(yīng)的數(shù)據(jù)元素相乘以產(chǎn)生所選的第四乘積; 將所選的第一乘積、所選的第二乘積、所選的第三乘積與所選的第四乘積相加在一起,以至少部分產(chǎn)生點(diǎn)積結(jié)果;以及 按照所述控制值,或者將所述點(diǎn)積結(jié)果或者將零值存儲(chǔ)為目標(biāo)操作數(shù)的第四打包值。
19.如權(quán)利要求16-18中任一項(xiàng)所述的方法,其中,所述第一打包操作數(shù)的第一和第二對(duì)應(yīng)的數(shù)據(jù)元素以及所述第二打包操作數(shù)的第一和第二對(duì)應(yīng)的數(shù)據(jù)元素為32位浮點(diǎn)值。
20.如權(quán)利要求16所述的方法,其中,所述第一打包操作數(shù)的第一和第二對(duì)應(yīng)的數(shù)據(jù)元素以及所述第二打包操作數(shù)的第一和第二對(duì)應(yīng)的數(shù)據(jù)元素為64位浮點(diǎn)值。
21.—種處理系統(tǒng),包括 存儲(chǔ)單指令多數(shù)據(jù)(SIMD)點(diǎn)積指令的存儲(chǔ)器; 耦合到所述存儲(chǔ)器的處理器,用于對(duì)多個(gè)操作數(shù)執(zhí)行SMD點(diǎn)積指令,每個(gè)操作數(shù)包括可按照由SIMD點(diǎn)積指令指示的控制值選擇的多個(gè)對(duì)應(yīng)的打包值,以便將它們的乘積包括在點(diǎn)積中,并取決于控制值將點(diǎn)積或零值存儲(chǔ)為目標(biāo)操作數(shù)的第一打包值,以及取決于控制值將點(diǎn)積或零值存儲(chǔ)為目標(biāo)操作數(shù)的第二打包值。
22.如權(quán)利要求21所述的處理系統(tǒng),其中,為了將它們的乘積包括在點(diǎn)積中而按照控制值選擇的對(duì)應(yīng)的打包值包括 第一打包操作數(shù)的第一對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第一對(duì)應(yīng)的數(shù)據(jù)元素;以及第一打包操作數(shù)的第二對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第二對(duì)應(yīng)的數(shù)據(jù)元素。
23.如權(quán)利要求22所述的處理系統(tǒng),其中,為了將它們的乘積包括在點(diǎn)積中而按照控制值選擇的對(duì)應(yīng)的打包值包括第一打包操作數(shù)的第三對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第三對(duì)應(yīng)的數(shù)據(jù)元素。
24.如權(quán)利要求23所述的處理系統(tǒng),其中,所述處理器對(duì)所述多個(gè)操作數(shù)執(zhí)行SMD點(diǎn)積指令并且還取決于控制值將點(diǎn)積或零值存儲(chǔ)為目標(biāo)操作數(shù)的第三打包值。
25.如權(quán)利要求24所述的處理系統(tǒng),其中,為了將它們的乘積包括在點(diǎn)積中而按照控制值選擇的對(duì)應(yīng)的打包值包括第一打包操作數(shù)的第四對(duì)應(yīng)的數(shù)據(jù)元素和第二打包操作數(shù)的第四對(duì)應(yīng)的數(shù)據(jù)元素,以及其中所述處理器還取決于控制值將點(diǎn)積或零值存儲(chǔ)為目標(biāo)操作數(shù)的第四打包值。
26.如權(quán)利要求21-25中任一項(xiàng)所述的處理系統(tǒng),其中,所述SMD點(diǎn)積指令包含源操作數(shù)指示符、目標(biāo)操作數(shù)指示符以及至少一個(gè)立即值指示符。
27.如權(quán)利要求26所述的處理系統(tǒng),其中,所述源操作數(shù)指示符包括具有存儲(chǔ)多個(gè)打包值的多個(gè)單元的源寄存器的地址。
28.如權(quán)利要求26或27所述的處理系統(tǒng),其中,所述目標(biāo)操作數(shù)指示符包括具有存儲(chǔ)多個(gè)打包值的多個(gè)單元的目標(biāo)寄存器的地址。
29.如權(quán)利要求26-28中任一項(xiàng)所述的處理系統(tǒng),其中,所述立即值指示符包括多個(gè)控制位。
30.如權(quán)利要求23-29中任一項(xiàng)所述的處理系統(tǒng),其中,多個(gè)對(duì)應(yīng)的打包值各為雙精度整數(shù)。
31.如權(quán)利要求23-29中任一項(xiàng)所述的處理系統(tǒng),其中,多個(gè)對(duì)應(yīng)的打包值各為雙精度浮點(diǎn)值。
32.如權(quán)利要求23-29中任一項(xiàng)所述的處理系統(tǒng),其中,多個(gè)對(duì)應(yīng)的打包值各為單精度整數(shù)。
33.如權(quán)利要求23-29中任一項(xiàng)所述的處理系統(tǒng),其中,多個(gè)對(duì)應(yīng)的打包值各為單精度浮點(diǎn)值。
全文摘要
本發(fā)明的名稱是“用于執(zhí)行點(diǎn)積運(yùn)算的指令和邏輯”。本發(fā)明提供了用于執(zhí)行點(diǎn)積操作的方法、裝置和程序部件。在一個(gè)實(shí)施例中,裝置包括執(zhí)行第一指令的執(zhí)行資源。響應(yīng)第一指令,所述執(zhí)行資源將等于至少兩個(gè)操作數(shù)的點(diǎn)積的結(jié)果值存儲(chǔ)到某個(gè)存儲(chǔ)單元中。
文檔編號(hào)G06F7/544GK102622203SQ20111046073
公開(kāi)日2012年8月1日 申請(qǐng)日期2007年9月20日 優(yōu)先權(quán)日2006年9月20日
發(fā)明者C·德西爾瓦, M·塞科尼, M·布克斯頓, R·佐哈, R·帕塔薩拉蒂, S·欽努帕蒂 申請(qǐng)人:英特爾公司