在多核處理器中,有多種方法可以告訴特定應用程序在單內核或2內核或3內核中運行。考慮到應用程序(有多個線程)在多個核心上運行的情況,調度程序如何能夠確定多核處理器中特定核心上的負載(線程數量),並相應地分配(平衡)在各種核心上加載(分配線程)?確定多核處理器中特定內核的負載
0
A
回答
1
在大多數調度程序中,每個CPU都是一個獨立的實體,它檢查系統的當前狀態並嘗試找到有用的工具。把CPU想象成一個工作狂 - 它總是會嘗試做任何事情。調度員不是一個告訴CPU接下來要做什麼的「老闆」,要確保每個人都有公平的份額。相反,每個CPU都遵循一個調度算法,在該調度算法中,它將檢查系統的狀態,並嘗試找出如何盡其所能完成的大部分工作。
調度算法可能有一些關於「線程關聯」的規定,這意味着CPU將更喜歡運行先前調度的線程,因爲該線程更可能在緩存中。然而,與網絡負載平衡不同,調度算法通常(但並非總是)儘可能地保持每個CPU的繁忙,即使工作負載最終不公平。
爲什麼?如果工作負載是CPU密集型的,那麼每個CPU將能夠以接近100%的速度運行,並且工作負載將是公平的。如果工作負載是I/O密集型的,並且CPU花費大部分時間等待共享資源變爲可用,這對於真實世界系統是正常情況,但任何負載平衡策略都可能與簡單地將共享資源釋放爲儘可能迅速。
一個簡單的多CPU調度程序將包括一個可運行線程隊列和一個阻塞線程列表 - 該隊列和列表是所有CPU共享的數據結構,訪問通過鎖定保護。當CPU進入調度程序時,它將選擇最高優先級的可運行線程,並運行該線程,直到塊或分配的時間片過期。如果線程阻塞,它將被放置在阻塞的線程列表中,直到它再次變爲可運行爲止。如果時間片過期,則將線程置於可運行線程隊列中的延遲位置,並選擇另一個線程。
0
在Linux中,你可以使用taskset -C### ./executable
其中####是CPU列表
相關問題
- 1. 在多核多處理器CPU的負載
- 2. 確定處理器和內核的數量
- 3. 有關多核處理器與單核多處理器的說明
- 4. 確定最註冊內核
- 5. 多核心處理器中的線程
- 6. 如何確定是否在Linux內核中加載了特定的模塊
- 7. Python:多核處理?
- 8. 多核處理器上的多線程
- 9. 多核處理器的多線程
- 10. 在一定數量的內核上進行多處理
- 11. 索引到Solr中的特定內核
- 12. 如何處理核矩陣中的負特徵值?
- 13. 如何使用PowerShell腳本獲取每個內核或處理器的負載?
- 14. GPU中的內存綁定內核和計算綁定內核
- 15. 識別處理器(核心)被特定線程使用
- 16. 多核處理器上的Android錯誤
- 17. 多核處理器之間的區別
- 18. 定製內核控制器
- 19. disable_local_irq和內核定時器
- 20. 爲我的路由器的內核版本編譯特定內核模塊
- 21. 多核心的Linux負載均衡
- 22. 產生在四核處理器上構建內核的多個作業?
- 23. Illumos內核預處理器宏
- 24. Linux內核3.9 KVM for ARM處理器
- 25. MPI:內核還是處理器?
- 26. 對Atom cloverview處理器的英特爾內核支持
- 27. 自定義Android內核 - 無法加載內核模塊
- 28. 流多處理器,每個流處理器的核心cuda
- 29. 多核處理器如何啓動?
- 30. 玩!框架,多個處理器和多個內核
調度程序是多核知道是itself.You可能想看看這個單獨的話題:HTTP://software.intel。 com/sites/oss/pdfs/mclinux.pdf 在編程人員的層面上,您必須開發算法,使得不相互依賴的部分可以並行運行(線程)。快速傅立葉變換是並行計算的完美示例。有多個並行庫可用於多核編程。 – itisravi 2010-06-18 06:48:54
雖然我沒有得到確切的答案,但它是一個非常好的鏈接。 – 2010-06-22 20:08:18