作者freesamael (烧卖)
站内Programming
标题Re: [问题] 程式在多核心架构下执行
时间Fri Sep 7 01:48:26 2007
※ 引述《bookmarket (bookmarket)》之铭言:
: 请问一下,现在应用程式或者系统程式怎麽跑在多核心架构下呢
: 譬如说,现在有A、B两个cpu,
: 现在有两个程式要执行分别是game和一个应用程式如word
: 那麽这两个程式是怎麽执行呢
: 是由A cpu执行game,b cpu跑word吗
: 还是说另一种情况
: game的程式中,有某一段程式码(code area S)可以独立出来执行
: 那这样game就分成两边跑
: A cpu跑word,而B cpu跑 code area S吗
: 还是说上述说的情况都不是呢?
: 麻烦各位指点一下
: 谢谢
这是由作业系统的排程器决定的。不同作业系统的设计目标不同,所以排程器的设计
也会有差别,可能是以公平性为优先,也可能以回应时间为优先做设计。实际执行的
情况和当时的执行绪数量、执行绪优先权都有关系。
我手边这本作业系统的书上说 Windows 2000 的多处理器排程方式是有 N 个处理器
的时候,拥有最高等级优先权的 N-1 个执行绪会使用 N-1 个处理器,剩下那些相对
低优先权的执行绪共享 1 个处理器。
对程式设计师而言,要有效利用多处理器/多核心处理器的方式就是将程式写成 Multi-
threading/Multiprocessing。在 Unix/Linux 上标准的作法就是透过 pthread(Multi-
threading) 或是 fork(multiprocessing)。不过 fork 比较消耗资源,因为它会复制
整只程式,相对於 pthread 付出代价大很多。
最近这几年还有一个看起来满有前景的 OpenMP API 可以用来做 parallel programming。
OpenMP 因为能使用在 Unix/Linux 也能用在 WindowsNT,而且使用上比较简单,因此
渐渐受到欢迎。Intel C/C++ Compiler 已经支援 OpenMP 很长一段时间,VC++ 2005
也支援 OpenMP 2.0,GCC 则是从 4.2.1 开始支援 OpenMP 2.5。
--
Licensed under CC2.5(TW) by-sa, Samael Wang.
http://creativecommons.org/licenses/by-sa/2.5/tw/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.82.153
1F:推 adms:多绪效能主要还是卡在资源抢占的问题上 140.116.39.108 09/07 02:02
2F:推 adms:倒是很好奇MP API提供了哪些平行运算功能 140.116.39.108 09/07 02:05
基本功能是可以指定 Max threads number,然後指定特定的 section 要以 parallel
的方式执行,由 OpenMP 决定执行数量,比如说:
omp_set_num_threads(10);
#progma omp parallel for
for (int i = 0; i < N; i++) {
....
}
这样这个 for 会被拆成最多 10 个 threads 平行执行。
至於比较进阶的方法...歹识我没有深入研究( ̄ー ̄;)
※ 编辑: freesamael 来自: 220.135.82.153 (09/07 02:23)
※ 编辑: freesamael 来自: 220.135.82.153 (09/07 02:23)