是否有函數或任何其他方式來以編程方式知道我的程序(pid)的給定線程在哪個處理器上運行的核心?如果可能,OpenMP或Pthreads解決方案都可以幫助我。謝謝。運行給定線程的核心是什麼?
回答
對於pthreads,我認爲sched_getaffinity()
至少是解決方案的一部分。但是,不確定pthread是如何命名CPU:s和核心的。
謝謝。親和力可能會改變,對吧?或者一旦具有給定PID的線程被創建並且正在運行將不會改變親和力? – 2011-04-28 13:54:20
@Dervin在Linux上的AFAIK如果你將你的線程綁定到一個核心上,它不會改變。在windows上,沒有像綁定到核心那樣的東西。您可以向調度程序指出您要使用哪個核心,但不能保證調度程序將始終使用該核心。 – RedX 2011-04-28 14:09:02
默認情況下沒有親和力,這不會告訴你任何東西。只有當你已經設置了親和力,它纔會給你任何信息。 – 2011-04-28 15:01:48
這將是平臺特定的,我會想。在Windows上,您可以使用NtGetCurrentProcessorNumber,但這可能會消失。
我認爲這很難做到,因爲沒有什麼可以阻止線程在任何時候移動到新的核心(無論如何,在大多數應用程序中)。只要你得到結果,它可能會過時。
這很難做到,因爲答案取決於硬件和操作系統。
hardware locality庫是一種新工具,它允許您以OS /硬件不可知的方式查詢CPU /內核/線程等信息(並設置關聯綁定)。它支持大量的硬件和操作系統,因此應該爲這些查詢增加許多可移植性。一旦映射出系統的拓撲結構,hwloc_get_last_cpu_location
將返回線程最後一次運行的CPU,其中CPU可以表示核心或硬件線程。
我想在Linux上可以試試sched_getcpu()。
- 1. 什麼是ThreadPoolExecutor的核心線程?
- 2. 運行我的流程的核心是什麼?
- 3. 什麼是核心?
- 4. 分配線程以在Unix上的定製核心上運行
- 5. symfony2的「核心」是什麼?
- 6. 將線程分配給核心的API
- 7. Windows IoT核心是否運行.NET核心應用程序?
- 8. 什麼是在多個核心運行進程的命令行參數(linux)
- 9. 核心圖給SIGABRT並且不運行線圖
- 10. 將線程分配給特定的CPU核心
- 11. 已執行線程的核心編號
- 12. 什麼是內核線程調度?
- 13. 運行.NET核心
- 14. 是什麼創建項目ASP.NET核心(核心.NET)和ASP.NET核心(.NET Framework)的
- 15. .NET核心CLI運行非核心應用程序,它是如何工作的?
- 16. 如何在多核環境中將進程/線程指定給某個核心?
- 17. Openmp。如何檢索線程正在運行的核心ID
- 18. iphone委託方法運行的webview和核心位置回調是什麼線程?
- 19. 多核處理器上當前正在運行的線程是什麼?
- 20. 什麼是「內核(唯一)線程」而不是「內核級線程」?
- 21. 爲什麼有更多的線程比核心更快?
- 22. ejb的核心技術是什麼?
- 23. 什麼是截斷的核心堆?
- 24. 什麼是C#中的核心類?
- 25. .Net核心中的.AspNetCore.Antiforgery.xxxxxxx cookie是什麼?
- 26. 什麼是核心文件由node.js的
- 27. 函數運行的核心
- 28. 在多個核心上運行python線程
- 29. 如果我只有一個線程運行在多核心上,爲什麼它會從一個核心轉移到另一個核心
- 30. 多線程 - 線程每個核心
可能的重複[如何從用戶空間應用程序(Linux,C)中獲取CPU核心號?](http://stackoverflow.com/questions/491520/how-can-i-get- -pu-core-number-from-within-a-user-space-app-linux-c) – 2011-04-28 13:52:55
OpenMP API不會爲用戶提供查找此信息的方法。您可以通過調用任何基於OpenMP的實現來獲得它。但是,如前所述,除非OpenMP線程綁定到特定的處理器(在這種情況下,您不需要問),這確實沒什麼幫助。否則,操作系統可以隨時更改OpenMP線程正在使用的處理器。你爲什麼想要這些信息? – ejd 2011-04-28 14:07:02
爲什麼?這通常意味着你看錯了線路...... – 2011-04-28 15:02:31