hardware 板


LINE

: 但是intel本身对SMT的实作有一些问题 : 导致hyper threading没有发挥应有的效能 甚至有时候反而变慢 : 不过我本身不是学这方面的 所以并不是很清楚是怎样的问题 : 有兴趣的人可以去看anandtech的一篇文章 讲得很仔细 : http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2419&p=4 为了让大家更明白 我稍微念过了这篇文章 以下是我的解释 如果有认何错误请大家不吝指正 先简单讲一下p4内部执行x86指令前的过程 存入 指令拮取 指令解码 trace cache | | | | | | | | L2 Cache --> Decoder --> Queue --> Trace Cache --> μOp Queue | | | | 这张图当然是经过了简化...instruction fetch到decode之间还有一个queue 不过先暂时不提它吧 每个x86指令在执行时都须要像上面那样通过一层一层的关卡 首先是从L2 Cache(假设它已经在L2了)中抓到cpu内 (instruction fetch) 指令解码的动作会把它拆成更小的微指令 (μOp) 然後放到地位类似L1 Cache的trach cache中 再进入μOp Queue 这时候才准备好让对应的运算单元执行 x86指令属於CISC架构 所以在指令解码的地方比较复杂 p4的instruction decoder平均两个cycle可以生出六个μOp 这相当於每个cycle中 约有两个x86指令可以被解码 这样的速度在单一thread的情况下是可以被接受的 因为指令间有相依情况 所以同时间有超过两个指令可被执行的情况不多见 但是在hyper-threading的情况下就不同了 因为同时间有两个thread在执行 每个cycle解码两个指令就太慢了 如果指令解码的速度跟不上後面运算单元的速度 那麽运算单元就必须停摆(stall)等待前面的事情先做好 另一方面 虽然hyper-thread多提供了一颗虚拟的cpu 但μOp Queue并没有跟着变两倍大 也就是说 μOp Queue必须切一半来给这两颗虚拟cpu来使用 而这造成的影响就是out-of-order execution的效果变差 先简单说说什麽是out-of-order execution吧 回头看我po的第一篇文 关於指令间相依造成无法平行运作的例子 add eax, ebx add eax, ecx 这两个指令无法同时运作 因为第二个指令必须先等第一个指令完成 但如果这两个指令的後面还有东西... add eax, ebx add eax, ecx add edx, esi add edx, edi 大家可以发现第一个指令和第三个指令没有相依关系 第二个和第四个也没有 所以只要把第二个指令和第三个指令对调 不但效率提高 结果也是正确的 这就是out-of-order execution的想法 cpu只要去分析一连串的指令 找出它们之间的相依关系 就可以藉由重排指令顺序的方式提升效能 但是在hyper-threading的情况下 因为μOp Queue被切了一半 所以对out-of-order execution来说 可以被分析的指令也少了一半 产生的效果就变差了 最後 hyper-threading中 两颗虚拟cpu的L1 cache是共用的 但两支thread的spatial locality并不高 (很难翻译这个名词^^||) 也就是cache更容易miss 上面提到的三种情况 (decode不够快、out-of-order效果不好、cache容易miss) 都会使得运算单元停下来等待(stall) 然而 prescott为了提升时脉 而有了超深的pipeline (31层pipeline stage) 对此也有一定的影响 这就是hyper-threading在p4上无法有效提升效能 甚至拉低效能的原因 : -- :



※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.244.211 : 推 Dopin:如果程式本身就支援多绪 就没有几 % 的问题 203.70.65.28 06/08 : → Dopin:我想我原文要改一下 感谢 l 兄提醒 :) 203.70.65.28 06/08 : → Dopin:良好的程式结构 也可以最佳化使用 平均於指令 203.70.65.28 06/08 : 推 Dopin:看来造成误解 我改成 "最糟的状况下" 比较不会误会 203.70.65.28 06/08 嗯 我的意思是instruction-level parallelism 也就是降低指令间的相依关系 提升他们被平行处理的可能性 而非多绪 (multi-threading) : 推 singy:你的例子中 add eax,eba 换行 add eax,ecx 61.224.134.53 06/08 : → singy:如果分两组register来计算最後还是要丢回到某个EAX 61.224.134.53 06/08 : → singy:所以这种情况效能就没有增加..... 61.224.134.53 06/08 : → singy:我的第一行eba应该是ebx.... 61.224.134.53 06/08 : → singy:这种情况很常见 所以现在的HT技术因为程式没有针对 61.224.134.53 06/08 : → singy:HT技术作最佳化才会这样 我想应该不会有人这麽无聊 61.224.134.53 06/08 : → singy:为了intel的HT技术做程式最佳化吧...... 61.224.134.53 06/08 不对 add eax, ebx add eax, ecx 这种情况是「没有对superscalar最佳化」 而它很常见的原因并不是因为大家不想做最佳化 而是instruction-level parallelism的最佳化很难做 HT的出现就是为了解决这个问题 只要(理论上)程式可以multi-threading执行 HT就可以让它有效能提升 而把一支程式改成multi-threading 要比instruction-level parallelism要容易许多 另外 只要cpu有提供某些加速的机制 写软体的人就会针对它进行最佳化 这不是什麽无聊不无聊的问题 而是软体卖不卖得出去的问题 :D : 推 singy:我在想 是不是在高阶语言转低阶语言的过程中 61.224.134.53 06/08 : → singy:因为编译器帮忙加了很多不必要的处理 造成一只大 61.224.134.53 06/08 : → singy:project在执行上多少降低其效能? 61.224.134.53 06/08 : → singy:单纯的用组语来写应该能达到高度优化程式的效果..? 61.224.134.53 06/08 对 可是很少人这麽做 因为... 1. 感觉不出差别 像单纯的GUI 0.01秒画出一个按钮 和0.02秒画出一个按钮(多花了100%的时间!) 对使用者是没有差别的 除非他有点100个按钮的需求... 2. 不portable 对cpu A做的最佳化不一定适用於cpu B 尤其硬体改朝换代的情况太常见了 只有少数很偏执的programmer会在新的cpu推出时全部重写他的assembly code (没有批评的意思 我一向很佩服偏执狂) 3. 最重要的问题 程式是写给人看的 现在硬体愈来愈快的结果 使得人们把写程式的重心从效率转移到弹性和维护成本上 当然组合语言不会死 只是全部用组合语言以提升效率的时代已经过了 现在如果要用组合语言提升速度 多半都是先做profiling找出效率的瓶颈 然後再小部分用组合语言加速 (反正把assembly嵌入C之中是很容易的事) : 推 Dopin:组语要写得结构化才会比较 OK 之後还有优化 203.70.65.28 06/08 : → Dopin:有些工具还颇好用的 以前在 TASM/MASM 时代常用的 203.70.65.28 06/08 : ※ 编辑: littleshan 来自: 140.112.244.211 (06/08 20:17) : 推 cooller:比如 icc 一定会对 HT 做最佳化啊 140.112.25.140 06/09 不一定 你的程式必须是multi-thread一起跑 才能得到HT的加速 但并不是所有的程式都可以multi-thread : → cooller:此外,现在人写的组语未必比 compiler 写的快 140.112.25.140 06/09 : → cooller:编译器是为了一般性,一定有一大堆不必要的东西 140.112.25.140 06/09 是的 -- --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.244.211 ※ 编辑: littleshan 来自: 140.112.244.211 (06/10 04:25) ※ 编辑: littleshan 来自: 140.112.244.211 (06/10 04:29)
1F:→ Asprit:高手啊 我完全没有看 太长 XD 220.132.59.3 06/10
2F:推 breadf:推 配合汤姆薯叔对HT技术的解析 就可以一目了然了140.113.126.193 06/10
3F:→ breadf:不过看汤薯叔的评论 把HT移植到双核上反而有困难140.113.126.193 06/10
4F:→ breadf:甚至是效能不增反降?140.113.126.193 06/10
5F:推 Dopin:我太感谢 l 兄了 > < 说到 Code 维护 OO 因而出现 203.73.231.195 06/10
6F:推 newpal:◆ 这一篇文章值 1000 银 XD 163.15.151.150 06/10
7F:推 ithinkurdumb:写的狠详细又容易懂 :D 210.68.184.96 06/10
8F:推 singy:谢谢解惑 61.224.134.53 06/10
※ 编辑: littleshan 来自: 140.112.244.211 (06/11 02:18)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP