作者JohnLinq (林约翰)
看板Programming
标题Re: [问题] 硬体 多核/多执行绪 与 软体运作
时间Wed Nov 12 10:12:23 2008
※ [本文转录自 C_and_CPP 看板]
作者: JohnLinq (林约翰) 看板: C_and_CPP
标题: Re: [问题] 硬体 多核/多执行绪 与 软体运作
时间: Thu Nov 6 10:22:33 2008
※ 引述《JamesWW ( )》之铭言:
: ※ 引述《JohnLinq (林约翰)》之铭言:
: : 目前正在学习函数指标,
似乎偏离了本板主旨.......... Orz
: 就软体角度来探讨 process (heavy weight process)
: 与 thread (light weight process)的使用时机的话,
: 其实并不单纯只是以 "复杂" 程度来判断是否采用 process 或者 thread,
: 以下列举一些他们的使用时机:
: ◎ multi-process 使用时机
: -robustness level
: -security
: -least data exchange
: ◎ multi-thread 使用时机
: -frequently data exchange
: 更细部的相关资料可从 Operating system 的书籍中找到。
以下,恳请指正。
====================>
多核心:拥有多个CPU。[请了多个工人]
(硬体)多执行绪:一颗CPU拥有许多不同的处理单元,
整数运算单元、浮点运算单元、逻辑运算单元,取指令单元等等;
当 执行绪-A 在使用 整数运算单元 的时候,
执行绪-B 可以使用 浮点运算单元。
[一个工人拥有三头六臂]
============================================================
====================>
纯量处理器 scalar processor:一个指令 一次 操作 一两个资料项。
向量处理器 vector processor:一个指令 一次 操作 多 个资料项。
超纯量处理器 superscalar processor 是以上两者的混合:
一个指令 一次 操作 一两个资料项,
但是,处理器内有多个运算单元,可以同时处理多个指令。
以上是 指令级并行。
提昇 指令级并行 效能 的技术:
流水线(管线)、分支预测、非循序(乱序)执行。
============================================================
====================>
在指令级并行之後,为了进一步提昇效能 而提出 执行绪级并行。
粗粒度交替多执行绪 -> 卡住才切换
细粒度交替多执行绪 -> 轮流切换
以上同一时间只有一个执行绪能够被执行。
同步多执行绪 Simultaneous multithreading (SMT):
(
http://en.wikipedia.org/wiki/Simultaneous_multithreading )
In simultaneous multithreading, instructions from more than one thread
can be executing in any given pipeline stage at a time. This is done
without great changes to the basic processor architecture: the main
additions needed are the ability to fetch instructions from multiple
threads in a cycle, and a larger register file to hold data from multiple
threads. The number of concurrent threads can be decided by the chip
designers, but practical restrictions on chip complexity have limited
the number to two for most SMT implementations.
^^^
简言之,将 多个 执行绪级并行,打散为 更多个 指令级并行。
於是,问题又回到了指令级并行,
如何打散指令、如何分派指令、如何管理指令的执行,
如何填满流水线,如何填满各个运算单元。
============================================================
====================>
在多核心的状况下,
核心与核心之间的沟通效能,多个工作的分派与管理,仍然是必须考量的问题。
(软体) Process的分时多工,是较为巨观的,
所考量的,是位於CPU+RAM外部的资源;
(硬体)Multithreading的分时多工,是较为微观的,
所考量的,是位於CPU+RAM内部的资源。
CPU本身的效能持续提昇,
CPU存取RAM(外部记忆体)的效能,却一直停滞不前,
所以,才会有 (硬体)Multithreading 的出现。
CPU内部的执行绪级并行,
最终还是必须考量 如何填满 各个硬体上的运算单元,
也就是说,作业系统与编译器,
必须有能力将程式码分拆,并且重组为合适的 机器指令流。
软体的Thread似乎与硬体的Multithreading无关?
============================================================
====================>
作者:
[email protected]
就软体角度来探讨 process (heavy weight process)
与 thread (light weight process)的使用时机的话,
其实并不单纯只是以 "复杂" 程度来判断是否采用 process 或者 thread,
以下列举一些他们的使用时机:
◎ multi-process 使用时机
-robustness level
-security
-least data exchange
◎ multi-thread 使用时机
-frequently data exchange
更细部的相关资料可从 Operating system 的书籍中找到。
============================================================
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.221.140.178
1F:推 cutecpu:好强唷!推 11/06 10:32
2F:→ MOONRAKER:想太多哪里强了 自己看不懂的东西不要乱推 -_- 11/06 12:12
3F:→ final01:这只是基本概念吧 没提到技术 11/06 13:09
4F:→ kevin190:我觉得原po还是用文章而不是条列式的方式来讲观念比较好 11/06 20:29
5F:→ MOONRAKER:我奇怪的是"使用函数指标会妨碍管线效率"为什麽会扯到 11/06 21:29
6F:→ MOONRAKER:那麽远 明明原因就是函数指标会导致程式branch到不可 11/06 21:30
7F:→ MOONRAKER:预测的地方 妨害branch prediction 就是这样而已 11/06 21:30
8F:→ MOONRAKER:为什麽还要想到multithreading等一大堆 实在是看没有 11/06 21:31
9F:推 JamesWW:原po试图要去了解更详细的东西 :) ? 11/08 01:02
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.221.140.178