- 主题:CPU能否为操作系统优化呢?
你把操作系统调度那么复杂的逻辑放在芯片里面,你觉得你能把芯片做多大(小),能跑多高频率?当年可是指令集都要用risc,x86内部仅仅把指令集翻译成类risc就费多大力了。。
【 在 hgoldfish 的大作中提到: 】
: 没错啊。CPU 直接模拟成无限核心。操作系统只管往 CPU 里面调度线程。
:
: 但是线程碰到文件 IO,或者两个线程进入临界区,它得暂停线程的执行,这也没错。这时候操作系统给 CPU 一个特别的指令什么的暂停执行,检测某个寄存器位才继续。
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
每个thread有自己的context
有fork/yield指令
可以wait到I/O semaphore,让出pipeline
有scheduling policy (RR/weighted RR and etc.)
【 在 yangtou 的大作中提到: 】
: 有什么特别之处吗,这不就是现在普遍的多线程吗?
: --来自微微水木3.5.12
--
FROM 218.79.233.*
每个thread当然要有自己的context,但是这些只是cpu的或者hardware context,而不是操作系统的context。至于那些指令,估计只是名字吓人,并不是和os的那些功能对应的替代。我猜测就是一些对粗粒度多线程的优化而已,仍然没有超出现在普通cpu的多线程概念。我对此了解不多,猜测大胆了一点。
【 在 rockyzhang 的大作中提到: 】
: 每个thread有自己的context
: 有fork/yield指令
: 可以wait到I/O semaphore,让出pipeline
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
context是在CPU一组硬件的GPR,这样可以进行硬件的调度,MIPS之前可以支持9组
这个名字就叫Fine-Grianed HW Multi-thrading
【 在 yangtou 的大作中提到: 】
: 每个thread当然要有自己的context,但是这些只是cpu的或者hardware context,而不是操作系统的context。至于那些指令,估计只是名字吓人,并不是和os的那些功能对应的替代。我猜测就是一些对粗粒度多线程的优化而已,仍然没有超出现在普通cpu的多线程概念。我对此了解不多,
: 虏獯蟮艘坏恪
: --来自微微水木3.5.12
: ...................
--
FROM 218.79.233.*
这种类型的指令不过是让 CPU 处理器换个寄存器组而已。不用多少晶体管。
我猜没什么人做的原因是因为需要操作系统支持。和现有的操作系统不搭,没什么人用。
【 在 yangtou 的大作中提到: 】
: 你把操作系统调度那么复杂的逻辑放在芯片里面,你觉得你能把芯片做多大(小),能跑多高频率?当年可是指令集都要用risc,x86内部仅仅把指令集翻译成类risc就费多大力了。。
: --来自微微水木3.5.12
--
修改:hgoldfish FROM 47.243.39.*
FROM 47.243.39.*
不管粗粒度/细粒度/同时多线程,都是普通的多线程cpu,数量是有限的只有几个。可不是楼上那个把os线程放硬件里面。
【 在 rockyzhang 的大作中提到: 】
: context是在CPU一组硬件的GPR,这样可以进行硬件的调度,MIPS之前可以支持9组
: 这个名字就叫Fine-Grianed HW Multi-thrading
:
--
FROM 116.224.249.*
我不是做硬件的,我理解寄存器组是应该是非常昂贵东西,要做的快又做的大又那么多是很难的。再比如对于超标量+OOO乱序处理的cpu,加上CMT/HT是件非常“自然“”简单“的事情,因为功能单元/寄存器窗口/OOO算法已经在那儿了,CAAQA好像把SMT成为利用多线程发掘IPC。如你所说的加上大量context应该不会是很简单事情了。
现在有细粒度/粗粒度线程,有SMT,但是线程数量都是很有限的,里面的context也都只是一些GPR而已。intel的HT每个核心就俩线程,power6的SMT也是。细粒度/粗粒度线程每个核心更多一些,以前了解的sun T1 T2有4线程。T1这种是没有OOO的,单线程性能都非常悲剧。
再者,没听说哪些操作系统会利用处理器的线程context来实现操作系统的线程调度,只是把他们作为普通的cpu核/线程来处理。
【 在 hgoldfish 的大作中提到: 】
: 这种类型的指令不过是让 CPU 处理器换个寄存器组而已。不用多少晶体管。
: 我猜没什么人做的原因是因为需要操作系统支持。和现有的操作系统不搭,没什么人用。
:
--
FROM 116.224.249.*
那东东不值钱。现在的 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.*
既然你提到了寄存器重命名,我就不强调超标量乱序处理器了,但是我仍然不同意你说它不昂贵。
简单点说,你的想法类似可参考粗粒度多线程的sun t1/ 2,看看这些处理器的性能多么惨,这还是只有4个线程,更多的线程可能意味着更惨的单线程性能。
【 在 hgoldfish @ [CSArch] 的大作中提到: 】
:
: 那东东不值钱。现在的 CPU 本来就搞寄存器重命名。又不是让这些寄存器同时参与运算。运算单元和调度单元仍然只有一套。
:
: 【 在 yangtou 的大作中提到: 】
: : 我不是做硬件的,我理解寄存器组是应该是非常昂贵东西,要做的快又做的大又那么多是很难的。再比如对于超标量+OOO乱序处理的cpu,加上CMT/HT是件非常“自然“”简单“的事情,因为功能单元/寄存器窗口/OOO算法已经在那儿了,CAAQA好像把SMT成为利用多线程发掘IPC。如你所说的
#发自zSMTH@NOP-AN00
--
FROM 117.143.125.*
你的认识有盲区。。我说的这种多线程,他们并不同时执行,每个 CPU 核心只全力执行一个线程。和超线程那种操作系统无感知的技术不一样的。
【 在 yangtou 的大作中提到: 】
: 既然你提到了寄存器重命名,我就不强调超标量乱序处理器了,但是我仍然不同意你说它不昂贵。
: 简单点说,你的想法类似可参考粗粒度多线程的sun t1/ 2,看看这些处理器的性能多么惨,这还是只有4个线程,更多的线程可能意味着更惨的单线程性能。
: 说的
: ...................
--
FROM 140.224.35.*