關於whole core to process,我想知道真正的好處。例如,我有多進程的Qt C++應用程序,比如7個進程,包括大量的科學計算和可視化。該應用程序運行在最新的Ubuntu和8核CPU(4個真實和4個虛擬)上。提示:幾乎所有的進程都是單線程的。 在這種情況下,將單個進程分配給專用內核會帶來任何性能優勢嗎?理想情況下,我會將所有進程分配給專用內核,但我有一個多線程進程並驅動一個設備。將核心分配給進程的好處
回答
調制解調器cpu不能以恆定速度運行。有很多因素,包括調度器的選擇(可能取決於CPU溫度和風扇噪聲),熱升壓/多級步進水平等等。理論上講,讓所有CPU核心「最大輸出」(因此無需升壓)並不意味着您正在完成更多的工作。它可能是,但你需要測量。
現在假設我們想「最大限度地」爲CPU綁定任務的所有CPU核心。現代的ubuntu有正常的調度程序來防止核心之間不必要的線程傳輸,這會導致各種開銷,包括跨CPU同步和TLB擊落。所以只要所有的線程都使用自己的核心,他們通常會堅持下去,除非調度器對CPU頻率進行調整。
TL; DR;系統通常有更好的想法來利用機器,讓調度程序做出決定,並且它通常會將你的cpu綁定線程粘到特定的內核上,除非有時間冷卻它。
要指定要處理的內核的時間是爲系統預留一個內核來執行I/O操作。
有一個好處,是的,但只有當您還將其他進程遠離您的專用內核。問題是你真的需要它,否則,你會覺得你的情況?
內核在爲核心分配進程方面並不錯,但它試圖平衡負載並且沒有意識到你的優先級,所以有時你必須強迫它的手。
好處是您的進程將受到緩存未命中和上下文切換的影響。但是如果你做了很多系統調用,比如說IO,你會有上下文切換,我不確定你會有多大的區別。
專用內核通常用於時間關鍵型線程,您不想被其他任何事情打斷。並且經常只在shm和/或非內核IO上進行通信。
在這種情況下,將單個進程分配給專用內核會帶來任何性能優勢嗎?
它可能會如果你的工作記憶集足夠小。假設每個內核都有專用的L1 32K D-和32K I-cache,然後按每個模塊(雙核)L2 256K D-和256K I-cache進行說明,然後共享6M L3緩存。
從核心轉移到核心意味着拋出緩存並將其重新加載到不同的核心上。如果給定的workind內存足夠小,這可能很重要。如果您在16GB內存集追三分球,很有可能你不會看到任何東西
但是你要衡量真正
- 1. 將線程分配給核心的API
- 2. 將cpu內核分配給進程 - Linux
- 3. 將線程分配給特定的CPU核心
- 4. 將多個核心分配給一個Python程序
- 5. 將1個cpu核心分配給1個線程C++
- 6. 使用Perl將進程分配給內核
- 7. Java多線程 - 分配線程到處理器核心
- 8. 在Windows中顯示處理器或進程核心分配的工具?
- 9. 實體框架核心將空值分配給非空主鍵
- 10. 將ViewController分配給委託,好不好?
- 11. 如何在多核環境中將進程/線程指定給某個核心?
- 12. 將進程分配給字符串?
- 13. IIS將回收asp.net核心進程嗎?
- 14. 如何確保nodejs集羣將進程分配給不同的內核?
- 15. 如何將代碼分散到核心多核處理器
- 16. .net核心 - 後臺進程
- 17. 是否將子進程pid()分配給父進程?
- 18. 將參數分配給其他變量有什麼好處
- 19. 進程從內核分配內存塊
- 20. 將向量的一部分分配給從進程
- 21. 將工作分配給多個核心:Hadoop或Scala的並行集合?
- 22. 我可以將任務分配給iOS中的特定核心嗎?
- 23. EF核心:參數類型不能分配給參數
- 24. 分配給類變量時核心數據崩潰
- 25. openMP:將特定線程分配給特定內核
- 26. 分配給進程的虛擬內存
- 27. Python多處理啓動比核心更多的進程
- 28. 多核心處理器中的線程
- 29. 每個進程可配置的核心轉儲目錄
- 30. Windows核心進程之間的通信
措施,並告訴我們你發現了什麼? –
請注意,您沒有「4個虛擬內核」。所有8個內核都是虛擬的,但每對虛擬內核共享一個物理內核。新的Linux內核知道這種區別,並在將線程分配給內核時考慮到這一點。 – MSalters