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

用于指令的快速失敗處理的裝置和方法_4

文檔序號(hào):8491691閱讀:來源:國(guó)知局
因此不能夠執(zhí)行當(dāng)前的命令。在這種情況下,在稍后該加 速器不再忙碌的時(shí)候,可成功地執(zhí)行該XCALL指令。由此,響應(yīng)于該失敗指示,在結(jié)果寄存 器中永久位818被設(shè)置為0以指示可進(jìn)行執(zhí)行該XCALL指令的第二嘗試。
[0123] 相比之下,如果所請(qǐng)求的當(dāng)前命令和/或參數(shù)組合不被該加速器支持,則該加速 器將永遠(yuǎn)不能夠成功地執(zhí)行該命令。由此,響應(yīng)于該失敗指示,在結(jié)果寄存器中該永久位 818被設(shè)置為1以指示第二嘗試將不會(huì)導(dǎo)致該XCALL指令的成功執(zhí)行。
[0124] 隨后,后續(xù)的程序代碼可讀取該結(jié)果寄存器以確定如何繼續(xù)。例如,如果永久位被 設(shè)置為〇,則后續(xù)的程序代碼可再次嘗試執(zhí)行該XCALL指令,而如果該永久位被設(shè)置為1,則 加速器可不嘗試執(zhí)行該XCALL指令。
[0125] 圖10是示出用于實(shí)現(xiàn)這種模式的操作的本發(fā)明的一個(gè)實(shí)施例的流程圖。可由執(zhí) 行單元內(nèi)的邏輯實(shí)現(xiàn)該流程圖中指定的操作。在1001處,嘗試執(zhí)行第一指令,并且在1002 處,嘗試執(zhí)行第二指令。如果在1003處確定成功地執(zhí)行了該第一指令,則在1004處,該第 二指令也被成功地執(zhí)行。例如,該第二指令可依賴于被寫入到寄存器(例如,上述的結(jié)果寄 存器)中的第一指令的結(jié)果。
[0126] 如果沒有成功地執(zhí)行該第一指令,則在1005處,第二指令也不能執(zhí)行。與現(xiàn)有實(shí) 現(xiàn)相比,在1006處檢查復(fù)雜的失敗細(xì)節(jié)而不調(diào)用異常處理程序,從而可由應(yīng)用程序代碼執(zhí) 行失敗評(píng)估。具體而言,可執(zhí)行后續(xù)的指令以從結(jié)果寄存器中讀取結(jié)果,并且確定是否應(yīng)當(dāng) 進(jìn)行對(duì)執(zhí)行該第一指令的新嘗試。如果該失敗的結(jié)果指示第二嘗試將不起作用,則可阻止 該第二嘗試,從而節(jié)省時(shí)間和處理器資源。如果這些結(jié)果指示第二嘗試可能成功,則可進(jìn)行 執(zhí)行該第一指令的第二嘗試。盡管為了易于解釋,提供了這些具體示例,但是應(yīng)當(dāng)注意,本 發(fā)明的基本原理不限于這些具體細(xì)節(jié)。
[0127] 因此,在本文所描述的本發(fā)明的多個(gè)實(shí)施例中,指令的普通目的地寄存器用于雙 重作用;在正常執(zhí)行的情況下,它們保存結(jié)果,并且如果指令失敗,則它們保存失敗細(xì)節(jié)。這 與當(dāng)前的實(shí)現(xiàn)不同,在當(dāng)前的實(shí)現(xiàn)中,存在用于計(jì)算結(jié)果和用于失敗結(jié)果的專用寄存器,并 且/或者其中必須調(diào)用異常處理程序。這些技術(shù)可應(yīng)用于可編程處理器(GPU、DSP、GPU、~) 的所有提供者。
[0128] 使用復(fù)雜指令的快速失敗處理開放了實(shí)現(xiàn)以其他方式將難以定義為高效指令的、 諸如XCALL之類的指令的可能性。使用此類高效指令的處理器將實(shí)現(xiàn)改善的性能和減少的 開發(fā)成本。
[0129]仵各可切換同步硬件加諫器
[0130] 同步硬件加速器需要確保在異常情況下向前進(jìn)展;為此,它們需要將其狀態(tài)保存 在幸免于保存和恢復(fù)操作(例如,x86架構(gòu)中的XSAVE/XRESTORE)的位置中。本發(fā)明的一 個(gè)實(shí)施例通過擴(kuò)展該保存/恢復(fù)區(qū)來啟用該操作,以便支持新的硬件加速器(例如,上述的 和圖8A中所示的那些加速器)。
[0131] 本發(fā)明的一個(gè)實(shí)施例將存儲(chǔ)器中的棧區(qū)用于存儲(chǔ)同步硬件加速器的中間狀態(tài),以 便允許強(qiáng)健的異常模型(包括處理任務(wù)切換和核迀移,而沒有操作系統(tǒng)(0S)啟用)。具體 而言,本發(fā)明的多個(gè)實(shí)施例允許諸如同步硬件加速器之類的加速器能夠?qū)⑵錉顟B(tài)保存在存 儲(chǔ)器棧中,并且在各種類型的處理器事件(例如,下述由異常處理程序管理的異常)之后能 夠安全地恢復(fù)其狀態(tài)。
[0132] 在一個(gè)實(shí)施例中,硬件加速器調(diào)用被視為CALL指令,在該CALL指令中,該加速器 可消耗用戶棧上的區(qū)域以保存其狀態(tài)。當(dāng)異常和/或中斷迫使該加速器暫停時(shí),該狀態(tài)是 自動(dòng)地持久的,并且當(dāng)在異常處理程序、上下文切換和/或核迀移之后恢復(fù)該加速器時(shí),該 狀態(tài)是可用的。在后一種情況下,恢復(fù)計(jì)算的硬件加速器可以是不同的加速器(與新核關(guān) 聯(lián)的加速器)。在這種情況下,該新核可訪問棧中(例如,從存儲(chǔ)器或共享高速緩存中)被 保存的狀態(tài)。
[0133] 在一個(gè)實(shí)施例中,同步加速器被當(dāng)作被調(diào)用的庫函數(shù),該同步加速器在調(diào)用之后 使用棧,隨后,當(dāng)被完成時(shí),釋放棧的這部分(表現(xiàn)得像函數(shù)調(diào)用)。在一個(gè)實(shí)施例中,當(dāng)加 速器被調(diào)用時(shí),棧指針被移動(dòng),以便對(duì)被調(diào)用的加速器的本地變量起作用。當(dāng)該調(diào)用完成 時(shí),該棧指針被返回到其最初所在的地方,使得調(diào)用程序能夠在調(diào)用發(fā)生時(shí)該棧指針停止 之處開始。在一個(gè)實(shí)施例中,假如異常處理程序被調(diào)用,則程序的棧指針被調(diào)節(jié)以反映加速 器的棧使用,進(jìn)而確保該異常處理程序不修改該加速器的保存區(qū)。
[0134] 圖11A中示出本發(fā)明的一個(gè)實(shí)施例,圖11示出存儲(chǔ)器中的硬件棧1150、應(yīng)用硬件 線程1151和加速器線程1152。圖11中所示的特定棧1150包括:調(diào)用程序棧區(qū)1120,用于 存儲(chǔ)與應(yīng)用硬件線程1151的執(zhí)行相關(guān)聯(lián)的數(shù)據(jù);加速器保存區(qū)1130,用于存儲(chǔ)與加速器線 程1152的執(zhí)行相關(guān)聯(lián)的數(shù)據(jù);以及異常處理程序棧區(qū)1140,用于存儲(chǔ)與異常處理程序1105 的執(zhí)行相關(guān)聯(lián)的數(shù)據(jù)。
[0135] 在一個(gè)實(shí)施例中,在應(yīng)用硬件線程的執(zhí)行期間,加速器功能被調(diào)用。作為響應(yīng),棧 指針被調(diào)節(jié)為指向加速器保存區(qū)1130的頂部,并且在1101處,鎖定轉(zhuǎn)換后備緩沖器(TLB) 中與該加速器保存區(qū)1130相關(guān)聯(lián)的的條目。這樣做的一個(gè)原因在于,如果異常發(fā)生并且加 速器保存其狀態(tài)(無論是在棧上還是在另一被指定的存儲(chǔ)器區(qū)中),期望避免將會(huì)將原始 異常轉(zhuǎn)換為雙倍異常的附加的頁錯(cuò)誤。避免這樣的一種方法是,當(dāng)加速器開始工作時(shí),鎖定 用于加速器保存區(qū)1130的一個(gè)(或多個(gè))TLB頁條目,進(jìn)而確保沒有此類頁錯(cuò)誤將被生成。 0S可仍然將該頁標(biāo)記為不可用,但是,但該0S被迫推遲物理地驅(qū)逐該頁,直到下一個(gè)上下 文切換(當(dāng)線程完全不運(yùn)行,并且加速器狀態(tài)被安全地保存時(shí))為止。在從上下文切換返 回時(shí),該加速器重新獲取這些TLB頁條目(其可指向不同的物理位置),加載狀態(tài),并且繼 續(xù)。大型加速器保存區(qū)可跨越多個(gè)TLB頁(在極端情況下,跨越幾十個(gè)4k頁)。通過使用 大型頁(例如,64k頁),可減少需要被鎖定的TLB條目的數(shù)量。
[0136] 在1102處,該加速器基于其正在執(zhí)行的命令執(zhí)行操作,并且在1103處,該加速器 將其當(dāng)前的狀態(tài)保存到棧1150內(nèi)的加速器保存區(qū)1130中。然后,如1104處所示,該加速 器解鎖TLB 1104(其在1101處已被鎖定以避免上述附加的頁錯(cuò)誤)。如所示出的那樣,檢 測(cè)到異常事件,該異常事件被傳送到在應(yīng)用軟件線程1151內(nèi)被執(zhí)行的異常處理程序1105 中。在執(zhí)行期間,該執(zhí)行處理程序可使用棧1150的部分1140進(jìn)行讀取/寫入(即,它在處 理該異常條件期間,將異常處理程序棧1140用于存儲(chǔ)中間狀態(tài)信息)。一旦該異常處理程 序已完成其操作,則它允許加速器線程1152恢復(fù)。
[0137] 在1106處,該加速器再次鎖定TLB(出于與上述相同的原因),并且在1107處, 該加速器加載先前已被存儲(chǔ)到加速器保存區(qū)1130中的狀態(tài)。注意,在該階段,加速器線程 1152實(shí)際上可在與該加速器線程的第一部分(操作1101-1104)不同的核或處理器上被執(zhí) 行。在此類情況下,該加速器可簡(jiǎn)單地從加速器保存區(qū)1130 (其在物理上可位于共享存儲(chǔ) 器或高速緩沖中)中加載被保存的加速器狀態(tài)。然后,該加速器在1108處完成其執(zhí)行線程, 在1109處解鎖TLB,并且在1110處完成。然后,控制被往回傳送到應(yīng)用硬件線程1151,該 應(yīng)用硬件線程將棧指針重置到加速器保存區(qū)1130的頂部(即,當(dāng)加速器開始執(zhí)行加速器線 程1152時(shí)該棧指針停止的地方)。
[0138] 將會(huì)理解,可實(shí)現(xiàn)對(duì)以上提供的具體細(xì)節(jié)的各種修改而仍然符合本發(fā)明的基本原 理。例如,在一個(gè)實(shí)施例中,可為加速器指定特定的存儲(chǔ)器區(qū)以在其中保存其狀態(tài)(而不是 使用棧)。在這種情況下,沒有必要為異常處理程序修改程序的棧指針。
[0139] 在任一實(shí)施例中,本文中描述的多種技術(shù)允許加速器在調(diào)用線程在(對(duì)稱的)核 之間被迀移時(shí)透明地工作;一個(gè)核上的加速器將其狀態(tài)保存到存儲(chǔ)器中,并且當(dāng)該線程在 另一核上被調(diào)度時(shí),那里的加速器從存儲(chǔ)器中(例如,為了高效,經(jīng)由共享公共高速緩存) 加載該數(shù)據(jù)。因此,本文中描述的本發(fā)明的多個(gè)實(shí)施例在存在異常、上下文切換和/或核迀 移并且不啟用0S (例如,不修改XSAVE/XRESTORE和/或添加架構(gòu)寄存器)的情況下,允許 加速器透明地保存其狀態(tài)并確保向前進(jìn)展。這轉(zhuǎn)而允許使用先前需要經(jīng)由被修改的XSAVE 來添加新架構(gòu)寄存器并啟用0S的加速器形式。使用此類加速器的的處理器實(shí)現(xiàn)改善的性 能和減少的開發(fā)成本。
[0140] 示例性指令格式
[0141] 能以不同的格式使本文所述的指令的多個(gè)實(shí)施例具體化。另外,在下文中詳述示 例性系統(tǒng)、架構(gòu)和流水線。指令的實(shí)施例可在此類系統(tǒng)、架構(gòu)和及流水線上執(zhí)行,但是不限 于詳述的系統(tǒng)、架構(gòu)和流水線。
[0142]向量友好指令格式是適于向量指令(例如,存在專用于向量操作的某些字段)的 指令格式。盡管描述了其中通過向量友好指令格式支持向量和標(biāo)量操作兩者的實(shí)施例,但 是替代實(shí)施例僅使用通過向量友好指令格式的向量操作。
[0143] 圖12A-12B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板 的框圖。圖12A是示出根據(jù)本發(fā)明的多個(gè)實(shí)施例的通用向量友好指令格式及其A類指令模 板的框圖;而圖12B是示出根據(jù)本發(fā)明的多個(gè)實(shí)施例的通用向量友好指令格式及其B類指 令模板的框圖。具體而言,針對(duì)通用向量友好指令格式1100定義A類和B類指令模板,兩 者都包括無存儲(chǔ)器訪問1105的指令模板和存儲(chǔ)器訪問1120的指令模板。在向量友好指令 格式的上下文中的術(shù)語"通用"是指不束縛于任何特定指令集的指令格式。
[0144] 盡管將描述其中向量友好指令格式支持以下情況的本發(fā)明的實(shí)施例,但是替代實(shí) 施例可支持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù))與更 大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度):64字節(jié)向量操 作數(shù)長(zhǎng)度(或尺寸)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)(并且 由此,64字節(jié)向量由16個(gè)雙字尺寸的元素或者替代地8個(gè)四字尺寸的元素組成)、64字節(jié) 向量操作數(shù)長(zhǎng)度(或尺寸)與16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)、 32字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或 8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)、以及16字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與32位 (4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸),但是 替代實(shí)施例可支持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù)) 與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
[0145] 圖12A中的A類指令模板包括:1)在無存儲(chǔ)器訪問1105的指令模板內(nèi),示出無 存儲(chǔ)器訪問的完全舍入控制型操作1110的指令模板以及無存儲(chǔ)器訪問的數(shù)據(jù)變換型操 作1115的指令模板;以及2)在存儲(chǔ)器訪問1120的指令模板內(nèi),示出存儲(chǔ)器訪問的時(shí)效性 1125的指令模板和存儲(chǔ)器訪問的非時(shí)效性1130的指令模板。圖11B中的B類指令模板包 括:1)在無存儲(chǔ)器訪問1105的指令模板內(nèi),示出無存儲(chǔ)器訪問的寫掩碼控制的部分舍入控 制型操作1112的指令模板以及無存儲(chǔ)器訪問的寫掩碼控制的vsize型操作1117的指令模 板;以及2)在存儲(chǔ)器訪問1120的指令模板內(nèi),示出存儲(chǔ)器訪問的寫掩碼控制1127的指令 模板。
[0146] 通用向量友好指令格式1100包括以下列出的按照在圖12A-12B中示出的順序的 如下字段。
[0147] 格式字段1140 -該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)向量友好 指令格式,并且由此標(biāo)識(shí)指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段對(duì)于僅具 有通用向量友好指令格式的指令集是不需要的,在這個(gè)意義上該字段是可選的。
[0148] 基礎(chǔ)操作字段1142 -其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
[0149] 寄存器索引字段1144-其內(nèi)容直接或者通過地址生成來指定源或目的地操作數(shù) 在寄存器中或者在存儲(chǔ)器中的位置。這些字段包括從PxQ(例如,32x512、16xl28、32xl024、 64x1024)寄存器組中選擇N個(gè)寄存器的足夠數(shù)量的位。盡管在一個(gè)實(shí)施例中N可多至三個(gè) 源和一個(gè)目的地寄存器,但是替代實(shí)施例可支持更多或更少的源和目的地寄存器(例如, 可支持多至兩個(gè)源(其中,這些源中的一個(gè)源還用作目的地),可支持多至三個(gè)源(其中,這 些源中的一個(gè)源還用作目的地),可支持多至兩個(gè)源和一個(gè)目的地)。
[0150] 修飾符(modifier)字段1146 -其內(nèi)容將指定存儲(chǔ)器訪問的以通用向量指令格式 出現(xiàn)的指令與不指定存儲(chǔ)器訪問的以通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲(chǔ)器 訪問1105的指令模板與存儲(chǔ)器訪問1120的指令模板之間進(jìn)行區(qū)分。存儲(chǔ)器訪問操作讀取 和/或?qū)懭氲酱鎯?chǔ)器層次結(jié)構(gòu)(在一些情況下,使用寄存器中的值來指定源和/或目的地 地址),而非存儲(chǔ)器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個(gè)實(shí)施 例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但是替代實(shí)施例可支 持更多、更少或不同的方式來執(zhí)行存儲(chǔ)器地址計(jì)算。
[0151] 擴(kuò)充操作字段1150 -其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪 一個(gè)操作。該字段是針對(duì)上下文的。在本發(fā)明的一個(gè)實(shí)施例中,該字段被劃分成類字段 1168、a字段1152、以及0字段1154。擴(kuò)充操作字段1150允許在單條指令而非2、3或4 條指令中執(zhí)行多組共同的操作。
[0152] 比例字段1160 -其內(nèi)容允許用于存儲(chǔ)器地址生成(例如,用于使用2tw *索引+ 基址的地址生成)的索引字段的內(nèi)容的按比例縮放。
[0153] 位移字段1162A -其內(nèi)容用作存儲(chǔ)器地址生成的一部分(例如,用于使用2tw * 索引+基址+位移的地址生成)。
[0154] 位移因數(shù)字段1162B(注意,位移字段1162A直接在位移因數(shù)字段1162B上的并置 指示使用一個(gè)或另一個(gè))一其內(nèi)容用作地址生成的一部分,它指定通過存儲(chǔ)器訪問的尺寸 (N)按比例縮放的位移因數(shù),其中N是存儲(chǔ)器訪問中的字節(jié)數(shù)量(例如,用于使用2 tw*索引 +基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段的 內(nèi)容乘以存儲(chǔ)器操作數(shù)總尺寸(N)以生成在計(jì)算有效地址
當(dāng)前第4頁1 2 3 4 5 6 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
灌南县| 永靖县| 定结县| 北海市| 临沭县| 乃东县| 武陟县| 乌海市| 洛阳市| 永平县| 安多县| 尼玛县| 台北市| 石泉县| 蕲春县| 磐石市| 阿克陶县| 宁河县| 炉霍县| 青龙| 于都县| 屯门区| 彭泽县| 正阳县| 黄平县| 奇台县| 保康县| 获嘉县| 阳高县| 丹东市| 麻阳| 惠安县| 新建县| 当涂县| 探索| 大田县| 湘西| 安乡县| 南宫市| 宝鸡市| 晴隆县|