作者littleshan (我要加入剑道社!)
站内hardware
标题Re: [问题] Intel 3.2g 和 AMD 3500+ 939 到底괠…
时间Wed Jun 8 04:42:32 2005
[deleted]
: --
: 推 shiunlin:请问何谓"不用的指令集模拟成另一个 CPU"? 140.113.196.166 06/08
要讲HT 不得不先说明superscalar
superscalar是在pentium时就有的技术
它的原理很简单:在cpu内塞入更多的运算单元
这麽一来cpu就有能力同时处理多个指令
比如说以下的assembly code
imul esi, edi
add eax, ebx
add ecx, edx
乍看之下,cpu会先做完乘法再继续做下面两个加法
但事实上 只要cpu内有两个加法器和一个乘法器
这三个指令可以「同时」进行
当然乘法比加法慢 所以效能不会变三倍
但理论上仍有很可观的增加
(真实的情况更复杂些...指令会先被拆成更小的指令後才进入pipeline)
(不过就先这麽说明吧)
然而事实并没有这麽单纯
上面的三个指令可以同时执行 是因为这三个指令没有相依关系
如果是这样的程式
add eax, ebx
add eax, ecx
第二个指令就必需等第一个结束後才能继续
所以第二个加法器就英雄无用武之地了
不幸的是 有写过程式的人都知道 这种情况才是常态
也就是说 现在的cpu虽然加入了更多运算单元
可是平均起来 它们的使用率根本还不到一半
所以hyper threading的想法出现了
(学术一点的说法叫SMT)
它的想法是在cpu内塞入另一组暂存器 然後假装自己是两颗cpu
只要作业系统支援多cpu
就可以同时喂两支process给它
由於两支process的指令一定是不相依的
所以可以提高这些运算单元的使用率
连带地整体效能也提高了
SMT本身是很好的想法
而且并不如Dopin大所说 只有一个process时会被限制只有50%的cpu resource
事实上 拥有良好instruction parallelism的程式 在单一process的情况下
还是能发挥cpu接近全部的运算能力
但是intel本身对SMT的实作有一些问题
导致hyper threading没有发挥应有的效能 甚至有时候反而变慢
不过我本身不是学这方面的 所以并不是很清楚是怎样的问题
有兴趣的人可以去看anandtech的一篇文章 讲得很仔细
http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2419&p=4
--
DO NOT disturb my programs!
--
From Archimedes' last word,
and may be my last word.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.244.211
1F:推 Dopin:如果程式本身就支援多绪 就没有几 % 的问题 203.70.65.28 06/08
2F:→ Dopin:我想我原文要改一下 感谢 l 兄提醒 :) 203.70.65.28 06/08
3F:→ Dopin:良好的程式结构 也可以最佳化使用 平均於指令 203.70.65.28 06/08
4F:推 Dopin:看来造成误解 我改成 "最糟的状况下" 比较不会误会 203.70.65.28 06/08
5F:推 singy:你的例子中 add eax,eba 换行 add eax,ecx 61.224.134.53 06/08
6F:→ singy:如果分两组register来计算最後还是要丢回到某个EAX 61.224.134.53 06/08
7F:→ singy:所以这种情况效能就没有增加..... 61.224.134.53 06/08
8F:→ singy:我的第一行eba应该是ebx.... 61.224.134.53 06/08
9F:→ singy:这种情况很常见 所以现在的HT技术因为程式没有针对 61.224.134.53 06/08
10F:→ singy:HT技术作最佳化才会这样 我想应该不会有人这麽无聊 61.224.134.53 06/08
11F:→ singy:为了intel的HT技术做程式最佳化吧...... 61.224.134.53 06/08
12F:推 singy:我在想 是不是在高阶语言转低阶语言的过程中 61.224.134.53 06/08
13F:→ singy:因为编译器帮忙加了很多不必要的处理 造成一只大 61.224.134.53 06/08
14F:→ singy:project在执行上多少降低其效能? 61.224.134.53 06/08
15F:→ singy:单纯的用组语来写应该能达到高度优化程式的效果..? 61.224.134.53 06/08
16F:推 Dopin:组语要写得结构化才会比较 OK 之後还有优化 203.70.65.28 06/08
17F:→ Dopin:有些工具还颇好用的 以前在 TASM/MASM 时代常用的 203.70.65.28 06/08
※ 编辑: littleshan 来自: 140.112.244.211 (06/08 20:17)
18F:推 cooller:比如 icc 一定会对 HT 做最佳化啊 140.112.25.140 06/09
19F:→ cooller:此外,现在人写的组语未必比 compiler 写的快 140.112.25.140 06/09
20F:→ cooller:编译器是为了一般性,一定有一大堆不必要的东西 140.112.25.140 06/09