多線程
編輯(了解如何以及何時刪除此模板消息)
在計算機體系結構中,多線程是中央處理器 (CPU)(或多核處理器中的單核)在操作系統支持下并發提供多個執行線程的能力。 這種方法不同于多處理。 在多線程應用程序中,線程共享單個或多個內核的資源,包括計算單元、CPU 緩存和轉換后備緩沖區 (TLB)。
在多處理系統包括一個或多個內核中的多個完整處理單元的情況下,多線程旨在通過使用線程級并行性和指令級并行性來提高單個內核的利用率。 由于這兩種技術是互補的,因此它們在幾乎所有具有多個多線程 CPU 和具有多個多線程內核的 CPU 的現代系統架構中結合使用。
概覽
編輯自 1990 年代后期以來,隨著進一步利用指令級并行性的努力停滯不前,多線程范式變得越來越流行。 這使得吞吐量計算的概念從更專業的事務處理領域重新出現。 盡管進一步加速單個線程或單個程序非常困難,但大多數計算機系統實際上是在多個線程或程序之間進行多任務處理。 因此,提高所有任務吞吐量的技術會帶來整體性能提升。
吞吐量計算的兩種主要技術是多線程和多處理。
優勢
如果一個線程有很多緩存未命中,其他線程可以繼續利用未使用的計算資源,這可能會導致整體執行速度更快,因為如果只執行一個線程,這些資源就會閑置。 此外,如果一個線程不能使用 CPU 的所有計算資源(因為指令依賴于彼此的結果),運行另一個線程可能會阻止這些資源變為空閑狀態。
缺點
多個線程在共享緩存或轉換后備緩沖區 (TLB) 等硬件資源時可能會相互干擾。 因此,即使只有一個線程在執行,單個線程的執行時間也不會得到改善,甚至可能會降低,這是由于較低的頻率或額外的流水線級是適應線程切換硬件所必需的。
整體效率各不相同; 英特爾聲稱其超線程技術可將速度提高 30%,而僅執行非優化相關浮點運算循環的合成程序在并行運行時實際上可提高 100% 的速度。 另一方面,使用 MMX 或 AltiVec 擴展并執行數據預取(作為一個好的視頻編碼器可能)的手動調整的匯編語言程序不會遭受緩存未命中或空閑計算資源的困擾。 因此,此類程序無法從硬件多線程中獲益,而且確實會因為共享資源爭用而導致性能下降。
從軟件的角度來看,硬件對多線程的支持對軟件來說更為明顯,與多處理相比,需要對應用程序和操作系統進行更多更改。 用于支持多線程的硬件技術通常與用于計算機多任務處理的軟件技術并行。 線程調度也是多線程中的一大難題。
多線程的類型
編輯交錯/時間多線程
粗粒度多線程
最簡單的多線程類型發生在一個線程運行直到它被通常會造成長時間延遲的事件阻塞為止。 這樣的停頓可能是必須訪問片外內存的高速緩存未命中,這可能需要數百個 CPU 周期才能返回數據。 線程處理器不會等待停頓解決,而是將執行切換到另一個準備好運行的線程。 只有當前一個線程的數據到達時,前一個線程才會被放回到就緒線程列表中。
例如:
- 周期 i:線程 A 發出指令 j。
- 周期 i + 1:線程 A 發出指令 j + 1。
- 第i + 2周期:線程A發出指令j + 2,這是一條在所有緩存中都未命中的加載指令。
- 周期 i + 3:調用線程調度程序,切換到線程 B。
- 周期 i + 4:線程 B 發出指令 k。
- 周期 i + 5:線程 B 發出指令 k + 1。
從概念上講,它類似于實時操作系統中使用的協作式多任務處理,其中任務在需要等待某種類型的事件時自愿放棄執行時間。 這種類型的多線程稱為塊、協作或粗粒度多線程。
多線程硬件支持的目標是允許在阻塞線程和另一個線程之間快速切換。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195844/