在多核处理器中,有多种方法可以告诉特定应用程序在单内核或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