本技術(shù)涉及數(shù)據(jù)處理領(lǐng)域。更具體地,本技術(shù)涉及對(duì)事務(wù)的處理。
背景技術(shù):
一些數(shù)據(jù)處理裝置可以支持對(duì)事務(wù)的處理,其中,在事務(wù)開始事件之后,隨后推測(cè)性地執(zhí)行后續(xù)的數(shù)據(jù)處理操作(例如,數(shù)據(jù)訪問操作),直到事件結(jié)束事件發(fā)生,此時(shí)可以提交推測(cè)性地執(zhí)行的操作的結(jié)果。如果在事務(wù)結(jié)束事件之前發(fā)生中止事件,則可以丟棄推測(cè)性結(jié)果。這種類型的處理可以被稱為事務(wù)存儲(chǔ)器,并且可以用于確保一系列操作原子地完成而不受其它處理的干擾。然而,事務(wù)的處理可能需要額外的資源才能正常運(yùn)行,這可消耗硅片不動(dòng)產(chǎn)和功率。
技術(shù)實(shí)現(xiàn)要素:
從一個(gè)方面來看,本技術(shù)提供了一種裝置,包括:
多個(gè)處理元件,用于執(zhí)行數(shù)據(jù)處理;以及
在多個(gè)處理元件之間共享的用于支持事務(wù)的處理的至少一個(gè)事務(wù)處理資源,每個(gè)事務(wù)包括跟隨在事務(wù)開始事件之后推測(cè)性地執(zhí)行的一個(gè)或多個(gè)數(shù)據(jù)處理操作,針對(duì)事務(wù)的推測(cè)性地執(zhí)行的數(shù)據(jù)處理操作的結(jié)果響應(yīng)于事務(wù)結(jié)束事件而被提交;
其中至少一個(gè)事務(wù)處理資源支持每次針對(duì)最多m個(gè)處理元件的事務(wù)的處理,其中m小于處理元件的數(shù)量。
從另一方面來看,本技術(shù)提供了一種裝置,包括:
用于執(zhí)行數(shù)據(jù)處理的多個(gè)處理裝置;以及
用于支持事務(wù)的處理的至少一個(gè)事務(wù)處理資源裝置,每個(gè)事務(wù)包括跟隨在事務(wù)開始事件之后推測(cè)性地執(zhí)行的一個(gè)或多個(gè)數(shù)據(jù)處理操作,針對(duì)事務(wù)的推測(cè)性地執(zhí)行的數(shù)據(jù)處理操作的結(jié)果響應(yīng)于事務(wù)結(jié)束事件而被提交;
其中至少一個(gè)事務(wù)處理資源裝置在多個(gè)處理裝置之間共享;并且
至少一個(gè)事務(wù)處理資源裝置支持每次針對(duì)最多m個(gè)處理裝置的事務(wù)的處理,其中m小于處理裝置的數(shù)量。
從另一方面來看,本技術(shù)提供了一種用于包括多個(gè)處理元件的裝置的數(shù)據(jù)處理方法,該方法包括:
響應(yīng)于事務(wù)開始事件,請(qǐng)求使用在多個(gè)處理元件之間共享的至少一個(gè)事務(wù)處理資源來進(jìn)行事務(wù)的處理,其中所述至少一個(gè)事務(wù)處理資源支持每次針對(duì)最多m個(gè)處理元件的事務(wù)的處理,其中m小于處理元件的數(shù)量;以及
當(dāng)至少一個(gè)事務(wù)處理資源可用于處理事務(wù)時(shí):
使用至少一個(gè)事務(wù)處理資源來推測(cè)性地執(zhí)行跟隨在事務(wù)開始事件之后的一個(gè)或多個(gè)數(shù)據(jù)處理操作;并且
響應(yīng)于事務(wù)結(jié)束事件,提交推測(cè)性地執(zhí)行的數(shù)據(jù)處理操作的結(jié)果。
附圖說明
從以下結(jié)合附圖閱讀的示例的描述中,本技術(shù)的其它方面、特征和優(yōu)點(diǎn)將變得顯而易見,其中:
圖1示出了具有專用事務(wù)處理元件和多個(gè)通用處理元件的裝置的示例,專用事務(wù)處理元件具有用于處理事務(wù)的資源,多個(gè)通用處理元件不具有支持事務(wù)的處理的資源;
圖2示出了包括多個(gè)處理元件的裝置的第二示例,其中一個(gè)處理元件支持通用處理和對(duì)事務(wù)的處理;
圖3示出了包括在多個(gè)處理元件之間共享的事務(wù)處理資源的裝置的示例;以及
圖4示出了使用共享事務(wù)處理資源處理事務(wù)的方法。
具體實(shí)施方式
事務(wù)的處理可能需要額外的事務(wù)處理資源,這在電路面積和能量消耗方面可以是昂貴的。如果事務(wù)處理功能僅很少被要求,則這種特征的成本不可被收益所抵消。對(duì)于一些處理元件,與處理元件的其余微架構(gòu)相比,事務(wù)處理資源的開銷可以是顯著的。此開銷可以通過在多個(gè)處理元件之間共享至少一個(gè)事務(wù)處理資源以使得并非所有處理元件都能夠同時(shí)處理事務(wù)而被抵消。通過避免在每個(gè)處理元件處對(duì)事務(wù)處理資源的重復(fù),可以減少電路面積和功耗。在實(shí)踐中,許多處理元件可能很少需要同時(shí)處理事務(wù),因此此方法對(duì)整體性能的影響可相對(duì)較小,同時(shí)大大改善了面積和能效。
在一些實(shí)現(xiàn)中,至少一個(gè)事務(wù)處理資源可在任何給定時(shí)間僅支持處理元件之一處理事務(wù),使得其它處理元件不能夠處理事務(wù),直至第一處理元件已經(jīng)完成處理事務(wù)。在事務(wù)處理功能僅很少需要的情況下,這可以是足夠的。在其它示例中,可存在允許兩個(gè)或多個(gè)但小于處理元件總數(shù)的處理元件同時(shí)處理事務(wù)的事務(wù)資源。因而,通??梢杂心骋蛔畲髷?shù)量m的處理元件能夠同時(shí)處理事務(wù),其中m小于n(處理元件的總數(shù))。
雖然給定的處理元件可以訪問事務(wù)處理資源,它可處理單個(gè)事務(wù)或者可同時(shí)處理訪問不同數(shù)據(jù)的多個(gè)事務(wù)。因而,雖然可以同時(shí)處理事務(wù)的處理元件的數(shù)量被限制為m,但是如果一些處理元件正在處理多個(gè)事務(wù),則正在處理的事務(wù)的總數(shù)仍然可以大于m。
共享的事務(wù)處理資源可以是被提供以支持處理元件對(duì)事務(wù)進(jìn)行處理的資源類型的范圍中的任何一種。不是所有這些處理資源都需要在處理元件之間共享。有可能為每個(gè)處理元件單獨(dú)提供一種類型的事務(wù)處理資源,同時(shí)共享另一類型的事務(wù)處理資源。
在一個(gè)示例中,事務(wù)處理資源可以是數(shù)據(jù)存儲(chǔ)設(shè)備,用于存儲(chǔ)跟蹤為事務(wù)執(zhí)行的推測(cè)性地執(zhí)行的數(shù)據(jù)處理操作的結(jié)果的推測(cè)性數(shù)據(jù)。事務(wù)的處理可能需要大量的數(shù)據(jù)被推測(cè)性地保持,直到事務(wù)的結(jié)束,此時(shí)推測(cè)性數(shù)據(jù)被提交。可存在與將數(shù)據(jù)標(biāo)記為推測(cè)性以及管理推測(cè)性數(shù)據(jù)并隨后在事務(wù)完成時(shí)提交數(shù)據(jù)相關(guān)聯(lián)的開銷。例如,如果推測(cè)性數(shù)據(jù)被存儲(chǔ)在也存儲(chǔ)非推測(cè)性數(shù)據(jù)的共享緩存中,則可能需要額外的標(biāo)志來區(qū)分推測(cè)性數(shù)據(jù)和非推測(cè)性數(shù)據(jù),并且緩存控制器可能需要額外的電路用于確保標(biāo)記為推測(cè)性的數(shù)據(jù)不被回寫至更高級(jí)別的緩存或存儲(chǔ)器??梢酝ㄟ^在多個(gè)處理元件之間共享用于推測(cè)性數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)設(shè)備和任何相關(guān)聯(lián)的控制邏輯來減少與此資源相關(guān)聯(lián)的開銷。
共享事務(wù)處理資源的另一示例可以是用于存儲(chǔ)狀態(tài)恢復(fù)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)設(shè)備,該狀態(tài)恢復(fù)數(shù)據(jù)指示當(dāng)在事務(wù)結(jié)束事件之前發(fā)生中止事件時(shí)要恢復(fù)到裝置的至少一個(gè)存儲(chǔ)位置的一個(gè)或多個(gè)數(shù)據(jù)值。使用狀態(tài)恢復(fù)數(shù)據(jù)恢復(fù)的存儲(chǔ)位置可以是存儲(chǔ)器或緩存中的位置或寄存器。中止事件可出于各種原因而發(fā)生,諸如另一數(shù)據(jù)嘗試訪問在事務(wù)的處理期間已被訪問的相同數(shù)據(jù)(沖突),或者如果事務(wù)處理資源不足以繼續(xù)事務(wù)的處理。當(dāng)發(fā)生中止事件時(shí),事務(wù)被暫停,并且處理元件的狀態(tài)可恢復(fù)到事務(wù)開始事件發(fā)生時(shí)呈現(xiàn)的狀態(tài)。中止的事務(wù)可在稍后重試。狀態(tài)恢復(fù)數(shù)據(jù)存儲(chǔ)設(shè)備可引起顯著的開銷,特別是在多個(gè)事務(wù)正在被處理并且需要備份多個(gè)版本的狀態(tài)數(shù)據(jù)時(shí)。通過在若干處理元件之間共享恢復(fù)數(shù)據(jù)存儲(chǔ)設(shè)備,可以減少電路面積和功耗。
共享事務(wù)處理資源的另一示例可以是沖突檢測(cè)電路,用于檢測(cè)當(dāng)另一數(shù)據(jù)訪問操作指定與事務(wù)的數(shù)據(jù)訪問操作之一相同的地址時(shí)的沖突。例如,沖突檢測(cè)電路可以包括用于存儲(chǔ)在事務(wù)期間執(zhí)行的數(shù)據(jù)訪問操作的地址的數(shù)據(jù)存儲(chǔ)設(shè)備,并且可以將其它數(shù)據(jù)訪問的地址與由沖突檢測(cè)電路存儲(chǔ)的地址進(jìn)行比較。如果存在地址匹配,則可以檢測(cè)到?jīng)_突,并且這可觸發(fā)如上所述的中止事件。再次,用于跟蹤已被訪問的地址的存儲(chǔ)設(shè)備以及用于將這些地址與正被訪問的其它地址進(jìn)行比較的關(guān)聯(lián)電路具有面積和能量開銷,這可通過在處理元件之間共享沖突檢測(cè)電路來減少。
事務(wù)處理資源的另一示例可以是用于解碼表示事務(wù)開始事件和/或事務(wù)結(jié)束事件的指令的指令解碼器能力。雖然事務(wù)的開始和結(jié)束可以以多種方式來用信號(hào)通知(諸如通過接收外部信號(hào)),實(shí)現(xiàn)它的一個(gè)方便的方式是提供事務(wù)開始指令和后面的事務(wù)結(jié)束指令,事務(wù)開始指令當(dāng)被執(zhí)行時(shí)標(biāo)記事務(wù)的開始,事務(wù)結(jié)束指令標(biāo)記事務(wù)的結(jié)束。然而,這可能需要專用于事務(wù)開始/結(jié)束指令的指令集編碼空間。在許多指令集架構(gòu)中,指令編碼空間可以是至關(guān)重要的,所以提供專用的事務(wù)開始/結(jié)束指令可阻止其它類型的指令被編碼。因而,在若干元件之間共享用于事務(wù)的處理的指令集架構(gòu)支持可以是有用的,從而使得不是所有的處理元件都需要能夠執(zhí)行事務(wù)開始指令或事務(wù)結(jié)束指令。如果不具有所需指令集架構(gòu)支持的處理元件遇到事務(wù)開始指令,則可以觸發(fā)異常,并且處理遷移到具有處理這些指令的能力的不同處理元件。
因而,存在可以在多個(gè)處理元件之間進(jìn)行分時(shí)共享的多個(gè)資源,使得并非所有元件都可以同時(shí)處理事務(wù)。這使得能夠在多處理元件系統(tǒng)中支持事務(wù)的處理,而沒有與向每個(gè)元件提供其自己的資源相關(guān)聯(lián)的高開銷。
可以提供一種機(jī)制來查詢事務(wù)處理資源的可用性。當(dāng)處理元件遇到表示事務(wù)開始事件的事務(wù)開始指令時(shí),它可以檢查至少一個(gè)事務(wù)處理資源是否可用于處理事務(wù),如果是,則觸發(fā)使用資源對(duì)事務(wù)的處理。例如,可以通過向具有資源的另一處理元件或設(shè)備發(fā)送消息或者通過檢查指示另一處理元件是否當(dāng)前正在使用資源的可用性標(biāo)志來檢查可用性。如果事務(wù)開始指令不是遇到此指令的處理元件所支持的指令,則可以通過出現(xiàn)中止或異常事件然后執(zhí)行相應(yīng)的異常處置程序來觸發(fā)對(duì)事務(wù)的處理,該異常處置程序可將事務(wù)的處理遷移到不同的處理元件。
此外,可存在將事務(wù)或事務(wù)功能卸載到其它處理元件的機(jī)制,其可以在硬件中實(shí)現(xiàn)或使用基于軟件的機(jī)制(例如,使用異常處置程序)實(shí)現(xiàn)。當(dāng)將事務(wù)卸載到另一處理元件時(shí),可以在處理元件之間傳遞狀態(tài)數(shù)據(jù),使得第二處理元件可以基于先前在第一處理元件上的處理期間所達(dá)到的該處理元件的狀態(tài)來繼續(xù)處理事務(wù)。
還可以在至少一個(gè)處理元件或在共享資源內(nèi)實(shí)現(xiàn)策略來處理對(duì)共享事務(wù)資源的并發(fā)訪問。例如,可以提供仲裁器以在來自若干不同處理元件對(duì)于相同資源的請(qǐng)求之間進(jìn)行仲裁。例如,仲裁可以根據(jù)輪詢策略,或者基于與每個(gè)處理單元相關(guān)聯(lián)的優(yōu)先級(jí)值。
如果處理元件需要處理事務(wù),但是至少一個(gè)事務(wù)處理資源當(dāng)前不可用,則存在處理元件可以采取的各種動(dòng)作。例如,動(dòng)作可以包括以下任何內(nèi)容:
·處理單元可以簡(jiǎn)單地推遲對(duì)事務(wù)的處理并等待資源變得可用。
·處理元件可以在事務(wù)處理資源處設(shè)置一些控制信息,其控制資源一旦它已完成其當(dāng)前事務(wù)就開始處理該事務(wù)。例如,可以存在用于排隊(duì)等待資源使用的待處理事務(wù)的事務(wù)隊(duì)列。
·事務(wù)的處理可被遷移到另一處理元件,該另一處理元件可具有用于處理事務(wù)的其它資源。
·處理元件可以使用不需要至少一個(gè)事務(wù)處理資源的不同處理機(jī)制來觸發(fā)對(duì)事務(wù)的數(shù)據(jù)處理操作的處理。例如,可以使用事務(wù)來實(shí)現(xiàn)對(duì)存儲(chǔ)器的某些區(qū)域的獨(dú)占訪問,使得一系列操作可以原子地完成而沒有來自其它進(jìn)程的任何干擾??纱嬖诳捎糜趯?shí)現(xiàn)類似效果的其它機(jī)制,例如使用鎖來確保對(duì)數(shù)據(jù)的獨(dú)占訪問,然后使用鎖定的數(shù)據(jù)執(zhí)行非推測(cè)性操作。因而,如果所需的事務(wù)處理資源不可用,則可以使用用于執(zhí)行操作的鎖定機(jī)制或另一非基于事務(wù)的技術(shù)。
·處理元件可切換到執(zhí)行不同的處理線程。因而,如果要求事務(wù)的線程不能進(jìn)行,處理元件可以使用等待事務(wù)處理資源變得可用所花費(fèi)的時(shí)間來執(zhí)行另一線程。
因而,如果處理事務(wù)所需的資源因?yàn)榱硪惶幚碓谑褂盟豢捎?,處理元件可以以多種方式響應(yīng)。
這些類型的動(dòng)作在某些情況下可能在硬件中得到支持,因此處理元件具有用于當(dāng)所需資源不可用時(shí)觸發(fā)這些動(dòng)作中的一個(gè)或多個(gè)的某一電路。在其它情況下,軟件可以控制處理元件(或另一處理元件)來執(zhí)行這些動(dòng)作。例如,如果所需資源不可用,則事務(wù)開始指令可以觸發(fā)由處理元件發(fā)信號(hào)通知的異常狀況,然后這可導(dǎo)致在軟件中執(zhí)行異常處置程序來控制此處理元件或不同的處理元件執(zhí)行預(yù)定動(dòng)作。
可存在實(shí)現(xiàn)共享事務(wù)處理資源的不同方式。在一個(gè)示例中,至少一個(gè)處理元件可以是具有用于支持事務(wù)的處理的至少一個(gè)事務(wù)處理資源的事務(wù)處置處理元件。至少一個(gè)其它處理元件可以不具有這樣的事務(wù)處理資源。因而,如果由另一處理元件執(zhí)行的進(jìn)程或線程需要處理事務(wù),則可以將對(duì)事務(wù)的處理遷移到事務(wù)處置處理單元。
在一些情況下,事務(wù)處置處理元件可以是支持使用事務(wù)處理資源的事務(wù)處理以及不需要事務(wù)處理資源的其它數(shù)據(jù)處理操作的處理二者的通用處理元件。例如,處理器核心的集群中的一個(gè)可以配備完整的事務(wù)存儲(chǔ)器組件以及其它通用處理資源,而其它處理元件可以僅具有通用資源。
可替換地,事務(wù)處置處理元件可以包括專用于對(duì)事務(wù)的處理的專用事務(wù)處置處理元件并且可以不支持其它類型的操作。例如,可以在處理元件的集群中提供專用事務(wù)存儲(chǔ)器加速器,其致力于代表集群中的其它處理元件執(zhí)行事務(wù)。
當(dāng)事務(wù)處置處理元件代表另一處理元件處理事務(wù)時(shí),可以提供狀態(tài)傳送電路(例如,總線或互連)用于將狀態(tài)數(shù)據(jù)傳送到事務(wù)處置處理元件。例如,狀態(tài)數(shù)據(jù)可以包括指示要執(zhí)行的下一個(gè)指令的地址的程序計(jì)數(shù)器和/或指示另一處理單元的各種寄存器的狀態(tài)的寄存器狀態(tài)數(shù)據(jù)。一旦事務(wù)已完成,狀態(tài)傳送電路可以將狀態(tài)從事務(wù)處置處理元件傳回到另一處理元件,使得然后可使用另一處理元件繼續(xù)后續(xù)的處理。在一些情況下,不是在事務(wù)開始處傳送所有的狀態(tài)數(shù)據(jù),而可能僅傳送事務(wù)的處理實(shí)際需要的狀態(tài)數(shù)據(jù)。例如,程序計(jì)數(shù)器可以被首先傳送,然后當(dāng)事務(wù)內(nèi)的每個(gè)指令被執(zhí)行時(shí),此指令的任何所需狀態(tài)數(shù)據(jù)可以從其它處理元件傳送。這可以通過避免傳送實(shí)際未被事務(wù)使用的數(shù)據(jù)所花費(fèi)的時(shí)間來幫助減少與狀態(tài)傳送相關(guān)聯(lián)的延遲??商鎿Q地,可以在檢查共享資源的可用性時(shí)傳送狀態(tài)數(shù)據(jù),以避免在資源實(shí)際變得可用時(shí)的進(jìn)一步延遲。
當(dāng)事務(wù)完成時(shí),可以存在一些條件,在這些條件下抑制狀態(tài)數(shù)據(jù)傳回發(fā)起處理事務(wù)的請(qǐng)求的處理元件可以是更高效的。例如,另一處理元件可能需要由事務(wù)處置處理元件處理又一事務(wù)。通過在事務(wù)處置處理元件處保留源自先前事務(wù)的狀態(tài)數(shù)據(jù),該又一事務(wù)可在無需引起與狀態(tài)傳送相關(guān)聯(lián)的任何進(jìn)一步開銷的情況下繼續(xù)。另外,可能不存在要由事務(wù)處置處理元件處理的又一事務(wù)。如果包括事務(wù)的線程的后續(xù)處理可以由事務(wù)處置處理元件自身執(zhí)行,則線程的處理可以在事務(wù)處置處理元件上繼續(xù),以避免與將處理傳送回原始處理元件相關(guān)聯(lián)的延遲和能量開銷。當(dāng)事務(wù)處置處理元件是也具有事務(wù)處置能力的通用處理元件時(shí),該方法可能是有用的。
因而,在一些示例中,事務(wù)的處理期間的操作的推測(cè)性執(zhí)行發(fā)生在事務(wù)處置處理元件處,但是可以由在另一處理元件上執(zhí)行的線程來請(qǐng)求。
在其它示例中,事務(wù)的數(shù)據(jù)處理操作的執(zhí)行仍然可發(fā)生在請(qǐng)求的處理元件處,但是處理元件可以使用在多個(gè)處理元件之間共享的至少一個(gè)資源。例如,共享存儲(chǔ)結(jié)構(gòu)可用于存儲(chǔ)在事務(wù)的處理期間的跟蹤數(shù)據(jù)。這允許事務(wù)處置所需的至少一些相對(duì)較大的數(shù)據(jù)結(jié)構(gòu)(例如跟蹤沖突檢測(cè)、推測(cè)性數(shù)據(jù)版本化或寄存器檢查點(diǎn)的存儲(chǔ)設(shè)備)僅被實(shí)現(xiàn)一次或幾次,而存儲(chǔ)設(shè)備在不同的處理元件之間被分時(shí)共享。例如,復(fù)用電路可以復(fù)用來自各處理元件的訪問共享跟蹤結(jié)構(gòu)的請(qǐng)求。利用這種方法,提供指示共享資源當(dāng)前是否被處理元件使用的使用標(biāo)志可以是有用的,使得其它處理元件能夠確定它們是否能夠處理事務(wù)。
圖1示意性地示出了數(shù)據(jù)處理裝置2的示例,數(shù)據(jù)處理裝置2包括經(jīng)由互連12與共享二級(jí)(l2)緩存14和存儲(chǔ)器16通信并且彼此通信的多個(gè)處理元件(pe)4、6、8、10。例如,每個(gè)pe可以是處理器核心。在此示例中,三個(gè)pe4、6、8是通用pe,其具有用于執(zhí)行數(shù)據(jù)處理操作的處理流水線20、用于存儲(chǔ)要由流水線20處理的數(shù)據(jù)的一組寄存器(r)22、和用于存儲(chǔ)來自l2緩存14或存儲(chǔ)器16的數(shù)據(jù)的緩存版本的一級(jí)(l1)緩存24。流水線20可以例如包括多個(gè)流水線級(jí),例如,用于從存儲(chǔ)器系統(tǒng)(l1緩存10、l2緩存14、或存儲(chǔ)器16)抓取指令的抓取級(jí)、用于解碼所抓取的指令的解碼級(jí)、用于將由指令指定的架構(gòu)寄存器說明符重命名為標(biāo)識(shí)寄存器組22的物理寄存器的物理寄存器說明符的重命名級(jí)(如果提供)、用于發(fā)布以供執(zhí)行的指令的發(fā)布級(jí)、以及用于執(zhí)行解碼的指令以執(zhí)行諸如例如算術(shù)運(yùn)算、邏輯運(yùn)算、加載/存儲(chǔ)操作之類的各種處理操作的一個(gè)或多個(gè)執(zhí)行級(jí)。在一些情況下,流水線20可以支持無序執(zhí)行。應(yīng)當(dāng)理解,簡(jiǎn)便起見,圖1中的每個(gè)pe的表示是示意性的,并且在實(shí)踐中每個(gè)pe可以具有圖1中未示出的許多其它組件?;ミB12可以管理每個(gè)pe4、6、8的l1緩存24和保存在l2緩存14或存儲(chǔ)器16中的數(shù)據(jù)之間的一致性。
pe10是用于應(yīng)其它pe4、6、8中的一者的請(qǐng)求而處理事務(wù)的專用事務(wù)處置pe。事務(wù)可以包括一系列處理操作,這包括數(shù)據(jù)訪問操作(存儲(chǔ)器讀或?qū)?,這些操作跟隨在標(biāo)記事務(wù)的開始的事務(wù)開始指令之后被推測(cè)性地執(zhí)行。推測(cè)性執(zhí)行繼續(xù),直到遇到發(fā)信號(hào)通知事務(wù)的完成的事務(wù)結(jié)束指令。專用事務(wù)處置pe10具有用于處理事務(wù)的共享事務(wù)處理資源,包括用于執(zhí)行推測(cè)性處理操作的事務(wù)處理流水線30。例如,事務(wù)處理流水線30可以具有支持事務(wù)開始和結(jié)束指令的解碼和執(zhí)行的電路,其可不被pe4、6、8的通用流水線20支持。其它事務(wù)處理資源包括狀態(tài)恢復(fù)存儲(chǔ)設(shè)備32、沖突檢測(cè)電路34、一些寄存器36和推測(cè)性結(jié)果存儲(chǔ)設(shè)備40(例如可以是緩存)。
當(dāng)pe4、6、8中的一個(gè)遇到事務(wù)開始指令時(shí),該pe可以向事務(wù)處置pe10發(fā)送查詢其可用性的請(qǐng)求。發(fā)起請(qǐng)求的pe4可以向事務(wù)處置pe10發(fā)送一些狀態(tài),包括程序計(jì)數(shù)器、來自寄存器22的狀態(tài)、以及來自l1緩存24的數(shù)據(jù)??稍诓樵兪聞?wù)處置pe10的可用性時(shí)或者隨后一旦可用性被確認(rèn)時(shí)傳送此狀態(tài)。寄存器狀態(tài)和來自l1緩存24的數(shù)據(jù)由事務(wù)處置pe10保存到狀態(tài)恢復(fù)存儲(chǔ)設(shè)備32,作為稍后如果事務(wù)被中止則可被恢復(fù)的數(shù)據(jù)的備份版本。
中止事務(wù)的原因可有所不同,但常見的原因可能是檢測(cè)到針對(duì)事務(wù)執(zhí)行的數(shù)據(jù)訪問與另一數(shù)據(jù)訪問之間的沖突。沖突檢測(cè)電路34存儲(chǔ)跟蹤在事務(wù)期間訪問的地址的數(shù)據(jù),將此數(shù)據(jù)與由其它pe4、6、8或由其它事務(wù)訪問的存儲(chǔ)器地址進(jìn)行比較,并且如果發(fā)現(xiàn)匹配則發(fā)信號(hào)通知沖突。如果檢測(cè)到?jīng)_突,則事務(wù)被中止,并且存儲(chǔ)設(shè)備32中保存的恢復(fù)數(shù)據(jù)被用于將數(shù)據(jù)恢復(fù)到裝置中的各種存儲(chǔ)位置,各種存儲(chǔ)位置可以包括發(fā)起事務(wù)的pe4、6、8的寄存器22或l1緩存24和/或事務(wù)處置pe本身的寄存器36或推測(cè)性結(jié)果存儲(chǔ)設(shè)備40。
從發(fā)起事務(wù)的請(qǐng)求pe傳送的狀態(tài)數(shù)據(jù)也用于初始化寄存器36和推測(cè)性結(jié)果存儲(chǔ)設(shè)備40,使得事務(wù)處置pe10可以開始使用由請(qǐng)求pe保持的相同狀態(tài)數(shù)據(jù)處理事務(wù)。在事務(wù)期間,事務(wù)處理流水線30可以執(zhí)行各種處理操作。對(duì)于諸如算術(shù)運(yùn)算之類的一些操作,這可導(dǎo)致寄存器36中的值被更新。對(duì)于數(shù)據(jù)訪問操作,推測(cè)性值可以被加載到寄存器36、被放置到推測(cè)性結(jié)果存儲(chǔ)設(shè)備40,或者從l2緩存14或存儲(chǔ)器16中抓取。在圖1的使用專用事務(wù)處置pe10的示例中,可能不必要將推測(cè)性結(jié)果存儲(chǔ)設(shè)備40中的數(shù)據(jù)標(biāo)記為推測(cè)性的,因?yàn)榇藬?shù)據(jù)存儲(chǔ)設(shè)備中的所有數(shù)據(jù)都將是源自事務(wù)處理的推測(cè)性數(shù)據(jù)。推測(cè)性結(jié)果存儲(chǔ)設(shè)備40中的推測(cè)性數(shù)據(jù)被阻止寫回到l2緩存14或存儲(chǔ)器16。
假設(shè)沒有發(fā)生中止事件,最終遇到事務(wù)結(jié)束指令,此時(shí)在事務(wù)期間生成的推測(cè)性狀態(tài)被提交。數(shù)據(jù)可以寫回到l2緩存14或存儲(chǔ)器。此外,狀態(tài)數(shù)據(jù)可以從寄存器36和推測(cè)性結(jié)果存儲(chǔ)設(shè)備40被傳送到發(fā)起事務(wù)的pe4、6、8的寄存器22和l1緩存24。可替換地,如果緊隨先前事務(wù)之后要立即執(zhí)行來自相同pe的另一事務(wù),則可以抑制此狀態(tài)數(shù)據(jù)的傳送。如果發(fā)起事務(wù)的pe沒有更多的事務(wù)要處理,事務(wù)處置pe10變得可用于另一pe的處理。
以這種方式,與在pe10內(nèi)提供的用于事務(wù)處置的各種跟蹤結(jié)構(gòu)和指令集架構(gòu)支持相關(guān)聯(lián)的電路面積開銷和能量消耗可以在pe4、6、8之間分?jǐn)?,使得不必要向每個(gè)pe提供此資源。
在處理一個(gè)pe4的事務(wù)時(shí),另一pe6、8也可能有事務(wù)需要處理。如果事務(wù)處置pe10不可用,則另一pe6、8可以采取各種動(dòng)作,其可以由硬件或軟件觸發(fā)(例如使用異常處置程序)。例如,pe6、8可以等待指定數(shù)量的周期,同時(shí)周期性地檢查共享機(jī)制10是否可用。此外,pe6、8可以向共享事務(wù)處置pe10發(fā)信號(hào)通知它有事務(wù)需要處理,并且當(dāng)事務(wù)處置pe10變得可用時(shí),該事務(wù)處置pe10然后可以切換為處理此待處理事務(wù)。此外,當(dāng)資源不可用時(shí),被阻擋的pe6、8可以向正在執(zhí)行的應(yīng)用發(fā)信號(hào)通知事務(wù)被中止,然后軟件可以采用補(bǔ)救動(dòng)作,例如:等待和重試事務(wù),使用用于并發(fā)控制的另一機(jī)制(例如使用鎖),或者在多線程進(jìn)程的情況下停止當(dāng)前線程并執(zhí)行不使用事務(wù)機(jī)制的另一線程。
在圖1的示例中,共享事務(wù)處理資源被提供為不提供任何其它處理能力的專用事務(wù)pe10。例如,事務(wù)pe10可以被視為代表其它元件執(zhí)行事務(wù)的事務(wù)加速器。
圖2示出了其中事務(wù)處置pe50也具有通用(gp)處理能力的另一示例。pe4、6、8、互連12、l2緩存14和存儲(chǔ)器16與圖1中相同。然而,在此示例中,pe50可以以與其它pe4、6、8相同的方式執(zhí)行代碼,包括請(qǐng)求對(duì)事務(wù)的處理。通用pe50具有與pe4、6、8類似方式的l1緩存24、寄存器22和流水線20,但是對(duì)于pe50,這些也分別用作推測(cè)性結(jié)果存儲(chǔ)設(shè)備40、事務(wù)寄存器36和事務(wù)流水線30。例如,pe50的l1緩存24中的數(shù)據(jù)可以被標(biāo)記以指示該數(shù)據(jù)是與事務(wù)有關(guān)的推測(cè)性數(shù)據(jù)還是與其它操作有關(guān)的非推測(cè)性數(shù)據(jù)的標(biāo)識(shí)符。類似地,流水線20中的操作可被標(biāo)志為推測(cè)性的或非推測(cè)性的。此外,事務(wù)處置pe50具有諸如恢復(fù)數(shù)據(jù)存儲(chǔ)設(shè)備32和沖突檢測(cè)電路34之類的額外事務(wù)資源。當(dāng)pe4、6、8、50中的任何一個(gè)需要處理事務(wù)時(shí),它們可以檢查pe50中提供的事務(wù)處置資源是否可用,并且在可用時(shí),可以以與圖1所討論的相同的方式處理事務(wù),除了當(dāng)代表事務(wù)處置pe50自身處理事務(wù)時(shí)將不需要傳送狀態(tài)數(shù)據(jù)。
圖3示出了具有在若干pe4、6之間共享事務(wù)處理資源75的數(shù)據(jù)處理裝置2的第三示例。這次,每個(gè)pe4、6的處理流水線20以類似于圖2的pe50的流水線20的方式支持通用處理和對(duì)事務(wù)的處理二者。然而,用于存儲(chǔ)恢復(fù)數(shù)據(jù)、沖突跟蹤數(shù)據(jù)和推測(cè)性結(jié)果的跟蹤結(jié)構(gòu)32、34、40在pe之間共享。復(fù)用器70在任何給定時(shí)間選擇pe4、6中的哪一個(gè)可以訪問共享資源75。使用標(biāo)志72被維持以指示資源75是否當(dāng)前正在使用。當(dāng)pe4、6中的一個(gè)在使用標(biāo)志72被清零(指示資源75未在使用中)時(shí)遇到事務(wù)開始指令時(shí),此pe可以設(shè)置使用標(biāo)志72以防止其它pe訪問資源,并且然后開始使用資源75。另一方面,如果使用標(biāo)志72已被設(shè)置,則資源不可用,并且然后可以執(zhí)行上述補(bǔ)救動(dòng)作之一。當(dāng)使用資源時(shí),可以由pe以類似于上面針對(duì)圖1的pe10討論的技術(shù)來處理事務(wù)。
圖4示出了處理事務(wù)的方法。在步驟100處,pe遇到事務(wù)開始指令。如果pe支持解碼事務(wù)開始指令,那么它可以執(zhí)行此指令以觸發(fā)后續(xù)動(dòng)作。如果未提供解碼器支持,則可以發(fā)信號(hào)通知異常并且異常處置例程可以觸發(fā)后續(xù)動(dòng)作。無論哪種方式,在步驟102處,pe發(fā)送查詢事務(wù)處理資源的可用性的請(qǐng)求,事務(wù)處理資源可以在相同的pe內(nèi)或遠(yuǎn)程位置處。在步驟104處,確定事務(wù)處理資源是否可用。如果不可用,則在步驟106處,采取資源不可用的動(dòng)作(例如上面討論的任何動(dòng)作)。如果有若干pe需要使用資源,則可以使用仲裁策略來確定哪個(gè)pe應(yīng)首先獲得對(duì)資源的訪問。
如果資源可用于pe,則在步驟108處,pe通過自身處理事務(wù)(如果pe具有資源)、通過將事務(wù)的處理轉(zhuǎn)移到另一pe、或者通過如圖3的示例中使用共享跟蹤結(jié)構(gòu)來開始使用資源。使用標(biāo)志72可被設(shè)置為指示資源現(xiàn)在正在使用。狀態(tài)數(shù)據(jù)的備份被存儲(chǔ)在恢復(fù)存儲(chǔ)設(shè)備32中。在步驟110處事務(wù)被處理,其中操作被推測(cè)地進(jìn)行并且推測(cè)性結(jié)果存儲(chǔ)設(shè)備40被相應(yīng)地更新。沖突檢測(cè)電路34檢測(cè)是否存在可觸發(fā)中止的任何地址沖突。如果沒有足夠的事務(wù)處理資源來繼續(xù)處置事務(wù)(例如,如果推測(cè)性結(jié)果存儲(chǔ)設(shè)備40變滿),也可以觸發(fā)中止事件。
在步驟112處,確定是否存在中止?fàn)顩r。如果是這樣,則在步驟114處,至少一個(gè)存儲(chǔ)位置被恢復(fù)以來自數(shù)據(jù)存儲(chǔ)設(shè)備32的狀態(tài)?;謴?fù)的存儲(chǔ)位置可以是寄存器22或36、l1緩存24或推測(cè)性結(jié)果存儲(chǔ)設(shè)備40。在步驟116處,事務(wù)處理資源然后被釋放以使得另一pe能夠處理事務(wù)。
如果沒有發(fā)生中止事件,則在步驟118處確定是否已經(jīng)遇到事務(wù)結(jié)束指令。如果沒有,則處理循環(huán)通過步驟112至118同時(shí)事務(wù)繼續(xù)被處理。一旦事務(wù)完成,則在步驟120處,存儲(chǔ)設(shè)備40中的推測(cè)性結(jié)果被提交,然后在步驟116處事務(wù)處理資源被釋放。在資源釋放時(shí),使用標(biāo)志72可被清零。
總而言之,事務(wù)存儲(chǔ)器需要額外的資源來正常工作,這將消耗硅片不動(dòng)產(chǎn)和功率。如果這樣的功能僅很少需要,這種特征的成本不可被益處所抵消。特別是在小核心(a7,a53,m類)中,用于(1)沖突檢測(cè)、(2)數(shù)據(jù)版本化、(3)寄存器檢查點(diǎn)、和(4)isa支持的邏輯的開銷在剩余的微架構(gòu)上會(huì)是顯著的。在這些情況下,在多個(gè)核心之間共享事務(wù)存儲(chǔ)器邏輯因此是可取的。這可以例如通過使得集群中的一個(gè)核心配備以完整的事務(wù)存儲(chǔ)器組件、在集群中具有專用事務(wù)存儲(chǔ)器加速器(集中于代表集群中的通用核心執(zhí)行事務(wù)的特殊處理器核心)、或通過僅實(shí)現(xiàn)用于事務(wù)跟蹤所需的大數(shù)據(jù)結(jié)構(gòu)一次并在各個(gè)小核心之間進(jìn)行分時(shí)共享來實(shí)現(xiàn)。此應(yīng)用描述了對(duì)可用資源進(jìn)行分時(shí)共享而不限制實(shí)際選取的實(shí)現(xiàn)變體的多種方式??纱嬖诓樵冞h(yuǎn)程事務(wù)執(zhí)行器資源的可用性的機(jī)制、將事務(wù)或事務(wù)功能卸載至執(zhí)行器的機(jī)制、以及如何處理對(duì)共享事務(wù)資源的并發(fā)訪問的策略。
事務(wù)存儲(chǔ)器(tm)是通過開始和結(jié)束標(biāo)記符指令(通常被稱作推測(cè)/提交,或者txbegin/txend)將在cpu上執(zhí)行的指令分組到事務(wù)中的機(jī)制。這些指令向處理器發(fā)信號(hào)通知事務(wù)即將開始/結(jié)束,并且所有隨后的指令將(不再)成為事務(wù)的一部分。存在許多針對(duì)tm的學(xué)術(shù)和行業(yè)提案,包括微處理器中的商業(yè)可用實(shí)現(xiàn)。被分組到事務(wù)中的指令如前所述流經(jīng)微處理器的流水線,但在事務(wù)開始時(shí),做出對(duì)寄存器和存儲(chǔ)器狀態(tài)的快照。寄存器和存儲(chǔ)器狀態(tài)的這個(gè)快照允許在檢測(cè)到中止原因時(shí)將事務(wù)回滾回初始狀態(tài)??煺瞻▋蓚€(gè)組件,寄存器文件快照和撤消在事務(wù)期間已對(duì)存儲(chǔ)器做出的修改的機(jī)制。如果事務(wù)執(zhí)行結(jié)束指令,它不能再中止,并且快照被丟棄并且事務(wù)提交。
中止原因可能會(huì)有所不同,但最顯著的原因是在一個(gè)事務(wù)中訪問的數(shù)據(jù)與其它存儲(chǔ)器訪問之間的數(shù)據(jù)沖突。通常,目的是不允許對(duì)事務(wù)中訪問的存儲(chǔ)器進(jìn)行任何并發(fā)寫入以及從已經(jīng)在進(jìn)行中的事務(wù)中被修改的數(shù)據(jù)中進(jìn)行并發(fā)讀取。如果事務(wù)執(zhí)行此沖突檢測(cè)并在沖突時(shí)中止,則此事務(wù)將與其它觀察者隔離或原子地執(zhí)行。優(yōu)點(diǎn)是這些事務(wù)可以在其中同步是重要的多線程應(yīng)用中使用。由于動(dòng)態(tài)性質(zhì),兩個(gè)事務(wù)如果它們彼此不沖突則可以并發(fā)執(zhí)行(避免鎖的串行瓶頸)。在大多數(shù)情況下,實(shí)際的數(shù)據(jù)沖突被預(yù)計(jì)是很少的,所以事務(wù)存儲(chǔ)器可以解鎖多線程應(yīng)用的附加性能。
查詢事務(wù)資源的可用性
如果處理遇到事務(wù)開始指令但不具有所需的事務(wù)機(jī)制,則它可以查詢可用的共享機(jī)制以確定該共享機(jī)制是否可用。這可以例如意味著在總線上發(fā)送分組到集群中的tm使能的核心、加速器或總線連接的共享tm資源;或者檢查共享tm邏輯的“在使用中”信號(hào)/字段。如果資源可用,則事務(wù)將獲取tm邏輯(通過發(fā)送另一獲取分組或設(shè)置在使用中位字段),并發(fā)送事務(wù)以便遠(yuǎn)程執(zhí)行(加速器/tm使能的核心)或直接使用共享機(jī)制。在遠(yuǎn)程執(zhí)行單元的情況下,可以通過發(fā)送寄存器狀態(tài)(包括程序計(jì)數(shù)器/指令指針)并通過自事務(wù)入口指令起的執(zhí)行來繼續(xù)在遠(yuǎn)程實(shí)體上執(zhí)行的手段來將事務(wù)發(fā)送到遠(yuǎn)程核心/加速器。在共享事務(wù)存儲(chǔ)器資源(緩沖器)的情況下,本地核心將直接使用組件(借助于復(fù)用器、總線等),而其它用戶由于設(shè)置的在使用中位而被阻止使用資源。
未能獲取共享事務(wù)存儲(chǔ)器機(jī)制
如果共享事務(wù)存儲(chǔ)器機(jī)制在使用中,則核心不能執(zhí)行當(dāng)前事務(wù)。可以執(zhí)行若干機(jī)制作為補(bǔ)救動(dòng)作:
(1)處理器可以等待(指定的)周期數(shù),同時(shí)周期性地重復(fù)檢查共享機(jī)制是否可用。這會(huì)意味著事務(wù)開始指令需要更長(zhǎng)的時(shí)間來執(zhí)行。
(2)核心可能向應(yīng)用發(fā)信號(hào)通知事務(wù)已中止并且讓軟件采取補(bǔ)救動(dòng)作(例如等待和重試),或者使用其它機(jī)制進(jìn)行并發(fā)控制(抓住全局鎖)
(3)在多線程處理器的情況下,核心可停止當(dāng)前硬件線程并執(zhí)行不使用事務(wù)機(jī)制的另一硬件線程。
替代(1)中的輪詢,未成功的核心/線程也可以留下消息給共享事務(wù)機(jī)制,使得:只要當(dāng)前執(zhí)行的事務(wù)完成/中止,共享事務(wù)機(jī)制將處置請(qǐng)求并喚醒/恢復(fù)事務(wù)的執(zhí)行。
事務(wù)機(jī)制的使用
事務(wù)中的指令通過使用用于沖突檢測(cè)和寄存器檢查點(diǎn)的tm機(jī)制(在專用tm核、加速器、或來自原始核心的共享tm資源上)推測(cè)性地執(zhí)行。在此時(shí)間期間,集群中的其它核心不能執(zhí)行事務(wù)。
事務(wù)的完成
如果事務(wù)完成,它們可以釋放事務(wù)資源/機(jī)制,并允許其它等待的事務(wù)運(yùn)行。在共享事務(wù)資源(例如用于事務(wù)存儲(chǔ)設(shè)備的版本化的緩沖器)的情況下,資源被釋放(在使用中的位被去設(shè)置),并且執(zhí)行事務(wù)的核心繼續(xù)執(zhí)行跟隨事務(wù)后面的指令。
在使用tm使能的核心/加速器的情況下,事務(wù)結(jié)束之后的狀態(tài)應(yīng)當(dāng)最終被移回原始執(zhí)行指令流的核心。這意味著在事務(wù)結(jié)束時(shí)的寄存器狀態(tài)(包括程序計(jì)數(shù)器/指令指針、堆棧指針等)需要再次被傳送回原始核心。
在單個(gè)核心一回回地執(zhí)行多個(gè)事務(wù)的情況下,或者一般而言如果沒有其它核心想要使用事務(wù)存儲(chǔ)器機(jī)制,則這樣的傳輸可能是昂貴的。因此,如果沒有記錄來自另一核心的其它請(qǐng)求,則在該tm使能的核心/加速器上繼續(xù)后事務(wù)流的執(zhí)行是可取的。
取決于握手(輪詢相對(duì)于留下喚醒請(qǐng)求),事務(wù)端可以在事務(wù)結(jié)束時(shí)檢查喚醒請(qǐng)求的郵箱,并喚醒等待的線程/核心中的一個(gè)并且發(fā)信號(hào)通知它們事務(wù)機(jī)制的可用性。
替代方案
用于查詢可用性、獲取資源、發(fā)送寄存器狀態(tài)和請(qǐng)求喚醒的消息可以全部組合成較小數(shù)量的復(fù)合消息。例如,核心可初始地發(fā)送包含完整寄存器狀態(tài)的消息,并且如果tm使能的核心/加速器被釋放,則它將立即開始執(zhí)行。如果該機(jī)制在使用中,那么它將排入寄存器狀態(tài)并且一旦當(dāng)前執(zhí)行的事務(wù)完成,tm核心將立即根據(jù)保存的寄存器狀態(tài)執(zhí)行下一待處理指令。
tm核心/加速器可以決定立即重試失敗的事務(wù)而不是挑選一個(gè)等待的事務(wù)來執(zhí)行。這種行為可以由系統(tǒng)策略以及驅(qū)動(dòng)預(yù)測(cè)邏輯的過去行為引導(dǎo)。
在使用特定事務(wù)處置處理元件的示例中,除了共享資源來處理事務(wù)的電路面積和能量?jī)?yōu)點(diǎn)之外,事務(wù)的集中執(zhí)行在一些場(chǎng)景中也具有一些性能改進(jìn),例如,由于緩存消息的數(shù)量減少。
實(shí)現(xiàn)方式變體
除了三個(gè)建議的硬件實(shí)現(xiàn):
(1)tm使能的全微處理器核心
(2)以tm為中心的加速器核心(具有可能精簡(jiǎn)的指令集)
(3)事務(wù)存儲(chǔ)器資源(沖突檢測(cè)邏輯,緩沖區(qū)版本控制,寄存器快照存儲(chǔ))的共享,
存在將部分策略卸載到軟件的其它選項(xiàng)。
通過生成軟件可見信號(hào)(具有特殊標(biāo)志的事務(wù)中止)或異常,(1)和(2)的這種機(jī)制的軟件管理的形式是可能的,從而使得應(yīng)用可以通過發(fā)送包含實(shí)時(shí)寄存器/變量和指令指針的軟件消息來執(zhí)行代碼到tm使能的核心/加速器的遷移。這樣的行為被建議用于上文鏈接的公開中的關(guān)鍵節(jié)段。
擴(kuò)展/靈活性
作為僅提供單個(gè)共享資源/tm機(jī)制的替代,更多數(shù)量的可共享資源可以是可用的(例如,用于8個(gè)tm禁用核心的兩個(gè)tm使能核心,或者用于8個(gè)核心的兩個(gè)版本化緩沖器)。本技術(shù)容易通過檢查多個(gè)資源中之一的可用性并且僅在所有可用的共享資源/機(jī)制在使用中時(shí)才經(jīng)過停止/中止路徑來擴(kuò)展到這些情況。益處是,如果這些機(jī)器的預(yù)期sw使用已經(jīng)被拾取,則硬件實(shí)現(xiàn)可允許tm機(jī)制的更高級(jí)別的并發(fā)使用。
在本申請(qǐng)中,詞語(yǔ)“配置為...”用于表示裝置的元件具有能夠執(zhí)行定義的操作的配置。在此上下文中,“配置”表示指硬件或軟件的互連的布置或方式。例如,裝置可以具有提供定義的操作的專用硬件,或者可被編程以執(zhí)行功能的處理器或其它處理設(shè)備。“配置為”并不暗示裝置元件為了提供定義的操作而需要以任何方式改變。
雖然本文參考附圖已經(jīng)詳細(xì)描述了本發(fā)明的說明性實(shí)施例,但是應(yīng)當(dāng)理解,本發(fā)明不限于那些精確實(shí)施例,并且本領(lǐng)域技術(shù)人員可以在其中實(shí)現(xiàn)各種改變和修改而不脫離由所附權(quán)利要求限定的本發(fā)明的范圍和精神。