- 主题:CPU能否为操作系统优化呢?
CPU 内部的超线程就是 context switch,内部有多套寄存器相互切换。如果 CPU 能够把这个功能暴露出来给操作系统,而不是由 CPU 自动切换,那么你说的加速就有了。
【 在 bihai 的大作中提到: 】
: 我现在的理解是context switch很慢。比如一个进程调用一个功能,如果是宏内核,就是一个调用,几个时钟。如果是进程,据说是50-80个时钟。
: 可不可以多个CPU核心,有一个专门负责这个功能的。但是如果有多个客户来调用,那还是得等,比同一个CPU核心进行context switch还慢。
: context switch到底什么原因慢呢?是需要存储的东西太多了吗?
: ...................
--
FROM 47.243.39.*
如果暴露出来当然得改 CPU 设计了。
按我说的设计的话,CPU 在操作系统看来会有无限多个核心。所谓调度线程,在操作系统看来,不过是把一个 CPU 核心标志为运行和暂停,不用保存寄存器,每次切换都可以省下大量的 CPU 时钟周期。
【 在 yangtou 的大作中提到: 】
: 操作系统的context和cpu线程没啥关系吧,又不是只关联几个通用寄存器和PC。再说了,一个核一个线程还不跑了?
: --来自微微水木3.5.12
--
FROM 140.224.34.*
没错啊。CPU 直接模拟成无限核心。操作系统只管往 CPU 里面调度线程。
但是线程碰到文件 IO,或者两个线程进入临界区,它得暂停线程的执行,这也没错。这时候操作系统给 CPU 一个特别的指令什么的暂停执行,检测某个寄存器位才继续。
【 在 yangtou 的大作中提到: 】
: wild的想法,你看来要把线程context保存在芯片里面了,那还要不要超标量乱序执行了,流水线状态也一起保存吗?那你准备支持几个线程呢,准备为此还有调度逻辑等花费多少面积,这cpu能跑到多高频率?如果保存到ram里面?那好了,我们就差不多回到了软件context switch了。
: 再者,为了context信息已经花费这么多了,干嘛还要运行和暂停,一直并行运行不好吗,那这不就是现在cpu的多线程嘛。
: --来自微微水木3.5.12
: ...................
--
FROM 47.243.39.*
这种类型的指令不过是让 CPU 处理器换个寄存器组而已。不用多少晶体管。
我猜没什么人做的原因是因为需要操作系统支持。和现有的操作系统不搭,没什么人用。
【 在 yangtou 的大作中提到: 】
: 你把操作系统调度那么复杂的逻辑放在芯片里面,你觉得你能把芯片做多大(小),能跑多高频率?当年可是指令集都要用risc,x86内部仅仅把指令集翻译成类risc就费多大力了。。
: --来自微微水木3.5.12
--
修改:hgoldfish FROM 47.243.39.*
FROM 47.243.39.*
那东东不值钱。现在的 CPU 本来就搞寄存器重命名。又不是让这些寄存器同时参与运算。运算单元和调度单元仍然只有一套。
【 在 yangtou 的大作中提到: 】
: 我不是做硬件的,我理解寄存器组是应该是非常昂贵东西,要做的快又做的大又那么多是很难的。再比如对于超标量+OOO乱序处理的cpu,加上CMT/HT是件非常“自然“”简单“的事情,因为功能单元/寄存器窗口/OOO算法已经在那儿了,CAAQA好像把SMT成为利用多线程发掘IPC。如你所说的
: 加上大量context应该不会是很简单事情了。
: 现在有细粒度/粗粒度线程,有SMT,但是线程数量都是很有限的,里面的context也都只是一些GPR而已。intel的HT每个核心就俩线程,power6的SMT也是。细粒度/粗粒度线程每个核心更多一些,以前了解的sun T1 T2有4线程。T1这种是没有OOO的,单线程性能都非常悲剧。
: ...................
--
FROM 47.243.39.*
你的认识有盲区。。我说的这种多线程,他们并不同时执行,每个 CPU 核心只全力执行一个线程。和超线程那种操作系统无感知的技术不一样的。
【 在 yangtou 的大作中提到: 】
: 既然你提到了寄存器重命名,我就不强调超标量乱序处理器了,但是我仍然不同意你说它不昂贵。
: 简单点说,你的想法类似可参考粗粒度多线程的sun t1/ 2,看看这些处理器的性能多么惨,这还是只有4个线程,更多的线程可能意味着更惨的单线程性能。
: 说的
: ...................
--
FROM 140.224.35.*