作者ggg12345 (ggg)
看板Programming
标题Re: [问题] 程式在多核心架构下执行
时间Fri Sep 7 16:19:21 2007
※ 引述《freesamael (烧卖)》之铭言:
: ※ 引述《bookmarket (bookmarket)》之铭言:
: : 请问一下,现在应用程式或者系统程式怎麽跑在多核心架构下呢
: : 譬如说,现在有A、B两个cpu,
: : 现在有两个程式要执行分别是game和一个应用程式如word
: : 那麽这两个程式是怎麽执行呢
...
: 这是由作业系统的排程器决定的。
: 我手边这本作业系统的书上说 Windows 2000 的多处理器排程方式是有 N 个处理器
: 的时候,拥有最高等级优先权的 N-1 个执行绪会使用 N-1 个处理器,剩下那些相对
: 低优先权的执行绪共享 1 个处理器。
: 对程式设计师而言,要有效利用多处理器/多核心处理器的方式就是将程式写成 Multi-
: threading/Multiprocessing。在 Unix/Linux 上标准的作法就是透过 pthread(Multi-
: threading) 或是 fork(multiprocessing)。不过 fork 比较消耗资源,因为它会复制
: 整只程式,相对於 pthread 付出代价大很多。
======
以前只有 MP 还没 Multi-Core , 现在是用多个 Multi-Core Chip 组成 MP.
对作业系统言, 都是把每个 core 当成 real processor 看待, 假设 CPU1
有 core1, core2 , CPU2 有 core3 , core4 , OS 会看待他们相当於有 4
个 Real CPU . 但一个 job 可能写成多个 process (使用 Fork) , 每个
process 可能只有一个或一个以上(例如使用 pthread)的 thread.
通常 multi-core 是各有一套 instruction pointer, instruction prefetch
queue 及 register set 但共用 processor 内部的同一组多功能的 function
unit 及 cache , 所以同一个 CPU 的两个 core 最好是做不同的指令, 但如
果有共用资料, 透过共用的 cache 会较快. CPU1 , CPU2 是共用 system bus
及 Main memory , 但各自有 Chip 上全套的 function unit 及 cache.
INTEL 的 multi-core 可以让外部 interrupt 指明对应的那个 cpu 内的那个
core 来处理, 这可以加快反应的速度.
只有 kernel thread 会被 OS 分派一个 real cpu/core 去执行, 如果是 many
to one 的 multiple user threads in one process 只会随 process 对应一
个 kernel thread , 所以只会让一个 real cpu/core 去执行. 但如果是 one
to one 或是 Two Level Many to many mode 则可以让一个 user thread 绑住
一个 kernel thread 去执行. pthread 让 OS 如何分派 kernel thread 的适
用范围称为 scope , 可用参数查问与设定.
两个工作要派 core1 , core3 跑, 还是 core1 , core2 跟两件事在何处的相
关度有关.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.1.146