亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

多處理器系統(tǒng)中的高性能隊列實現(xiàn)的制作方法

文檔序號:6554046閱讀:332來源:國知局
專利名稱:多處理器系統(tǒng)中的高性能隊列實現(xiàn)的制作方法
技術(shù)領(lǐng)域
本公開一般涉及排隊軟件,更具體來說涉及用于多處理環(huán)境的排 隊軟件。
背景技術(shù)
從計算機行業(yè)最初期起, 一直存在對提高系統(tǒng)性能以便比以往更 快地運行應(yīng)用程序的需求或?qū)υ诳山邮艿臅r間范圍內(nèi)運行能產(chǎn)生結(jié) 果的應(yīng)用程序的需求。用于提高計算機系統(tǒng)的性能的一種方法是,使 系統(tǒng)將進程或進程的一部分(例如線程)彼此并行地在具有多個處理 器的系統(tǒng)上運行。
隊列是一種用于線程通信和同步的常用數(shù)據(jù)結(jié)構(gòu)。線程可以將數(shù)據(jù)項目置于隊列中(稱為入列(enqueuing)),并且其他線程可以通過 先進先出(FIFO)方式從隊列取出數(shù)據(jù)項目(稱為出列(dequeuing)), 因此在線程之間傳送數(shù)據(jù),并可以協(xié)調(diào)所涉及的線程的活動。例如流 傳輸計算、分組處理計算、數(shù)據(jù)流計算等的多線程應(yīng)用延伸性地采用 隊列。例如,多線程網(wǎng)絡(luò)應(yīng)用可以4吏一個線程處理分組凈艮頭,然后經(jīng) 由隊列將分組傳遞到另一個線程以進行有效載荷處理。
隊列實現(xiàn)的主要潛在性能瓶頸包括提供并發(fā)訪問控制,即確保對 隊列項的多線程并發(fā)訪問的正確性同時還保持FIFO特性。在現(xiàn)有的 實現(xiàn)中,所采用的機制可能包括1)使用互斥或原子臨界部分(atomic critical section),這通常通過鎖或推測來實現(xiàn);2)用于加載-修改-存 儲的多個存儲器訪問原子指令或更具體地說用于多個存儲器操作的 原子指令,例如原子比較交換或原子交換;或3)線程調(diào)度器協(xié)調(diào), 例如Linux內(nèi)核中的任務(wù)就緒隊列。遺憾的是,為了保證正確地并發(fā)訪問隊列,這些機制的每一種機制都可能帶來相當(dāng)大的性能懲罰。


圖1是示出結(jié)合了本發(fā)明實施例的系統(tǒng)的硬件和軟件組件的框圖。
圖2A是根據(jù)本發(fā)明實施例的隊列數(shù)據(jù)結(jié)構(gòu)的框圖。
圖2B是根據(jù)本發(fā)明備選實施例的隊列數(shù)據(jù)結(jié)構(gòu)的框圖。
圖3A是圖示根據(jù)本發(fā)明實施例、用于讀取隊列項的方法的流程圖。
圖3B是圖示根據(jù)本發(fā)明實施例、用于寫入隊列項的方法的流程圖。
圖3C是圖示根據(jù)本發(fā)明實施例、用于讀取緩沖的隊列項的方法 的流程圖。
圖3D是圖示根據(jù)本發(fā)明實施例、用于寫入緩沖的隊列項的方法 的流程圖。
圖4是圖示根據(jù)本發(fā)明實施例的多個寫入器單個讀取器排隊系統(tǒng) 的軟件組件的框圖。
圖5是圖示根據(jù)本發(fā)明實施例的單個寫入器多個讀取器排隊系統(tǒng) 的軟件組件的框圖。
圖6是圖示根據(jù)本發(fā)明實施例的多個寫入器多個讀取器排隊系統(tǒng) 的軟件組件的框圖。
具體實施例方式
在下文對本發(fā)明的示范實施例的詳細描述中,參考了附圖,這些 附圖構(gòu)成描述的 一部分并且在附圖中以說明形式示出了可以實施本 發(fā)明主題的特定示范實施例。對這些實施例進行了充分詳細地描述, 從而使本領(lǐng)域技術(shù)人員能夠?qū)嵤┍景l(fā)明的多種實施例,并且要理解可 以利用其他實施例,并在不背離本發(fā)明主題范圍的前提下可以進行邏 輯、機械、電子或其他方面的更改。因此,下文的詳細描述不應(yīng)視為 限制意義。
在這些附圖中,相同的引用號通篇用于指代多個附圖中出現(xiàn)的完全相同的組件。信號和連接可以由相同的引用號或標記來指代,實際的含義將在描述的上下文中通過其使用予以闡明。
圖1是示出結(jié)合了本發(fā)明實施例的系統(tǒng)100的硬件和軟件組件的框圖。在一些實施例中,系統(tǒng)100包括處理單元102、存儲器104、線程106和隊列108。在一些實施例中,處理單元102可以是作為多核處理器的一部分的處理引擎。這些類型的體系結(jié)構(gòu)可以稱為多核體系結(jié)構(gòu)。因此,多核處理體系結(jié)構(gòu)在邏輯上是具有多個獨立處理引擎(核)的單個處理器。在備選實施例中,在電路板上存在多個處理器的情況中,處理單元102可以是電路板上的各個處理器。在又一個備選實施例中,處理單元102均可以位于作為多處理器板系統(tǒng)的一部分的板上。在一些實施例中,系統(tǒng)100包括SMP (對稱多處理)體系結(jié)構(gòu),SMP (對稱多處理)體系結(jié)構(gòu)使多個處理單元可用于同時完成各個進程(多處理)。在SMP中,可以將任何空閑的處理器指定給任何任務(wù),并且可以添加附加的處理單元來提高性能和處理增加的負栽。而且,處理器102能夠?qū)崿F(xiàn)多線程。多線程提供同時執(zhí)行程序的若干部分(稱為線程)的能力。
應(yīng)該注意,雖然圖1中圖示了四個處理單元102,但是本發(fā)明的 任何實施例都不局限于任何數(shù)量的處理單元102。多種實施例可以具有更多或更少的處理單元,以及在一些實施例中,使用十六個處理單 元。
存儲器104可以是能夠存儲程序和數(shù)據(jù)的任何類型的存儲器。此 類存儲器的示例包括SRAM (靜態(tài)RAM )、 DRAM (動態(tài)隨機存取存儲器)、SDRAM (同步DRAM )、 DDR-SDRAM (雙數(shù)據(jù)速率SDRAM) 或任何其他類型的存儲器。
每個線程106是能夠獨立于程序或進程的其他線程來執(zhí)行的程序 的一部分。線程106可以在不同處理器102上以并行方式執(zhí)行。在本發(fā)明的多種實施例中,線程106在一個或多個隊列108中讀取和/或?qū)?br> 入項。圖1中示出四個線程106.1-106.4,但是,多種實施例中可以有 更多或更少的線程106。
隊列108是用于提供對隊列中的項進行先進先出處理的數(shù)據(jù)結(jié) 構(gòu)。換言之,插入到隊列中的第一個元素將是從隊列中移除的第一個 元素。因此,無論何時,只要添加項,則需要移除之前添加的所有項 之后才能移除最近添加的項。圖1中圖示了兩個隊列108.1和108.2, 但是多種實施例中可能有更多或更少的隊列108。下文參考圖2A-2B 提供有關(guān)本發(fā)明多種實施例中使用的隊列數(shù)據(jù)結(jié)構(gòu)的進一步細節(jié)。
圖1圖示其中每個隊列108.1和108.2是單個讀取器單個寫入器 (single reader single writer SRSW)隊列的示范實施例。即,單個線程 從單獨隊列讀取,而單個線程向單獨隊列寫入。在圖1所示的示例中, 線程106.1向隊列102.1中寫入,而線程106.2從隊列108.1中讀取。
圖2A是根據(jù)本發(fā)明實施例的隊列數(shù)據(jù)結(jié)構(gòu)108的框圖。在一些 實施例中,隊列數(shù)據(jù)結(jié)構(gòu)108包括頭部值202、尾部值204和隊列項 206。在一些實施例中,隊列項206包含具有值的隊列項的陣列,這 些值是空隊列項值或非空隊列項值。在一些實施例中,隊列項是指向 隊列項的數(shù)據(jù)對象的指針。如杲隊列項具有空值,則隊列項是空的。 任何不是有效隊列項值的值均可用作空(NULL)值。例如,在隊列項是 指向數(shù)據(jù)對象的指針的情況中,可以使用0 (零)或-1的值來指示空 值,因為這些值都不是有效的指針值。此外,隊列項206中的每個隊 列項在存儲器邊界上對齊,這將允許利用單個存儲器訪問(例如加載 (讀取)或存儲(寫入))對隊列項的原子訪問。在一些實施例中, 隊列項在字邊界上對齊,并且是具有字大小的項。但是,可以使用將 提供利用單個存儲器訪問對隊列項的原子訪問的任何邊界和大小。
頭部值202是對隊列108的頭部的引用。隊列的頭部是隊列中將 從隊列移除下一個隊列項所在的點。當(dāng)移除項時,頭部值4皮調(diào)整為引 用新的頭部項。在一些實施例中,頭部值202是至隊列項陣列的索引。
尾部值204是對隊列108的尾部的引用。隊列的尾部是隊列中將下一個隊列項添加到隊列所在的點。當(dāng)添加項時,尾部值^皮調(diào)整為引 用隊列中的下一個可用項。
在一些實施例中,隊列108可以包括讀取緩沖器208和寫入緩沖 器210。高速緩存性能可以是隊列系統(tǒng)性能的一個重要要素。在典型 的隊列訪問模式中,讀取(出列)和寫入(入列)互相混合。作為結(jié) 果,讀取之后寫入,或?qū)懭胫笞x取可能導(dǎo)致高速緩存未命中。使用 讀取緩沖器208和寫入緩沖器210增加了讀取之后寫入(或反之)導(dǎo) 致高速緩存命中的概率,因為讀取和寫入緩沖器可以存儲在分開的高 速緩存行中。下文參考圖3C和3D提供有關(guān)使用讀取緩沖器208和寫 入緩沖器210的進一步細節(jié)。
而且,在一些實施例中,隊列108可以具有隊列標識符212。在 一些實施例中,使用多個隊列108來實現(xiàn)排隊系統(tǒng)。在此情況中,每 個隊列108可以稱為子隊列??梢允褂藐犃蠭D來標識排隊系統(tǒng)中指 定給特定線程的隊列。在一些實施例中,隊列標識符212是所謂的"線 程本地變量"。使用線程本地變量是所希望的,因為進程的線程通常 共享與該進程相同的地址空間。因此線程本地變量為線程^是供維護不 與進程中的其他線程共享的值的方式。
圖2B是根據(jù)本發(fā)明備選實施例的隊列數(shù)據(jù)結(jié)構(gòu)108的框圖。在 這些實施例中,隊列數(shù)據(jù)結(jié)構(gòu)108包括填充陣列214。如上文提到的, 高速緩存性能對隊列系統(tǒng)性能有相當(dāng)大的影響。因此,所希望的是確 保頭部202、尾部204和隊列項206均占據(jù)不同的高速緩存行。在一 些實施例中,在隊列數(shù)據(jù)結(jié)構(gòu)中插入填充陣列214,并具有經(jīng)計算以 確保下一個屬性(例如尾部或隊列項)位于不同高速緩存行中的大小。 例如,假定頭部202是整數(shù)值。可以將頭部值202之后的填充陣列214 確定為大小等于系統(tǒng)的高速緩存行大小減去整數(shù)的大小。在備選實施 例中,可以使用編譯器指導(dǎo)指令來確保頭部202、尾部204和隊列項 206位于不同的高速緩存行中。例如,如下代碼段使用"attribte"編 譯器指導(dǎo)指令來向編譯器指示應(yīng)該在高速緩存行邊界上對齊整數(shù)尾部值
int tail—attribute((allgned(LINE—SIZE));
圖3A-3D是圖示根據(jù)本發(fā)明實施例、用于讀取和寫入隊列項的方 法的流程圖。這些方法可以在例如上文參考圖l所述的操作環(huán)境內(nèi)扭^ 行。該操作環(huán)境要執(zhí)行的方法構(gòu)成由計算機可執(zhí)行指令組成的計算機 程序。參考流程圖描述這些方法使本領(lǐng)域技術(shù)人員能夠開發(fā)包含此類 指令的此類程序以在適合的計算機(執(zhí)行來自諸如RAM、 ROM、 CD-ROM、 DVD-ROM、硬盤、閃速存儲器等的機器可讀取4某體的指令的計算機的處理器)上執(zhí)行這些方法。圖3A-3D所示的方法包含由 運行本發(fā)明的示范實施例的操作環(huán)境所執(zhí)行的動作。
圖3A是圖示根據(jù)本發(fā)明實施例、用于寫入隊列項的方法的流程 圖。在一些實施例中,該方法開始于接收將新項置于隊列中的請求(框 304)。在一些實施例中,該請求采用提供對隊列以及對要置于隊列中 (入列)的數(shù)據(jù)(或數(shù)據(jù)指針)的引用的函數(shù)調(diào)用的形式。
該系統(tǒng)保存當(dāng)前尾部項值(框306 ),然后進行檢查以確定所保存 的尾部項值是否不是空值(框308 )。如果當(dāng)前保存的尾部項值不為空, 則系統(tǒng)指示寫入失敗(框310)。在一些實施例中,這通過返回FLASE 值來實現(xiàn)。在備選實施例中,系統(tǒng)可以通過讀取尾部項值并檢查該尾 部項值為空來重試框306和308,從而使寫入能在后續(xù)重試中成功。 寫入可能因為隊列已滿而失敗?;蛘?,寫入可能因為隊列的頭部和尾 部引用相同的隊列項而失敗。在此情況中,讀取線程可能尚未完成讀 取隊列項(并將頭部隊列項設(shè)為空),因此所希望的是在讀取完成之 后將新項寫入隊列的嘗試才會成功。
如果在框308處檢查確定所保存的尾部項為空,則系統(tǒng)接著將新 項寫入到當(dāng)前尾部位置(框312)。然后將尾部值調(diào)整為指向隊列中的 下一個項(框314)。如果隊列是固定大小的,則在寫入最后一個隊列 項之后可以將尾部值回繞到第一個隊列項。該方法然后返回指示寫 入已成功(框316)。在一些實施例中,這通過返回TRUE值來實現(xiàn)。
圖3B是圖示根據(jù)本發(fā)明實施例、用于讀取隊列項的方法的流程 圖。該方法開始于接收從隊列中檢索項(即要將項出列)的請求(框 320)。在一些實施例中,該請求采用標識要使用的隊列的函數(shù)調(diào)用的 形式。
系統(tǒng)然后保存隊列的頭部位置的頭部值(框322)。接下來,系統(tǒng) 進行檢查以確定所保存的頭部項是否等于空值(框324 )。如果所保存 的頭部項為空,則系統(tǒng)將空值返回到請求方(框326)。空值可以指示 該隊列是空的?;蛘呖罩悼梢灾甘绢^部和尾部引用相同的隊列項,以 及寫入隊列的線程尚未完成寫入隊列項。
如果在框324處檢查確定所保存的頭部項不為空,則系統(tǒng)將當(dāng)前 頭部項設(shè)為空(框328)以指示已移除該項(即出列)。系統(tǒng)然后將頭 部指針更新為指向隊列中的下一個項(框330),并將所保存的隊列項 返回到請求方(框331 )。
可以看到圖3A和3B所示的方法提供對隊列的原子和并發(fā)訪問, 并避免了數(shù)據(jù)竟?fàn)帬顩r。最初,如果頭部和尾部引用是引用不同的隊 列項,則讀取(出列)和寫入(入列)相對于彼此是原子的,因為涉 及的是完全不同的隊列項。在頭部引用和尾部引用都引用相同隊列項 的情況中,存在兩種情況,如果要讀取隊列項(出歹'J)或要寫入隊列 項(入列)的請求方不交叉,則請求方相對于彼此是原子的。但是, 如果請求方交叉,即出列期間接收到入列或入列期間接收到出列,則 在框322與330之間執(zhí)行框306,或在框306與314之間執(zhí)行框322。 在這兩種情況的任何一種情況中,兩個線程將加栽相同的項值。因為 它們在框308和324處的檢查是針對相反的狀況(空或非空),它們 僅其中之一將發(fā)現(xiàn)狀況為FALSE,并繼續(xù)在框312或328處進行存儲 4喿作。因此,原子性得以維持,因為在讀取(出歹'j )和寫入(入列) 請求交叉時僅一個線程更新隊列。
圖3C是圖示根據(jù)本發(fā)明實施例、用于寫入緩沖的隊列項的方法 的流程圖。如上文提到的,緩沖是所希望的,因為它可以降低高速緩
存未命中的概率,在本發(fā)明的一些實施例中,緩沖器大小等于一個高
速緩存行大小,將緩沖器對齊(align)使得它僅被映射到一個高速纟爰存 行。以此方式,從隊列的緩沖器加載或?qū)﹃犃械乃⑿聝H觸及一個高速 緩存行。同時,按高速緩存行大小粒度的隊列訪問(入列和出列)使 得高速緩存未命中更少,并能夠利用存儲器系統(tǒng)的大量傳輸能力。該 方法開始于接收將新項置于隊列的請求(框304 )。
系統(tǒng)然后檢查寫入緩沖器是否已滿(框332)。如果緩沖器未滿, 則將新項置于寫入緩沖器中(框334),并且方法結(jié)束。
否則,如果緩沖器已滿,則該方法進行檢查以查看當(dāng)前尾部項是 否不等于空值(框336)。如果當(dāng)前尾部項不等于空值,則隊列已滿并 且無法保存更多項,或入列請求與出列請求交叉,而出列尚未完成。 在任何一種情況中,該方法向請求方指示失敗(框338 )。
否則,如果尾部項為空,則將寫入緩沖器中的當(dāng)前隊列項傳送到 (transfer to)隊列(框340)。在一些實施例中,傳送按相反次序(從最 后一個向第一個)進行,從而當(dāng)前尾部項將保持為空直到寫入了整個 緩沖器為止。這是所希望的,因為到達當(dāng)前尾部項的任何交叉的出列 請求將返回指示該隊列為空的空值,直到(第一個纟爰沖器項的)最后 一次寫入完成為止。
接下來,調(diào)整當(dāng)前尾部指針(框342X在一些實施例中,按從寫 入緩沖器傳送到隊列的項的數(shù)量調(diào)整當(dāng)前尾部指針。在備選實施例 中,可以按與緩沖器項的總數(shù)相等的常量來調(diào)整尾部指針。系統(tǒng)然后向請求方指示已成功寫入隊列項(框344)。
應(yīng)該注意,如果未將數(shù)據(jù)提供給隊列上的項,則在相對豐支長的時 間段內(nèi)僅部分填充寫入緩沖器是可能的。因此,所希望的是周期性地 檢查寫入緩沖器以查看寫入緩沖器是否為部分滿,并將項從寫入緩沖 器刷新到隊列項。在一些實施例中,將在其中檢查部分填充的緩沖器 的時間段設(shè)為稍長于隊列寫入(入列)函數(shù)的調(diào)用時間間隔。在備選 實施例中,在其中檢查部分填充的緩沖器的時間段可以基于存儲器等待時間和將項目從寫入緩沖器傳送到隊列項所需的存儲器總線事務(wù) 的數(shù)量來確定。
在一些實施例中,即使緩沖器可能不滿,刷新操作仍使用任何未 填充的緩沖器項的空值將所有緩沖器項寫入到隊列項中。隊列讀取器 可以在將隊列項讀取到讀取緩沖器時忽略這些空值。
圖3D是圖示根據(jù)本發(fā)明實施例、用于讀取緩沖的隊列項的方法 的流程圖。該方法開始于接收從隊列中檢索項的請求(框320)。
系統(tǒng)然后確定讀取緩沖器中是否存在任何項(框352 ),如果存在 的話,則將讀取緩沖器中的第一個可用項返回到請求方(框354)。修 改緩沖器的內(nèi)容以指示已移除該項,并將緩沖器中的項的計數(shù)遞減1。
如果在框352處檢查確定緩沖器是空的,則系統(tǒng)保存當(dāng)前頭部項 (框356 )。系統(tǒng)然后確定當(dāng)前頭部項是否等于空值(框358)。如果 當(dāng)前頭部項為空,則系統(tǒng)將空值返回到請求方(框360)。這指示隊列 是空的,或隊列的頭部和尾部引用相同的項,并且入列器(enqueuer) 將項寫入隊列尚未完成。
如果在框358處檢查指示隊列不是空的(即,所保存的頭部項不 為空),則系統(tǒng)接著將項從隊列傳送到讀取緩沖器(框362)。在傳送 每個項時,進行檢查以確定它是否是空值。在一些實施例中,如果讀 取緩沖器已滿,則傳送停止。而且,如果讀取到空的隊列項,傳送也 可以停止,這意味著余下的隊列項全部為空,并因此對于此緩沖器加 載忽略余下隊列項。
然后調(diào)整頭部引用(框364)。在一些實施例中,按傳送到讀取緩 沖器的隊列項的數(shù)量來調(diào)整頭部引用。在備選實施例中,按與緩沖器 項的總數(shù)相等的常量來調(diào)整頭部引用。該方法結(jié)束于將所保存的頭部 項值返回到請求方(框366)。
上文提供的系統(tǒng)和方法描述了所謂的單個讀取器單個寫入器 (SRSW)隊列。下文中圖4-6描述使用SRSW隊列作為構(gòu)建塊來創(chuàng) 建更廣泛且更靈活的排隊系統(tǒng)的實施例。
圖4是圖示根據(jù)本發(fā)明實施例的單個讀取器多個寫入器(SRMW) 隊列系統(tǒng)的軟件組件的框圖。在圖3所示的示范配置中,創(chuàng)建兩個 SRSW隊列108.1和108.2。將兩個線程106.1和106.2分別與隊列108.1 和108.2關(guān)聯(lián)。在本發(fā)明一些實施例中,每個線程將隊列標識212保 存在線程本地變量中。線程106.3是從隊列108.1和108.2讀取的線程。 從圖3可看到,每個隊列具有單個寫入器和單個讀取器線程。如上所 述,此類隊列支持對隊列項的并發(fā)原子訪問。因此,圖4所示的SRMW 排隊系統(tǒng)也能夠支持對每個單獨隊列108中的項的并發(fā)原子訪問。雖 然圖4中圖示了兩個隊列,但是多種實施例可以支持多于兩個的隊列。 實際上,可以支持任意數(shù)量"n"的寫入線程,只要作為SRMW排隊 系統(tǒng)的一部分創(chuàng)建的每個單獨隊列是具有一個讀取器和一個寫入器 的SRSW隊列即可。在一些實施例中,單個讀取器線程以循環(huán)方式(例
如以108.1、 108.2.....108.n、 108.1、 108.2..... 108.n,以此類推)
從隊列108.1 - 108.n中讀取。在備選實施例中,單個讀取器線程能以
擺動方式(例如以108.1、 108.2、...、跳n、 108.n、跳n-l.....108.2、
108.1,以此類推)從隊列108.1 — 108.n中讀取。
圖5是圖示根據(jù)本發(fā)明實施例、用于多個讀取器單個寫入器 (MRSW)排隊系統(tǒng)的軟件組件的框圖。在圖5所示的示例中,兩個 隊列108.1和108.2均具有一個讀取器線程,分別為線程106.1和106.2, 以及對兩個隊列寫入的單個寫入器線程106.3。同樣地,因為每個單 獨隊列108.1和108.2是SRSW隊列,所以圖5所示的MRSW排隊系 統(tǒng)可以提供對隊列108.1和108.2中的隊列項的并發(fā)原子訪問。雖然 圖5中圖示了兩個隊列,但是多種實施例可以支持多于兩個的隊列。 實際上,可以支持任意數(shù)量"n"的讀取線程,只要作為MRSW排隊 系統(tǒng)的一部分創(chuàng)建的每個單獨隊列是具有一個讀取器線程和一個寫 入器線程的SRSW隊列即可。在一些實施例中,寫入線程106.3以循 環(huán)方式對隊列108.1-108.n寫入。在備選實施例中,寫入線程106.3以 才罷動方式對隊列108.1-108.n寫入。
圖6是圖示根據(jù)本發(fā)明實施例的多個寫入器多個讀取器 (MRMW)排隊系統(tǒng)的軟件組件的框圖。在圖6所示的示例中,創(chuàng)建 了四個隊列108.1-108.4。兩個線程是寫入線程(線程106.1和106.2 ), 兩個線程是讀取線程(106.3和106.4 )。創(chuàng)建復(fù)用器線程602,它從隊 列108.1和108.2中讀取并對隊列108.3和108.4寫入。復(fù)用器線程602 是所謂的幫助器線程,因為其目的在于在讀取和寫入線程可以對隊列 項執(zhí)行處理時,通過在多種讀取和寫入線程之間讀取和分發(fā)(即復(fù)用) 隊列項來幫助隊列處理。
在圖4-6所示的多個隊列實施例的每個實施例(即SRMW、MRSW 和MRMW排隊系統(tǒng))中,用于創(chuàng)建較大的SRMW、 MRSW或MRMW 隊列的SRSW隊列可以稱為子隊列??梢栽诰幊虝r、編譯時或運行時 中的任一個確定隊列中子隊列的計數(shù)。在編程時,編程員可以通過對 讀取器和寫入器的數(shù)量計數(shù)來指定子隊列的計數(shù)。在編譯時,編譯器
將執(zhí)行程序分析來推導(dǎo)將有多少個讀取器和寫入器存在,然后確定子 隊列計數(shù)。在運行時,運行時系統(tǒng)可以在每次新線程訪問隊列時動態(tài) 地遞增子隊列數(shù)量,而在線程退出時遞減子隊列數(shù)量。在一些實施例 中,如果讀取器線程退出時隊列項仍在隊列中,則可以將余下的隊列 項傳送(例如通過復(fù)用器線程)到具有與之關(guān)聯(lián)的頭部線程的新隊列。 在備選實施例中,系統(tǒng)可以容許"丟失的"隊列,并只需丟棄余下的 隊列項即可。
已經(jīng)描述了用于提供多線程排隊系統(tǒng)的系統(tǒng)和方法。本申請旨在 涵蓋本發(fā)明實施例的任何調(diào)整或改變。要理解上文描述旨在進行說明 而非限制。對于審閱了上文描述的本領(lǐng)域技術(shù)人員來說,將顯見到許 多其他實施例。因此,顯然本發(fā)明主題僅由所附權(quán)利要求及其等效物 限定。
權(quán)利要求
1.一種方法,包括將第一隊列初始化,所述第一隊列具有一組第一隊列項,所述第一隊列項具有至少一個有效值和空值,所述第一隊列項的每一個占用在單個存儲器訪問中以原子方式可訪問的存儲器部分;接收對所述一組第一隊列項的隊列項執(zhí)行隊列操作的請求;以及基于所述隊列項是否具有空值的確定來確定是否要執(zhí)行所述隊列操作。
2. 如權(quán)利要求l所述的方法,其中,所述隊列操作包括寫入所述 隊列項,并且如果所述隊列項具有空值,則執(zhí)行所述隊列操作。
3. 如權(quán)利要求l所述的方法,其中,所述隊列操作包括讀取隊列 項,并且如果所述隊列項具有所述至少一個有效值,則執(zhí)行所述隊列 操作。
4. 如權(quán)利要求1所述的方法,其中,所述存儲器部分在字邊界上 對齊。
5. 如權(quán)利要求1所述的方法,還包括將第二隊列初始化,所述第二隊列具有一組第二隊列項,所述笫 二隊列項具有至少一個有效值和空值,所述第二隊列項的每一個占用
6. 如權(quán)利要求1所述的方法,還包括提供用于所述第一隊列項的 子集的緩沖器。
7. 如權(quán)利要求6所述的方法,其中,所述緩沖器包括寫入緩沖器, 并且所述方法還包括將隊列值寫入到所述寫入緩沖器;以及 將所述寫入緩沖器傳送到所述第 一隊列。
8. 如權(quán)利要求6所述的方法,其中,所述緩沖器包括讀取緩沖器,并且所述方法還包括將所述第一隊列項的子集傳送到所述讀取緩沖器;以及 從所述讀取緩沖器讀取隊列值。
9. 一種系統(tǒng),包括具有多個第 一隊列項的第 一隊列,所述第 一隊列項具有至少一個 有效值和空值,所述第 一隊列項的每一個占用在單個存儲器訪問中以 原子方式可訪問的存儲器部分;用于在所述第一隊列中寫入隊列項的第一線程;以及 用于從所述第 一 隊列讀取所述隊列項的第二線程; 其中如果所述隊列項具有空值,則執(zhí)行所述寫入,并且如果所述 隊列項具有所述至少一個有效值,則執(zhí)行所述讀取。
10. 如權(quán)利要求9所述的系統(tǒng),其中,所述第一隊列還包括用于 標識所述多個隊列項的頭部項的頭部值,并且所述頭部值在高速緩存 行邊界上對齊。
11. 如權(quán)利要求9所述的系統(tǒng),其中,所述第一隊列還包括用于 標識所述多個隊列項的尾部項的尾部值,并且所述尾部值在高速緩存 行邊界上對齊。
12. 如權(quán)利要求9所述的系統(tǒng),其中,所述多個第一隊列項在高 速緩存行邊界上對齊。
13. 如權(quán)利要求9所述的系統(tǒng),還包括 具有多個第二隊列項的第二隊列,所述第二隊列項具有至少 一個 有效值和空值,所述第一隊列項的每一個占用在單個存儲器訪問中以 原子方式可訪問的存儲器部分;以及 用于在第二數(shù)據(jù)結(jié)構(gòu)中寫入隊列項的第三線程,如果所述隊列項 具有空值,則執(zhí)行所述寫入; 其中如果所述隊列項具有所述至少一個有效值,則所述笫二線程 從所述第二數(shù)據(jù)結(jié)構(gòu)讀取所述隊列項。
14. 如權(quán)利要求9所述的系統(tǒng),還包括具有多個第二隊列項的第二隊列,所述第二隊列項具有至少 一個 有效值和空值,所述第二隊列項的每一個占用在單個存儲器訪問中以原子方式可訪問的存儲器部分;以及用于從所述第二數(shù)據(jù)結(jié)構(gòu)讀取隊列項的第三線程,如果所述隊列 項具有所述至少一個有效值,則執(zhí)行所述讀??;其中如果所述隊列項具有空值,則所述笫 一線程在所述第二數(shù)據(jù) 結(jié)構(gòu)中寫入所述隊列項。
15. —種系統(tǒng),包括具有多個第 一隊列項的第 一隊列,所述第 一隊列項的每一個占用 在單個存儲器訪問中以原子方式可訪問的存儲器部分;具有多個笫二隊列項的第二隊列,所述第二隊列項的每一個占用 在單個存儲器訪問中以原子方式可訪問的存儲器部分;具有多個第三隊列項的第三隊列,所述第三隊列項的每一個占用 在單個存儲器訪問中以原子方式可訪問的存儲器部分;具有多個第四隊列項的第四隊列,所述第四隊列項的每一個占用用于對所述第 一隊列寫入的第 一線程; 用于對所述第二隊列寫入的第二線程;復(fù)用器線程,用于讀取所述第一隊列和所述第二隊列以及對所述 第三隊列和所述第四隊列寫入;用于從所述第三隊列讀取的第三線程;以及 用于從所述第四隊列讀取的第四線程。
16. 如權(quán)利要求15所述的系統(tǒng),其中,所述第一隊列、所述第二 隊列、所述第三隊列和所述第四隊列是動態(tài)地創(chuàng)建的。
17. 如權(quán)利要求15所述的系統(tǒng),其中,所述第一隊列、所述第二 隊列、所述第三隊列和所述第四隊列均具有多個隊列項,所述隊列項 具有有效值和空值,在讀取期間,如果所述隊列項具有所述有效值, 則返回所述多個隊列項的隊列項,并且在寫入期間,如果所述隊列項具有空值,則寫入所述隊列項。
18. —種具有用于執(zhí)行方法的機器可執(zhí)行指令的機器可讀媒體, 所述方法包括將第一隊列初始化,所述第一隊列具有一組第一隊列項,所述第 一隊列項具有至少一個有效值和空值,所述第一隊列項的每一個占用 在單個存儲器訪問中以原子方式可訪問的存儲器部分;接收對所述一組第一隊列項的隊列項執(zhí)行隊列操作的請求;以及 基于所述隊列項是否具有空值的確定來確定是否要執(zhí)行所述隊 列操作。
19. 如權(quán)利要求18所述的機器可讀媒體,其中,所述隊列操作包 括寫入所述隊列項,并且如果所述隊列項具有空值,則執(zhí)行所述隊列 操作。
20. 如權(quán)利要求18所述的機器可讀媒體,其中,所述隊列操作包 括讀取隊列項,并且如果所述隊列項具有所述至少一個有效值,則執(zhí) 行所述隊列操作。
21. 如權(quán)利要求18所述的機器可讀媒體,其中,所述存儲器部分 在字邊界上對齊。
22. 如權(quán)利要求18所述的機器可讀媒體,其中,所述方法還包括 如下步驟將第二隊列初始化,所述第二隊列具有一組第二隊列項,所述第 二隊列項具有至少 一個有效值和空值,所述第二隊列項的每一個占用 在單個存儲器訪問中以原子方式可訪問的存儲器部分。
23. 如權(quán)利要求18所述的機器可讀媒體,其中,所述方法還包括 提供用于所述第 一 隊列項的子集的緩沖器。
24. 如權(quán)利要求23所述的機器可讀媒體,其中,所述緩沖器包括 寫入緩沖器,并且所述方法還包括將隊列值寫入到所述寫入緩沖器;以及 將所述寫入緩沖器傳送到所述第一隊列。
25.如權(quán)利要求23所述的機器可讀媒體,其中,所述緩沖器包括 讀取緩沖器,并且所述方法還包括將所述第 一隊列項的子集傳送到所述讀取緩沖器;以及 從所述讀取緩沖器讀取隊列值。
全文摘要
系統(tǒng)和方法提供單個讀取器單個寫入器(SRSW)隊列結(jié)構(gòu),該隊列結(jié)構(gòu)具有能夠利用單個存儲器訪問以原子方式并行訪問的項??梢詫RSW隊列組合以創(chuàng)建較復(fù)雜的隊列,包括多個讀取器單個寫入器(MRSW)、單個讀取器多個寫入器(SRMW)和多個讀取器多個寫入器(MRMW)隊列。
文檔編號G06F9/00GK101346692SQ200580052419
公開日2009年1月14日 申請日期2005年12月29日 優(yōu)先權(quán)日2005年12月29日
發(fā)明者D·R·居, X·李 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1