映射的輸入/輸出 (10)寫入事務來傳輸。一旦從處理器核接收到N0C0觸發(fā)器,N0C0功能單元就可以從一致 的存儲器120檢索CB,N0C0功能單元130可以基于檢索到的CB,執(zhí)行操作。例如,N0C0功 能單元130可以檢索對應于CB的數(shù)據(jù),并基于指令和可能在CB中標識的數(shù)據(jù)的位置,對數(shù) 據(jù)執(zhí)行操作。隨后,NOCO功能單元130可以基于CB,來處理數(shù)據(jù),并可以將經(jīng)處理的數(shù)據(jù)寫 入到一致的存儲器120。例如,NOCO功能單元130可以發(fā)起向一致的存儲器120的寫入事 務,以將經(jīng)處理的數(shù)據(jù)存儲在一致的存儲器120的另一位置。此外,NOCO功能單元130還 可以基于CB,將CB標記為在數(shù)據(jù)已經(jīng)被處理完之后完成。
[0032] 在某些實施例中,NOCO功能單元可以是,但不僅限于,圖形控制器、處理器、或處理 設備、網(wǎng)絡控制器、處理器,或處理設備、直接存儲器訪問(DMA)控制器、處理器、或處理設 備,或用于與處理設備相關聯(lián)的編程的輸入/輸出(PIO)中的任何其他設備。例如,NOCO功 能單元130可以是包括算術邏輯單元(ALU)或其他處理能力的IO設備。
[0033] 圖2是示出了根據(jù)本發(fā)明的一些實施例的示例存儲器流模塊200的框圖。存儲器 流模塊200可以對應于圖1的存儲器流模塊107。一般而言,存儲器流模塊200可包括一致 的子模塊(或功能塊)210、非一致的子模塊(或功能塊)220、非一致的流標識符子模塊(或 功能塊)230、一致的流標識符子t旲塊(或功能塊)240、依賴關系子_旲塊(或功能塊)250以 及提升子模塊(或功能塊)260。在替換實施例中,子模塊中的一個或多個的功能可以被組 合或分開。例如,單一子模塊可以執(zhí)行一致的子模塊210、非一致的子模塊220、非一致的流 標識符子模塊230、一致的流標識符子模塊240、依賴關系子模塊250,以及提升子模塊260 的功能??闪磉x地,子模塊210、220、230、240、250,以及260中的每一個的功能都可以在多 個子模塊之間分離。
[0034] 如圖2所示,存儲器流模塊200可包括一致的子模塊210。在某些實施例中,一致 的子模塊210可以接收或標識與存儲器(例如,一致的存儲器120)相關聯(lián)的一個或多個存 儲器操作。例如,一致的子模塊210可以標識與一致的存儲器相關聯(lián)的存儲器操作。存儲 器操作可包括將數(shù)據(jù)(例如,控制塊)寫入到一致的存儲器的寫入操作或從一致的存儲器 讀取數(shù)據(jù)的讀取操作。存儲器流模塊200可包括非一致的子模塊220。在某些實施例中, 非一致的子模塊220可以接收或標識與NOCO功能單元相關聯(lián)的一個或多個NOCO觸發(fā)器操 作。例如,非一致的子模塊220可以標識與一個或多個NOCO功能單元相關聯(lián)的NOCO觸發(fā) 器,以檢索存儲在一致的存儲器中的數(shù)據(jù)(例如,控制塊)。存儲器流模塊230還可以包括 一致的流標識符子模塊230。在某些實施例中,一致的流標識符子模塊230可以定義與一 致的存儲器相關聯(lián)的存儲器操作的流。存儲器操作的流可以是指已經(jīng)發(fā)出的存儲器操作的 系列。例如,一致的流標識符子模塊230可以定義要被執(zhí)行的存儲器操作的順序。在某些 實施例中,存儲器操作的順序可以被定義為,以便存儲器操作按程序順序(例如,按照發(fā)出 存儲器操作的順序)或當存儲器操作的讀取操作在存儲器操作的寫入操作之后時,存儲器 操作的順序可以通過放寬存儲器操作的順序來定義。例如,讀取事務或操作(也被稱為加 載)可以在按照程序順序比讀取事務或操作早的寫入操作或事務(也被稱為存儲)之前執(zhí) 行。這樣的順序可以被稱為總存儲順序(TSO)。參考圖4A-4C更詳細地公開了關于存儲器 操作的定序或排序的進一步的細節(jié)。存儲器流模塊200還可以包括非一致的流標識符子模 塊240。在某些實施例中,非一致的流標識符子模塊240可以定義NOCO觸發(fā)器操作的順序。 例如,在某些實施例中,觸發(fā)器操作可以按先后順序。在某些實施例中,先后順序可以是指 程序順序,其中,操作(例如,NOCO觸發(fā)器操作)被執(zhí)行,以便按照程序順序較早地發(fā)出的 NOCO觸發(fā)器在按照程序順序較晚發(fā)出的NOCO觸發(fā)器之前執(zhí)行。
[0035] 如此,可以接收存儲器操作的系列。存儲器操作的系列可以按程序順序(例如,按 存儲器操作被發(fā)出的順序)。存儲器操作的系列可以基于按先后順序來排序或基于這樣的 順序排序:在寫入事務之前的讀取事務可以在寫入事務之前執(zhí)行。此外,還可以接收NOCO 觸發(fā)器的系列。NOCO觸發(fā)器可以基于先后順序。
[0036] 參考圖2,存儲器流模塊200可包括依賴關系子模塊250。在某些實施例中,依賴 關系子模塊250可以基于存儲器操作,定義一個或多個NOCO觸發(fā)器的依賴關系。在某些實 施例中,依賴關系可以是指一個特定存儲器操作在依賴于該特定存儲器操作的NOCO觸發(fā) 器可以被執(zhí)行之前被執(zhí)行或完成的要求。在某些實施例中,可以基于讀取事務或存儲器操 作,為觸發(fā)器操作定義依賴關系,(例如,NOCO觸發(fā)器可以不執(zhí)行并繞過較舊的讀取操作), 和/或基于提升的寫入存儲器操作,為NOCO觸發(fā)器定義依賴關系。例如,存儲器流模塊200 可包括提升子模塊260。在某些實施例中,提升子模塊260可以標識寫入存儲器操作被提 升。提升的寫入操作可以是指在處理器或處理設備的外面被分派的寫入操作。響應于寫入 存儲器操作被提升的標識,提升子模塊260可以基于被提升的寫入存儲器操作,為NOCO觸 發(fā)器創(chuàng)建依賴關系。
[0037] 圖3是根據(jù)一些實施例的執(zhí)行存儲器操作和非一致的功能單元(NOCO)觸發(fā)器的 方法300的流程圖。在某些實施例中,方法300可以由存儲器流模塊107或200執(zhí)行。例 如,方法300可以被圖1的存儲器流模塊107或圖2的存儲器流模塊200用來控制和/或 更新執(zhí)行順序和與對應于一致的存儲器的存儲器操作和對應于處理器(例如,處理器102) 的NOCO功能單元的NOCO觸發(fā)器相關聯(lián)的依賴關系。方法300可以由處理邏輯執(zhí)行,該處 理邏輯可以包括硬件(例如電路、專用邏輯、可編程邏輯、微代碼等等)、軟件、固件、或其組 合??闪磉x地,計算系統(tǒng)100的其他組件可以執(zhí)行方法300的某些或所有操作。
[0038] 如圖3所示,方法300可以以處理邏輯在框310標識存儲器操作的系列開始(框 310)。在某些實施例中,存儲器操作可以按先后順序(例如,按程序順序)或可以按這樣的 總存儲順序:可以放寬或修改后面跟著讀取存儲器操作的寫入事務,以便讀取存儲器操作 可以在較早的寫入存儲器操作之前執(zhí)行。此外,存儲器操作還可以與向可以被用來存儲控 制塊和經(jīng)處理的數(shù)據(jù)的一致的存儲器的讀取存儲器操作和寫入存儲器操作相關聯(lián)。例如, 存儲器操作可以為NOCO功能單元指定指令。在某些實施例中,指令可包括控制NOCO功能 單元可以如何執(zhí)行的信息,NOCO功能單元應該執(zhí)行的命令,NOCO功能單元應該檢索以對其 執(zhí)行的數(shù)據(jù)的位置,等等。如此,控制塊可包括確定NOCO功能單元應該檢索的數(shù)據(jù)的信息, 如何對NOCO功能單元將檢索的數(shù)據(jù)進行操作以生成經(jīng)處理的數(shù)據(jù),以及將存儲經(jīng)處理的 數(shù)據(jù)的一致的存儲器中的位置。
[0039] 處理邏輯還可以進一步標識NOCO觸發(fā)器的系列(框320)。在某些實施例中,NOCO 觸發(fā)器可以是對應的NOCO功能單元從一致的存儲器中檢索數(shù)據(jù)的指令或命令。例如,NOCO 觸發(fā)器可以指定存儲在一致的存儲器中的NOCO功能單元將檢索和/或?qū)?zhí)行的控制塊的 位置。如此,NOCO觸發(fā)器可以被視為指定NOCO功能單元將如何操作的操作。
[0040] 參考圖3,處理邏輯可以基于存儲器操作的系列,為NOCO觸發(fā)器創(chuàng)建依賴關系(框 330)。在某些實施例中,依賴關系可以指定,在存儲器操作系列的特定存儲器操作被執(zhí)行完 之前將不執(zhí)行特定NOCO觸發(fā)器。如此,依賴關系可以被視為對于特定NOCO觸發(fā)器何時可 以被執(zhí)行的一種限制。此外,處理邏輯還可以執(zhí)行存儲器操作和NOCO觸發(fā)器(框340)。例 如,處理邏輯可以執(zhí)行存儲器操作和NOCO觸發(fā)器,以便NOCO觸發(fā)器中的一個或多個依賴于 存儲器操作中的一個或多個。
[0041] 圖4A示出了根據(jù)一些實施例的存儲器操作和NOCO觸發(fā)器的示例序列400。一般 而言,序列400可包括對應于一致的存儲器(例如,存儲器120)的存儲器操作的第一流,和 對應于至少一個NOCO功能單元(例如,NOCO 130)的NOCO觸發(fā)器的第二流,其中,第二流的 NOCO觸發(fā)器在第一流的存儲器操作的較早的讀取操作之前不能執(zhí)行。序列400可以由圖1 的存儲器流模塊107或圖2的存儲器流模塊200創(chuàng)建。例如,存儲器流模塊可以為NOCO觸 發(fā)器定義依賴關系,以便NOCO觸發(fā)器不能在較早的存儲器操作(這是來自第一流的讀取事 務)之前執(zhí)行。
[0042] 如圖4A所示,序列400可包括一致的存儲器的存儲器操作的第一流410,其中包括 被稱為讀取存儲器操作A的存儲器操作411、被稱為讀取存儲器操作B的存儲器操作412、 被稱為寫入存儲器操作C的存儲器操作413、被稱為寫入存儲器操作D的存儲器操作414, 以及被稱為讀取存儲器操作E的存儲器操作415。此外,序列400還可包括一個或多個NOCO 功能單元的NOCO觸發(fā)器的第二流420,其中包括被稱為觸發(fā)器X的NOCO觸發(fā)器421,可以 被稱為觸發(fā)器Y的NOCO觸發(fā)器422。在某些實施例中,NOCO觸發(fā)器中的每一個都可以是向 NOCO功能單元的寫入操作。如此,序列400可包括向一致的存儲器的讀取和寫入操作的第 一流,以及向NOCO功能單元的寫入操作的第二流。存儲器操作和NOCO觸發(fā)器中的每一個 的布局可以對應于存儲器操作或NOCO觸發(fā)器何時被發(fā)出的時間。例如,存儲器操作或NOCO 觸發(fā)器越靠近獲取操作,按程序順序越早發(fā)出存儲器操作或觸發(fā)器操作。例如,讀取存儲器 操作A可以被視為按程序順序的第一操作,觸發(fā)器X可以被視為按程序順序的第二操作,讀 取和寫入存儲器操作B和C可以被視為按程序順序的第三和第四操作,觸發(fā)器Y可以被視 為按程序順序的第五操作,以此類推。
[0043] 在某些實施例中,序列400可以被稱為帶有NOCO流的放寬的順序一致性。例如, 順序一致性可以是指按程序順序執(zhí)行存儲器操作和NOCO觸發(fā)器(例如,按照操作被發(fā)出的 順序)。這樣的順序一致性可以導致后面跟著觸發(fā)器X的讀取存儲器操作A的執(zhí)行,然后, 后面跟著讀取存儲器操作B和寫入操作C,觸發(fā)器Y跟在讀取存儲器操作B和寫入存儲器 操作C之后。然而如果存儲器操作是在NOCO觸發(fā)器被發(fā)出之前發(fā)出的讀取存儲器操作,帶 有NOCO流的放寬的順序一致性可以定義NOCO觸發(fā)器和存儲器操作中的一個之間的依賴關 系。在某些實施例中,流410的存儲器操作可以被執(zhí)行,而不等待特定NOCO觸發(fā)器被執(zhí)行。 例如,存儲器操作B,C,D以及E中的任何一個可以被允許在NOCO觸發(fā)器X和Y中的任何一 個被執(zhí)行完之前執(zhí)行。然而,存儲器操作B,C,D以及E可以按程序順序執(zhí)行(例如,存儲器 操作B必須在稍后的存儲器操作C,D,或E之前執(zhí)行)。如此,存儲器操作的流410可以被 視為與NOCO觸發(fā)器無關。NOCO觸發(fā)器操作的流420可以與其他NOCO觸發(fā)器按先后順序放 置。例如,NOCO觸發(fā)器X可以按程序順序比NOCO觸發(fā)器Y早地發(fā)出。如此,NOCO觸發(fā)器X 必須在可以執(zhí)行NOCO觸發(fā)器Y之前執(zhí)行。然而,可以在NOCO觸發(fā)器X和NOCO觸發(fā)器Y之 間定義與存儲器操作411和413的依賴關系423和424。例如,NOCO觸發(fā)器X可以不被允 許執(zhí)行,直到存儲器操作A已經(jīng)執(zhí)行,NOCO觸發(fā)器Y可以不被允許執(zhí)行,直到NOCO觸發(fā)器X 和存儲器操作C已經(jīng)執(zhí)行。如此,依賴關系423和424基于存儲器操作,定義NOCO觸發(fā)器 何時可以執(zhí)行。如此,特定NOCO觸發(fā)器(例如,NOCO觸發(fā)器Y)可以不被允許執(zhí)行,直到前 一 NOCO觸發(fā)器(例如,NOCO觸發(fā)器X)和特定存儲器操作(例如,存儲器操作C)已經(jīng)被執(zhí) 行。
[0044] 圖4B示出了根據(jù)一些實施例的存儲器操作和觸發(fā)器的另一示例序列430。一般而 言,序列400可包括對應于一致的存儲器(例如,存儲器120)的存儲器操作的第一流,和對 應于至少一個NOCO功能單元(例如,NOCO 130)的NOCO觸發(fā)器的第二流,其中,第二流的 NOCO觸發(fā)器在第一流的存儲器操作的提升的寫入操作執(zhí)行完之前不能執(zhí)行。序列430可 以由圖1的存儲器流模塊107或圖2的存儲器流模塊200創(chuàng)建。例如,存儲器流模塊可以 為NOCO觸發(fā)器定義依賴關系,以便NOCO觸發(fā)器不能在較早的存儲器操作(這是來自第一 流的提升的寫入操作)之前執(zhí)行。
[0045] 如圖4B所示,第一流440可包括存儲器操作441,442,443,444,以及445。此外, 第二流450還可包括NOCO觸發(fā)器操作451和NOCO觸發(fā)器操作452。序列430可以被稱為 帶有單向圍墻(one way fence)是弱NOCO流。例如,存儲器操作C*可以被稱為提升的寫入 操作。在某些實施例中,提升的寫入操作可以是可以在CPU的外面分派或執(zhí)行的寫入操作。 例如,對應于存儲器操作C*的提升的寫入操作可以是將新控制塊寫入到一致的存儲器,將 由NOCO功能單元對該一致的存儲器進行操作。在某些實施例中,提升的寫入事務可以導致 新依賴關系454,該新依賴關系454指定,可能不能執(zhí)行NOCO觸發(fā)器操作Y,直到在提升的 寫入事務被執(zhí)行完之后。依賴關系453也可以定義,不可以在讀取存儲器操作A之前執(zhí)行 NOCO觸發(fā)器操作X。
[0046] 圖4C示出了根據(jù)一些實施例的存儲器操作和觸發(fā)器的另一示例序列460。一般 而言,序列460可包括對應于一致的存儲器(例如,存儲器120)的存儲器操作的第一流,和 對應于至少一個NOCO功能單元(例如,NOCO 130)的NOCO觸發(fā)器的第二流,其中,第二流 的NOCO觸發(fā)器在第一流的存儲器操作的提升的寫入操作執(zhí)行完之前不能執(zhí)行,并且可以 排序第一流的存儲器操作,以便稍后的讀取存儲器操作可以在較早的寫入存儲器操作之前 執(zhí)行。序列460可以由圖1的存儲