是否有函数或任何其他方式来以编程方式知道我的程序(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