精華區beta hardware 關於我們 聯絡資訊
※ 引述《NECROMANCER3 (^.^)》之銘言: : 雖然INTEL的時脈高 但是溫度也高 : AMD3500 好像只有2.4G吧 那麼到底這兩個 : 感覺差很多 可是價錢好像差不多 為什麼阿 : 插在哪呢? 你沒學過計算機組織 所以不可能用標準的說法告訴你 要告訴你 ALU 或是 hit rate 之類 你要是懂 我看你自己就知道原因了 既然如此 那麼 我來設法比方一下好了 : Pentium 4 的設計 就像是 F1 方程式賽車 可以跑的很快 但是上面就只能載一個人 Athlon64 的設計 就像是貨車 跑不快 但可以載比較多的東西 那個好 要看你的需求是什麼 ... X X X 兩者價錢差不多 ? 不不 Intel "一定" 比較貴 ... 一般我們作為比較的東西 Pentium 4 630 (3.0 Ghz) 7,XXX Athlon 64 3000+ (1.8 Ghz) 5,XXX 660 (3.6 Ghz) 20,XXX 3800+ (2.4 Ghz) 14,XXX EE (3.73 Ghz) 34,XXX FX-55 (2.6 Ghz) 32,XXX 至於效能就見仁見智了 ... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.65.28
sway0000:解釋的真是棒.... 220.135.66.101 06/07
sway0000:不過我還是有另一種說法就是... 220.135.66.101 06/07
sway0000:P4是一名算數很快的學生,但是他只會乘除加減 220.135.66.101 06/07
sway0000:AMD雖然算術較慢但是他會用微積分這些方法 220.135.66.101 06/07
pointa:微積分本來也是一種連加法呀~而且算答案比較快。 61.57.103.90 06/07
pointa:一樓的因該有學過微積分吧。 61.57.103.90 06/07
mercedeces:兩個比喻都不是很恰當耶..220.143.220.200 06/07
mercedeces:p4 pipleline stage多 容易衝時脈..220.143.220.200 06/07
mercedeces:但pipleline harzard也會增多..220.143.220.200 06/07
mercedeces:像是一顆轉速可以衝很高的引擎..卻沒扭力..220.143.220.200 06/07
mercedeces:所以速度衝不上去..220.143.220.200 06/07
mercedeces:其實很難比喻的..orz220.143.220.200 06/07
Dopin:因為速度 ... 是那個速度 真是頭大 Q_Q;;; 203.70.65.28 06/07
Dopin:我個人是傾向於用搬移資料的速度來解釋電腦的效能 203.70.65.28 06/07
Dopin:不過 m 兄的扭力 我覺得是很讚的比喻 203.70.65.28 06/07
Dopin:只是速度的話 人家又會以為是時脈 而不是效能 203.70.65.28 06/07
Dopin:還挺複雜的 (爆) 203.70.65.28 06/07
new9999:高扭力且要高轉速的cpu... 挺屌的 140.135.13.70 06/07
fttf:比喻真是生動有趣 140.112.66.66 06/07
eric1002:越解釋 越複雜 就是AMD最好是嗎140.127.179.155 06/07
Dopin:當然不是 QQ;;; A 牌 I 牌無所謂絕對誰好誰壞 203.70.65.28 06/07
singy:看用途..... 61.224.134.221 06/07
fttf:看用途吧 Orz 210.85.201.21 06/07
Joxz:推用途..... 163.29.79.251 06/07
ActionKamen:http://0rz.net/960qH 僅供參考 140.115.115.78 06/09
> -------------------------------------------------------------------------- < 作者: ULTIMA1002 (my story) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Tue Jun 7 22:31:20 2005 ※ 引述《Dopin (大鵰傳說)》之銘言: : ※ 引述《NECROMANCER3 (^.^)》之銘言: : : 雖然INTEL的時脈高 但是溫度也高 : : AMD3500 好像只有2.4G吧 那麼到底這兩個 : : 感覺差很多 可是價錢好像差不多 為什麼阿 : : 其實扣除掉溫度的因素(其實P4有些已經不那麼熱了) 我會選P4,因為K8最大的優勢是玩遊戲吧... 但其實玩遊戲最重要的是顯示卡,沒有人會因為用K8就敢用張低階卡玩遊戲吧~.~ 就像你拿K8+6200跟P4+6600gt哪一個玩遊戲強? 所以我覺得K8的優勢被現在快速發展的顯示卡市場給蓋過了 而P4不管是轉檔剪接的優勢還是HT的多工都不能被其他硬體所取代... 總覺得在遊戲之外P4好用很多 這是我個人的觀點啦...有錯請指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.42
cutemaumau:你對於amd的觀念太偏頗了 再說我如果買了p4 59.115.0.209 06/07
cutemaumau:會更沒有錢買6600GT 以同樣金額來說 何不以 59.115.0.209 06/07
cutemaumau:k8+6600GT 與p4+6200相比? 另外除轉檔以外 59.115.0.209 06/07
cutemaumau:我想amd與p4只能說各有所長 你說amd只贏game 59.115.0.209 06/07
cutemaumau:述難認同 :) 59.115.0.209 06/07
ULTIMA1002:基本上P4 3.0 與K8 3000+都配6600GT 163.25.118.42 06/07
ULTIMA1002:你玩遊戲有感覺得出來差異嗎 163.25.118.42 06/07
ULTIMA1002:我的意思是只要有好顯示卡... 163.25.118.42 06/07
ULTIMA1002:cpu的影響根本感覺太不出來 ~.~ 163.25.118.42 06/07
cutemaumau:的確 除了荷包多少兩張小朋友以外 其他感覺ꐠ 59.115.0.209 06/07
ULTIMA1002:但是P4的HT卻是無法用其他硬體來取代的 163.25.118.42 06/07
cutemaumau:並不是很明顯 (笑) 我只是針對你的AMD優勢在 59.115.0.209 06/07
cutemaumau:game那句有意見而已 希望能多參考綜合測試 59.115.0.209 06/07
ULTIMA1002:有少兩張小朋友=.="" 163.25.118.42 06/07
cutemaumau:HT並不是不好 只是會每件事都會變慢 到頭來是 59.115.0.209 06/07
cutemaumau:一樣的 端看個人的接受度如何 不是嗎 59.115.0.209 06/07
cutemaumau:我只是希望大家把HT原理搞懂 而不是把他當成 59.115.0.209 06/07
cutemaumau:東森笑話台講的 p42.4G ht變成4.8G一樣的神化 59.115.0.209 06/07
ULTIMA1002:恩...我是以我個人的感覺而言啦 163.25.118.42 06/07
ULTIMA1002:覺得HT真的很實用...至於效能會慢多少沒特別 163.25.118.42 06/07
ULTIMA1002:注意 163.25.118.42 06/07
ULTIMA1002:而就ㄧ般使用者而言... 163.25.118.42 06/07
ULTIMA1002:不外乎遊戲 文書 多媒體,其實對於cpu來講 163.25.118.42 06/07
ULTIMA1002:都很足夠升任 163.25.118.42 06/07
> -------------------------------------------------------------------------- < 作者: Dopin (大鵰傳說) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 00:16:53 2005 ※ 引述《ULTIMA1002 (my story)》之銘言: : 所以我覺得K8的優勢被現在快速發展的顯示卡市場給蓋過了 如果你是玩 天堂 II 或是 FF XI 你就會發現 CPU 還是有差 P4 永遠有 跟不上的先天缺憾 反之 DOOM 或是 Far Cry 就差不多 真正的狀況 : 遊戲影響大小 和程式的寫法也很有關係 不會只差在顯示卡 => 不然大家都用賽揚和散步龍 配高階顯卡就好 不是嗎 ? (當然不可能) : 而P4不管是轉檔剪接的優勢還是HT的多工都不能被其他硬體所取代... 轉檔也要看寫法 現在優勢就是軟體廠商優化多 所以差異很大 真的在跑新版的軟體時 兩者的差異只會變小 不會變大 其來有自 : 總覺得在遊戲之外P4好用很多 : 這是我個人的觀點啦...有錯請指教 HT 的多工是把不用的指令集模擬成另一個 CPU 不代表你真的有兩倍的效 能可以用 也許我們今天所執行的程式用到的不太一樣 那 HT 效能可以有 效發揮 但如果你跑些多元轉檔或是多指令集程式呼叫 你會發現開 HT 可 能只會更慢不會更快 最糟的狀況下 在執行一些寫作較差的應用程式時 因為運算分配 還有所為 的多時保護 (避免某個程式吃掉了所有的中斷資源) 開 HT 往往會讓你的效 能限制在上限 50% 如果某程式用到大部份指令集 對於 HT 的效用傷害是 很大的 當然這和 Intel 現階段的實作不是很成功也很有關係 (註一) 最後 ... 認為 K8 只有遊戲行 或是 P4 只有轉檔行 是錯誤的 但認為 P4 運算一定比較強 K8 3D 一定比較強 也是錯誤的 真正重要的是 軟體的寫法和支援方式 還有使用的部份 同樣是跑 MATLAB 或是 FORTRAN 77 因為應用的領域與函式呼叫的不同 兩陣營在同樣的應用軟體下表現可好可壞 端看你用什麼方式去用軟體 看到 P4 就說 P4 好我固然不喜歡 但是遇到 K8 就只說 K8 好的同樣讓 人討厭 看事情要看需求 只不過遊戲目前的需求 K8 佔優勢 而 95% 以 上的 PC 主要用途都是遊樂 如此而已 價格和喜好因素 那還是其次 可是 DIY 市場 荷包重不重要 可不能輕忽 註一 : 如同 littleshan 兄所言 良好的程式對稱性 (翻譯各有不同) 可 以讓 HT 有效發揮 (請參考 l 兄之回文 與下面我的再回應) instruction parallelism 屬於進階的程式效能研究主題 為程式 語言之進階 用白話說就是如何讓程式 "妥善利用" CPU 及相關資 源 讓程式執行起來更有效率 更加全面 另外 有人問我就再說 SMT 和 SMP 是不一樣的 ^^;;; -- 修改原因 : 修改註一所在之段落 / 加上註一 再次感謝 littleshan 兄 ^_^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.231.195
cutemaumau:dopin大講的果然比較詳細 我就是這個意思 推 59.115.0.209 06/08
eric1002:聖經 版主 快M啦140.127.179.229 06/08
lookers:樓上的不要命令我=.= 218.175.148.73 06/08
milen:但你還是乖乖做了XD 59.114.42.189 06/08
Asprit:好文 解釋的很清楚 218.175.58.53 06/08
louis0407:嘴巴說不要 身體倒是挺老實的XD 版主不要d我啊 140.121.214.71 06/08
shiunlin:請問何謂"不用的指令集模擬成另一個 CPU"?140.113.196.166 06/08
※ 編輯: Dopin 來自: 203.70.65.28 (06/08 10:07)
fttf:大師 Orz 218.161.14.205 06/08
> -------------------------------------------------------------------------- < 作者: 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
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
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
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
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
cooller:此外,現在人寫的組語未必比 compiler 寫的快 140.112.25.140 06/09
cooller:編譯器是為了一般性,一定有一大堆不必要的東西 140.112.25.140 06/09
> -------------------------------------------------------------------------- < 作者: Dopin (大鵰傳說) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 09:49:06 2005 : shiunlin:請問何謂"不用的指令集模擬成另一個 CPU"? 140.113.196.166 06/08 [本文尚在更改中 QQ] 嗯 技術面很難直接說的清楚 不過技術面我也不會 (哭著跑開) http://www.intel.com/personal/products/pentium4/hyperthreading.htm Hyper-Threading Technology (HT Technology)1 boosts computing performance to keep pace with today's applications and operating systems. And Intel dual-core processor-based PCs supporting Hyper-Threading Technology enables the PC to function as four "virtual" processors by executing two threads in parallel on two processing cores, allowing you and your software to multi-task more effectively than ever before. 上面那段英代爾白話的說明 HT 在說啥的文章 寫英文我就不翻了 我討厭翻譯 會喪 失部份原意 (真正的原因是 我英文爛 國文也爛 -_-) 前言 Intel Personal Computer Processor 屬於複雜指令架構 CPU 除了基本的運算單元 外 另外加了很多幫助特定狀況下運算或是資料處理的運算單元 這些單元分成好幾組 每組都有很多子分支(*1) 和特定電路(*2) HT !!! 一個程式在跑時 可能用到某些指令(*3) 會去呼叫某些單元的某幾個運算器(*4) 但 通常狀況下 總會有沒有用到的 Intel 於是開發了 Hyper-Threading 技術 動態的 把這些單元 "虛擬" 成兩個 CPU 盲點 最糟的狀況是 有個程式剛好用到很多 或是很多個不同的 (*2) 結果我們雖然有 HT 但是因為幾乎可用的資源都被用掉 所以就算系統以為有兩個 CPU 但是當真正的 CPU 在處理時 因為 (*4) 不夠用 對於該程式便疾於奔命 但是別的程式也要用到 "另一個" CPU 呀 那怎辦 ? 當然就是等待囉 結果開了 HT 不但多了分配緒的時間 又沒有真 的可以 "同時" 做事 開 HT 的效能便 "不增反降" 自白 以上就是白話文版的 HT 教學 我已經很努力的講白話了 但我想我的解釋可能還有 些人看不懂 就有勞板上各位先進不吝指導了 :~~~ -- 有打 (*N) 的 就是實在不知道怎麼翻比較好 有勞指導囉 感謝 j 兄指正 :) -- 中文真不知道該怎麼翻 頭大 :~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.65.28
crazypoker:推~我是資工人, 但我沒辦法講的這樣白~XD 59.120.53.43 06/08
TAKAHIRO:計算機組織? 作業系統? 192.83.193.6 06/08
breadf:微算機吧140.113.126.193 06/08
※ 編輯: Dopin 來自: 203.73.231.195 (06/09 08:26) > -------------------------------------------------------------------------- < 作者: julianyeh (julian) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 14:27:43 2005 ※ 引述《Dopin (大鵰傳說)》之銘言: : : shiunlin:請問何謂"不用的指令集模擬成另一個 CPU"? 140.113.196.166 06/08 : http://www.intel.com/personal/products/pentium4/hyperthreading.htm : Hyper-Threading Technology (HT Technology)1 boosts computing performance : to keep pace with today's applications and operating systems. And Intel : dual-core processor-based PCs supporting Hyper-Threading Technology enables : the PC to function as four "virtual" processors by executing two threads : in parallel on two processing cores, allowing you and your software to : multi-task more effectively than ever before. : 技術面很難直接說的清楚 英文我就不翻了 我討厭翻譯 會喪失部份原意 -_- 上面那一段英文完全沒有任何技術面 簡單來說,HT加上Dual-core,以OS層面來看,會有四顆processors (logical) : 前言 : Intel Personal Computer Processor 屬於複雜型 CPU 除了基本的運算單元外 另 : 外加了很多幫助特定狀況下運算或是資料處理的指令集 這些指令集分成好幾組 每 : 組都有很多子分支和特定電路 子分支和特定電路是什麼,可以更精確的說明嗎? 複雜型CPU是指CISC嗎? : HT !!! : 一個程式在跑時 可能用到某些指令 會去呼叫某些指令集的某幾個電路 但通常狀況 : 下 總會有沒有用到的 Intel 於是開發了 Hyper-Threading 技術 動態的把指令集 : "虛擬" 成兩個 CPU 我之前所知到的HT是利用pipeline 閒置的function unit 你所說的"某些指令集的某幾個電路"是什麼意思?可以進一步說明嗎? : 作業系統會因為 HT "誤以為" 真的有兩個 CPU 於是 OS 便可以執行多緒多工 把程 : 式分給兩個 CPU 去分別跑 但別忘了 真正的狀況下 只有 "一個" CPU 和 "一組" 指 : 令集 理想狀況下 程式本身支援多緒 (別問我那是啥 那是一門資工課程) 的話 便可 : 以有效利用虛擬的 CPU 執行 即使只有一棵CPU,也可以執行multi-threading,這是OS的部分 即使硬體不支援,還是有好處,這是OS就有教的吧 : 盲點 : 最糟的狀況是 有個程式剛好用到很多指令集 或是很多個不同的電路 結果我們雖然 : 有 HT 但是因為幾乎可用的指令集都被用掉 所以就算 OS 以為有兩個 CPU 但是當 : 真正的 CPU 在處理時 因為指令集不夠用 對於該程式便疾於奔命 但是別的程式也 : 要用到 "另一個" CPU 呀 那怎辦 ? 當然就是等待囉 結果開了 HT 不但多了分配緒 : 的時間 又沒有真的可以 "同時" 做事 開 HT 的效能便 "不增反降" 我這一段完全不知到您在說什麼 指令集不夠用?我以為您知道指令集的定義 P4上的指令集,不就是IA32嗎?頂多加上SSE/SSE2/SSE3 不夠用是怎麼樣的不夠用?不夠用該怎麼解決? 我看的一頭霧水.... : 自白 : 以上就是白話文版的 HT 教學 我已經很努力的講白話了 但我想我的解釋可能還有 : 些人看不懂 就有勞板上各位先進不吝指導了 :~~~ 這篇可以借轉嗎? 我知道鳥窩有一個板(B4n)很適合... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.215.80
whhsu:HT有多一組暫存器,但是ALU之類的還是只有一組 202.43.70.140 06/08
> -------------------------------------------------------------------------- < 作者: Dopin (大鵰傳說) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 15:17:09 2005 ※ 引述《julianyeh (julian)》之銘言: : 上面那一段英文完全沒有任何技術面 : 簡單來說,HT加上Dual-core,以OS層面來看,會有四顆processors (logical) 對呀 所以呢 ?_? : 子分支和特定電路是什麼,可以更精確的說明嗎? : 複雜型CPU是指CISC嗎? 不然難道會是 RISC ? : 我之前所知到的HT是利用pipeline 閒置的function unit : 你所說的"某些指令集的某幾個電路"是什麼意思?可以進一步說明嗎? 你為啥不說明 ? 你為啥不告訴人家什麼叫做 pipeline ? 你為啥不告訴人家整個 CPU Die 上面的分支各是什麼 ?_? : 即使只有一棵CPU,也可以執行multi-threading,這是OS的部分 : 即使硬體不支援,還是有好處,這是OS就有教的吧 請問一下單 CPU 多 CPU 跑多緒 這是效能差異 我有說不能跑嗎 還是你要嗆我說 其實我說 Windows "不是" 多工系統 ? : 我這一段完全不知到您在說什麼 : 指令集不夠用?我以為您知道指令集的定義 : P4上的指令集,不就是IA32嗎?頂多加上SSE/SSE2/SSE3 : 不夠用是怎麼樣的不夠用?不夠用該怎麼解決? 我有提到增益指令嗎 ? 軟體支援 SSE3 但是 CPU 不支援 難道就會掛掉不能跑 有這種軟體那也真是 "特殊化" 呀 :) : 我看的一頭霧水.... 我對你的發文也是一頭霧水 QQ? : 這篇可以借轉嗎? : 我知道鳥窩有一個板(B4n)很適合... 鳥窩 我怎想到大濕常講的一句話 ? :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.65.28 > -------------------------------------------------------------------------- < 作者: julianyeh (julian) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 15:47:37 2005 ※ 引述《Dopin (大鵰傳說)》之銘言: : ※ 引述《julianyeh (julian)》之銘言: : : 上面那一段英文完全沒有任何技術面 : : 簡單來說,HT加上Dual-core,以OS層面來看,會有四顆processors (logical) : 對呀 所以呢 ?_? 因為您說技術面部分不翻譯,所以我幫您翻了 不過您節錄的英文不是技術面,是宣傳面居多 所以我不知道你引用這段英文的用意和在? : : 子分支和特定電路是什麼,可以更精確的說明嗎? 還在等你回答這兩個問題... : : 複雜型CPU是指CISC嗎? : 不然難道會是 RISC ? CISC就說CISC吧,別自創辭不達意的翻譯了 : : 我之前所知到的HT是利用pipeline 閒置的function unit : : 你所說的"某些指令集的某幾個電路"是什麼意思?可以進一步說明嗎? : 你為啥不說明 ? 你為啥不告訴人家什麼叫做 pipeline ? : 你為啥不告訴人家整個 CPU Die 上面的分支各是什麼 ?_? 什麼叫CPU Die上面的分支?分支是指branch嗎? 我連你的題目都聽不懂,怎麼回答 : : 即使只有一棵CPU,也可以執行multi-threading,這是OS的部分 : : 即使硬體不支援,還是有好處,這是OS就有教的吧 : 請問一下單 CPU 多 CPU 跑多緒 這是效能差異 我有說不能跑嗎 : 還是你要嗆我說 其實我說 Windows "不是" 多工系統 ? 重點不是能不能跑,是有沒有好處 我要表達的是,即使CPU不支援HT,OS支援multi-threading,也是有好處 而CPU有了HT,更可以提高function unit的utilization 我不是來跟你筆戰的,你的著眼點在對單一程式的speedup 我的著眼點是整體系統的speedup : : 我這一段完全不知到您在說什麼 : : 指令集不夠用?我以為您知道指令集的定義 : : P4上的指令集,不就是IA32嗎?頂多加上SSE/SSE2/SSE3 : : 不夠用是怎麼樣的不夠用?不夠用該怎麼解決? : 我有提到增益指令嗎 ? 軟體支援 SSE3 但是 CPU 不支援 難道就會掛掉不能跑 : 有這種軟體那也真是 "特殊化" 呀 :) 我看不懂你對指令集的定義 可以請你把指令集重新定義一遍嗎?這樣討論起來比較省力 省得雞同鴨講 : : 這篇可以借轉嗎? : : 我知道鳥窩有一個板(B4n)很適合... : 鳥窩 我怎想到大濕常講的一句話 ? :) JCCJCC大濕嗎?他可是hardware版B4n的元老呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.215.80 > -------------------------------------------------------------------------- < 作者: Dopin (大鵰傳說) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 16:04:56 2005 ※ 引述《julianyeh (julian)》之銘言: 呀 ~~~~ j 兄 我想大概我知道你為啥那麼生氣了 -.-;;; "技術面很難直接說的清楚 英文我就不翻了 我討厭翻譯 會喪失部份原意 -_-" ^ 這邊要加個分號 我想你八成以為我說上面那是 "技術文章" 所以我不翻譯 我的意思是說 HT 技術我不會說 上面那段是跟 End User 講是什麼 不是說上面是技術文件啦 如果造成誤會 對不起 改一下囉 Q_Q : 還在等你回答這兩個問題... 我想 j 兄知道我的狀況後 就知道這不是技術 Q_Q;;; 我的著眼點是在 "虛擬" (virtual) 而已 要強調的是 不是 "雙倍" (Dual) : CISC就說CISC吧,別自創辭不達意的翻譯了 簡單型 CPU 和 複雜型 CPU 這兩詞不是我創的呀 QQ;;; : 什麼叫CPU Die上面的分支?分支是指branch嗎? : 我連你的題目都聽不懂,怎麼回答 呀 ?_? 先前 l 兄不是就提過 還被 m 那參考 l 兄給大家的網址不就好了 Q_Q? 應該算 section 吧 一張 CPU Die 圖的細部結構 可是我們大概沒必要在這個主 題上討論 我是認為你要我解釋 但我會認為 我解釋是要向你證明我了解 還是要 說給板友懂 要是後者我投降 我國文最爛了 常因為這樣招來一堆爭吵 Q_Q;;; : 重點不是能不能跑,是有沒有好處 : 我要表達的是,即使CPU不支援HT,OS支援multi-threading,也是有好處 : 而CPU有了HT,更可以提高function unit的utilization : 我不是來跟你筆戰的,你的著眼點在對單一程式的speedup : 我的著眼點是整體系統的speedup 嗯嗯 這點我了解 我要修改一下原意 對不起 ... :) : 我看不懂你對指令集的定義 : 可以請你把指令集重新定義一遍嗎?這樣討論起來比較省力 : 省得雞同鴨講 著眼點我想我犯了一個錯誤 就是我講 "指令集" 會讓人以為就是指 IAXX/SSE 之 類的東西 呃 這個實在不知怎麼改比較好 (昏) : JCCJCC大濕嗎?他可是hardware版B4n的元老呢 對呀 我最愛看大濕的文章了 (心) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.65.28 > -------------------------------------------------------------------------- < 作者: shiunlin (線條魚) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 18:50:37 2005 ※ 引述《Dopin (大鵰傳說)》之銘言: : : shiunlin:請問何謂"不用的指令集模擬成另一個 CPU"? 140.113.196.166 06/08 : 嗯 技術面很難直接說的清楚 不過技術面我也不會 (哭著跑開) : http://www.intel.com/personal/products/pentium4/hyperthreading.htm : Hyper-Threading Technology (HT Technology)1 boosts computing performance : to keep pace with today's applications and operating systems. And Intel : dual-core processor-based PCs supporting Hyper-Threading Technology enables : the PC to function as four "virtual" processors by executing two threads : in parallel on two processing cores, allowing you and your software to : multi-task more effectively than ever before. : 上面那段英代爾白話的說明 HT 在說啥的文章 寫英文我就不翻了 我討厭翻譯 會喪 : 失部份原意 (真正的原因是 我英文爛 國文也爛 -_-) : 前言 : Intel Personal Computer Processor 屬於複雜型 CPU 除了基本的運算單元外 另 : 外加了很多幫助特定狀況下運算或是資料處理的運算單元 這些單元分成好幾組 每 : 組都有很多子分支(*1) 和特定電路(*2) 1. 不是我刻意要挑您語病, 雖然您修改了文章, 但是仍沿用了"複雜型CPU"這個詞彙. 這術語我用google找也找不到, 您不妨留個"CISC"讓想瞭解的網友自行查詢. 2. 同樣的, 雖然我看了整個討論串, 但是對於你提到的"子分支"仍理不出頭緒. 既然無法翻譯, 是否請您保留原文的術語, 這樣其他人也可以拜拜google大神. : HT !!! : 一個程式在跑時 可能用到某些指令(*3) 會去呼叫某些單元的某幾個運算器(*4) 但 : 通常狀況下 總會有沒有用到的 Intel 於是開發了 Hyper-Threading 技術 動態的 : 把這些單元 "虛擬" 成兩個 CPU : 盲點 : 最糟的狀況是 有個程式剛好用到很多 或是很多個不同的 (*2) 結果我們雖然有 HT : 但是因為幾乎可用的資源都被用掉 所以就算系統以為有兩個 CPU 但是當真正的 CPU : 在處理時 因為 (*4) 不夠用 對於該程式便疾於奔命 但是別的程式也要用到 "另一個" : CPU 呀 那怎辦 ? 當然就是等待囉 結果開了 HT 不但多了分配緒的時間 又沒有真 : 的可以 "同時" 做事 開 HT 的效能便 "不增反降" : 自白 : 以上就是白話文版的 HT 教學 我已經很努力的講白話了 但我想我的解釋可能還有 : 些人看不懂 就有勞板上各位先進不吝指導了 :~~~ 小弟不才, 唸過一點粗淺的Computer Organization / Architecture 但不是我要吐槽你, 您如此熱心的耕耘Hardware板當然是好事 不過若對某一領域的認識不夠, 就不要講的太深, 講講廣告層面的東西 或者與End-User有關的東西就好了, 不然很容易誤導其他板友. 以上兩篇文章我想應該沒什麼人真正看的懂, 並不是太過艱深 而是根本不知所云, 用了很多奇怪/不存在/扭曲的術語, 觀念上也頗多錯誤. (不過真正讓我想po文的主因是因為被 m 起來) 我不像julianyeh兄那麼有耐心, 恕不一一指出. 但是相信Computer Science的學生應該可以很明白的分辨出我講的地方. 由於您前篇文章(10168, Wed Jun 8 00:16:53 2005) 內容問題太多, 因此我試著在推文中點出明顯觀念有誤的地方, 留下的引子, 期望有其他熱情的板友, 願意花時間繼續糾正整個討論內容 在此特別感謝littleshan及julianyeh兩位. (兩位寫得真好) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.209.62 ※ 編輯: shiunlin 來自: 140.113.209.62 (06/08 18:52)
Dopin:哦 抱歉說 我還沒改好 對不起說 我晚點去改囉 203.70.65.28 06/08
chiwa:以我們系上來說,如果硬要說中文的話,CISC說的是 140.117.189.45 06/08
chiwa:"複雜指令集電腦",不過很少人說中文,怪怪的= = 140.117.189.45 06/08
Dopin:問題是以前我們都這樣講咩 我的確是跟不上時代了 203.70.65.28 06/08
> -------------------------------------------------------------------------- < 作者: crazypoker (熱爆了.....ORZ) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 18:01:56 2005 引言不好意思我刪一點~~ : 嗯嗯 這點我了解 我要修改一下原意 對不起 ... :) : : 我看不懂你對指令集的定義 : : 可以請你把指令集重新定義一遍嗎?這樣討論起來比較省力 : : 省得雞同鴨講 : 著眼點我想我犯了一個錯誤 就是我講 "指令集" 會讓人以為就是指 IAXX/SSE 之 : 類的東西 呃 這個實在不知怎麼改比較好 (昏) 我想就我理解的豆餅大意思, 應該是說當系統/程式在用CPU作運算的時候 因為一種指令再同一時間只可以給一個工作使用, 而如果這時一些指令的電路被某程式使用時, 其他未被使用的指令的電路就會被模擬成另一顆CPU給其他程式使用 不需要等到CPU完全閒置時才被其他程式來使用 我想豆餅大這裡說的指令集, 應該是說指令集時作成的電路們吧... -- 我想我應該是沒有理解錯....不過...我好像並沒有解釋到... 好像有點越弄越混淆了....如果有人覺得被我搞婚頭的話請略過小弟的發言..Orz.. 或者有人也看董我的意思而可以再加以解釋, 那當然在好不過~~XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.70.51 > -------------------------------------------------------------------------- < 作者: Dopin (大鵰傳說) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Wed Jun 8 19:50:33 2005 ※ 引述《shiunlin (線條魚)》之銘言: : 1. 不是我刻意要挑您語病, 雖然您修改了文章, 但是仍沿用了"複雜型CPU"這個詞彙. : 這術語我用google找也找不到, 您不妨留個"CISC"讓想瞭解的網友自行查詢. 我不知道我和你年代是不是相同 我以前學 複雜型 簡單型 計算機架構 現在多作 複雜指令架構 複雜指令集(合) 複雜指令運算 諸如種種 老是在這種 小地方做文章 我不會覺得你 是真的要指正什麼 我只會覺得這是情緒性發言 : 2. 同樣的, 雖然我看了整個討論串, 但是對於你提到的"子分支"仍理不出頭緒. : 既然無法翻譯, 是否請您保留原文的術語, 這樣其他人也可以拜拜google大神. 如果你們看到中文 一定要翻回 sub branch 那和原常見說理的確是天差地遠 也 許我不該說這種看起來像名詞的東西 我該說一些運算電路的集合 或是一些執行 的單元 說真的 誰知道被包了這麼多以後 會是 XOR 或是 INT 或是那一個 ? 你們著眼的都在 SMT 可是多線程真的照原文翻 看得懂的先進 一定比我懂 不需要 我講 我承認我自作聰明試著換個方法講是錯誤的 但也不代表我就全然沒看過呀 QQ 我覺得我說的讓人家誤會我很抱歉 可是我試著在不抄別人文的情況下來概說 也許 如 s 兄所言 這樣會更好也說不定囉 http://www.aopen.com.tw/tech/techinside/HyperThreading.htm http://cweb.msi.com.tw/html/service/techexpress/mainboard/ht/page1.htm 我造成人家更不懂我很對不起 但我不認為我就像 s 兄講的如此囉 Q_Q : 小弟不才, 唸過一點粗淺的Computer Organization / Architecture : 但不是我要吐槽你, 您如此熱心的耕耘Hardware板當然是好事 : 不過若對某一領域的認識不夠, 就不要講的太深, 講講廣告層面的東西 : 或者與End-User有關的東西就好了, 不然很容易誤導其他板友. 我認為我如果用詞產生疑慮 這可以改 我也很樂於改 我也不認為我講的一定 OK 所以我有寫到 有勞板上先進指導 QQ;;; 我覺得 l 兄的指正我很就能接受 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.65.28
ULTIMA1002:其實我覺得可能是他們覺得你並不是真正懂HT 163.25.118.42 06/08
ULTIMA1002:卻大肆批評而看不過去吧~ 163.25.118.42 06/08
ULTIMA1002:有HT基本上ㄧ定利大於弊.... 163.25.118.42 06/08
ULTIMA1002:可是在你之前的文章看來好像intel是用HT來砸 163.25.118.42 06/08
ULTIMA1002:自己腳....似乎有些偏頗 163.25.118.42 06/08
cutemaumau:U大要仔細看豆大的文章 豆大講的沒有錯 59.115.6.10 06/08
cutemaumau:不要只是一味的神話HT 當然HT沒什麼不好 59.115.6.10 06/08
cutemaumau:提供給不想要因為程式跑全速而慢下的人一個選 59.115.6.10 06/08
cutemaumau:擇 但是缺點是對沒有對HT優化的軟體 59.115.6.10 06/08
cutemaumau:你無法要求cpu 開了HT還跑的比沒開快 59.115.6.10 06/08
cutemaumau:另外HT只是用起來不慢 但是時間拉長了 59.115.6.10 06/08
cutemaumau:像我的P4 3.0 我還把HT關掉使用 這是長時測試 59.115.6.10 06/08
cutemaumau:的結論的 根據跑不同的功能 HT有利也有弊 59.115.6.10 06/08
ULTIMA1002:基本上cute兄好像都是用AMD的吧!!! 163.25.118.42 06/08
ULTIMA1002:您的P4 3.0是啥時買的呢?.? 163.25.118.42 06/08
ULTIMA1002:查詢您前面的文章似乎從來沒碰過INTEL的U耶 163.25.118.42 06/08
Cisse:樓上的語氣真嗆 不知道每個人不只玩一台電腦麻= = 59.104.41.103 06/09
Dopin:我沒有說 HT 不好啦 慘 如果有造成誤會的地方 203.73.231.195 06/09
Dopin:有勞 U 兄告訴我那裡論述不好 我改一下 QQ;;; 203.73.231.195 06/09
Dopin:對了 我的乖寶寶裡面有說到 HT 讓 PR 值變得不準 203.73.231.195 06/09
Dopin:我只希望喜歡戰單文的人 可以把我全部文章都看過 203.73.231.195 06/09
Dopin:我從來就沒說 HT 不好 -_-;;; 我還認為他很好 203.73.231.195 06/09
Dopin:但是我就對 U 兄把他捧上天 覺得很不妥 ... 203.73.231.195 06/09
Dopin:最好加上 SetupBBS 板 :p 203.73.231.195 06/09
cutemaumau:給U兄 我公司電腦全部intel 這樣夠不夠多台 59.115.1.32 06/09
cutemaumau:哪有這樣挑人家語病的 找人麻煩喔 59.115.1.32 06/09
cutemaumau:我說有用過就是有用過 幹麻故意造謠 我又不是 59.115.1.32 06/09
cutemaumau:某王姓議員 拜託不要在硬體版搞這套好不好 59.115.1.32 06/09
> -------------------------------------------------------------------------- < 作者: shiunlin (線條魚) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Thu Jun 9 13:08:30 2005 ※ 引述《Dopin (大鵰傳說)》之銘言: : ※ 引述《ULTIMA1002 (my story)》之銘言: : : 所以我覺得K8的優勢被現在快速發展的顯示卡市場給蓋過了 : 如果你是玩 天堂 II 或是 FF XI 你就會發現 CPU 還是有差 P4 永遠有 : 跟不上的先天缺憾 反之 DOOM 或是 Far Cry 就差不多 : 真正的狀況 : 遊戲影響大小 和程式的寫法也很有關係 不會只差在顯示卡 : => 不然大家都用賽揚和散步龍 配高階顯卡就好 不是嗎 ? (當然不可能) : : 而P4不管是轉檔剪接的優勢還是HT的多工都不能被其他硬體所取代... : 轉檔也要看寫法 現在優勢就是軟體廠商優化多 所以差異很大 : 真的在跑新版的軟體時 兩者的差異只會變小 不會變大 其來有自 : : 總覺得在遊戲之外P4好用很多 : : 這是我個人的觀點啦...有錯請指教 : HT 的多工是把不用的指令集模擬成另一個 CPU 不代表你真的有兩倍的效 : 能可以用 也許我們今天所執行的程式用到的不太一樣 那 HT 效能可以有 : 效發揮 但如果你跑些多元轉檔或是多指令集程式呼叫 你會發現開 HT 可 : 能只會更慢不會更快 : 最糟的狀況下 在執行一些寫作較差的應用程式時 因為運算分配 還有所為 : 的多時保護 (避免某個程式吃掉了所有的中斷資源) 開 HT 往往會讓你的效 : 能限制在上限 50% 如果某程式用到大部份指令集 對於 HT 的效用傷害是 : 很大的 當然這和 Intel 現階段的實作不是很成功也很有關係 (註一) "HT讓你的效能限制在上限 50%" ?? 請參考下面這篇文章, http://anandtech.com/cpuchipsets/showdoc.aspx?i=1746&p=6 單就下面那張圖表來看, 何來效能上限在50%之說? 以WinRAR為例, 他壓縮的部分根本就不是針對Multi-threading特別撰寫的, 效能也沒什麼影響, 更沒有荒謬到效能上限在50%這種情形發生 既使是圖表中效能下降最嚴重的benchmark -- CCWS2K2 也只有下降7%, 當然唸過計算機組織的都知道 一個系統的效能(就讓我們以程式執行時間作為評量效能的指標吧) 並不是單一元件變慢多少系統就會一樣慢多少 -- 這是顯而易見的 但若您所說的 "HT讓你的效能限制在上限 50%" 成立, 那您大可找找看同核心的P4, 在何種核心工作頻率下, 不開HT 在FSB, Memory, 以及其他周邊的零件都一樣的系統, 跑出來的數據可以 達到P4 3.06G 不開HT情況下的 0.93, 順便驗證一下當時的核心工作頻率 是不是就真的是P4 3.06G的50%. 請就事論事證明我是錯的, 期待您的結果. (我相信以貴公司的資源, 應該是不缺零組件的, 當然不一定要用P4 3.06G 任何一系列具備HT能力的P4核心都很適合您的實驗, 祝您實驗順利) 另外, 關於您文中用到的那一堆自己重新定義過的術語, 我也懶得再提了 免得您又覺得我是情緒性發言. 不過如果連 指令集/pipeline/function unit都不分的話, 我想您應該是沒唸過 計算機組織學吧. 沒完全弄懂的話, 就請不要再拿某些專業科目來壓人. (一開始我以為您是有唸過/念懂的, 還熱心想要盡力比喻給其他板友聽, 沒想到不解釋還好, 一解釋下來反而開始亂用術語, 而且觀念還明顯有偏頗) 上文還有一個特別牛頭不對馬嘴的地方 "避免某個程式吃掉了所有的中斷資源" 我最好奇的是, 什麼叫做程式吃掉(佔據 -- 這應該符合您的原意吧) 所有的中斷資源? : 最後 ... : 認為 K8 只有遊戲行 或是 P4 只有轉檔行 是錯誤的 : 但認為 P4 運算一定比較強 K8 3D 一定比較強 也是錯誤的 : 真正重要的是 軟體的寫法和支援方式 還有使用的部份 : 同樣是跑 MATLAB 或是 FORTRAN 77 因為應用的領域與函式呼叫的不同 : 兩陣營在同樣的應用軟體下表現可好可壞 端看你用什麼方式去用軟體 : 看到 P4 就說 P4 好我固然不喜歡 但是遇到 K8 就只說 K8 好的同樣讓 : 人討厭 看事情要看需求 只不過遊戲目前的需求 K8 佔優勢 而 95% 以 : 上的 PC 主要用途都是遊樂 如此而已 : 價格和喜好因素 那還是其次 可是 DIY 市場 荷包重不重要 可不能輕忽 : 註一 : 如同 littleshan 兄所言 良好的程式對稱性 (翻譯各有不同) 可 : 以讓 HT 有效發揮 (請參考 l 兄之回文 與下面我的再回應) : instruction parallelism 屬於進階的程式效能研究主題 為程式 : 語言之進階 用白話說就是如何讓程式 "妥善利用" CPU 及相關資 : 源 讓程式執行起來更有效率 更加全面 如果說明的這麼籠統, 那不是跟沒講一樣? 此外, 您也徹底扭曲littleshan的意思了 他的原文節錄如下 "事實上 擁有良好instruction parallelism的程式 在單一process的情況下 還是能發揮cpu接近全部的運算能力" 而不是什麼 "良好的程式對稱性 可以讓 HT 有效發揮" 他原來的意思是說, 一個不是Multi-threading的程式如果具有高度的 Instruction-level Parallelism, 那不用HT一樣可以壓榨出P4的實力 : 另外 有人問我就再說 SMT 和 SMP 是不一樣的 ^^;;; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.209.62
ULTIMA1002:推一個~中肯的見解 163.25.118.42 06/09
danceking:不懂裝懂低人越來越多了 218.32.98.1 06/09
milen:我自己只是一個插不入話的人....因為我不懂 59.114.43.98 06/09
milen:但如果大大你懂的話請幫忙指正一下~~ 59.114.43.98 06/09
milen:而不是只在推文放話 59.114.43.98 06/09
singy:我不懂cpu硬體 不過有時候看戰文就是要看有水準的 163.13.225.177 06/09
Fiendyux:推精闢好文~ 先看看計算機結構的ILP那兩章會比140.116.164.228 06/09
Fiendyux:較容易了解140.116.164.228 06/09
singy:我要明年過年以後才會開始修計算機組織.... 163.13.225.98 06/09
singy:現在剛修完系統程式而已......@_@a 163.13.225.98 06/09
toyakoyosu:筆戰文......但我覺得蠻有深度的...我是路人. 192.192.197.35 06/10
chenshing:不是大人物說的就是對的 錯了還大有人推薦.... 140.109.32.9 06/10
chenshing:因為推荐的人也不懂....這是不好的循環 140.109.32.9 06/10
Dopin:有勞大家請看完前後討論與推文 我想好了再改原文 203.70.65.28 06/13
> -------------------------------------------------------------------------- < 作者: littleshan (我要加入劍道社!) 站內: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Fri Jun 10 04:18:33 2005 : 但是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)
Asprit:高手啊 我完全沒有看 太長 XD 220.132.59.3 06/10
breadf:推 配合湯姆薯叔對HT技術的解析 就可以一目了然了140.113.126.193 06/10
breadf:不過看湯薯叔的評論 把HT移植到双核上反而有困難140.113.126.193 06/10
breadf:甚至是效能不增反降?140.113.126.193 06/10
Dopin:我太感謝 l 兄了 > < 說到 Code 維護 OO 因而出現 203.73.231.195 06/10
newpal:◆ 這一篇文章值 1000 銀 XD 163.15.151.150 06/10
ithinkurdumb:寫的狠詳細又容易懂 :D 210.68.184.96 06/10
singy:謝謝解惑 61.224.134.53 06/10
※ 編輯: littleshan 來自: 140.112.244.211 (06/11 02:18) > -------------------------------------------------------------------------- < 作者: singy (忙期末考.....) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Fri Jun 10 17:57:58 2005 ※ 引述《littleshan (我要加入劍道社!)》之銘言:: 存入 : 指令拮取 指令解碼 trace cache : | | | | : | | | | : L2 Cache --> Decoder --> Queue --> Trace Cache --> μOp Queue : | | | | : 雖然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來說 可以被分析的指令也少了一半 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 我想請教一下L兄 這裡指令少一半是什麼意思? 是指QUEUE的長度減半所以單顆CPU能分析的解碼指令也少一半嗎? 如果這樣的話 add edx,esi ;cpuA execution at time 0 add eax,ebx ;cpuB execution at time 0 sub ecx,edx ;cpuA execution at time 1 mov ecx,edi ;cpuB execution at time 1 在time0沒有相依 可是add instruction在這時不是delay了一下 這樣是說多執行緒使用的時候 同一個指令的execution和Queue的容量減半 是造成ht再某些情況效能降低的原因嗎? : 產生的效果就變差了 : 最後 hyper-threading中 兩顆虛擬cpu的L1 cache是共用的 : 但兩支thread的spatial locality並不高 (很難翻譯這個名詞^^||) : 也就是cache更容易miss : 上面提到的三種情況 (decode不夠快、out-of-order效果不好、cache容易miss) : 都會使得運算單元停下來等待(stall) : 然而 prescott為了提升時脈 而有了超深的pipeline (31層pipeline stage) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 為什麼會造成更大的傷害啊?? : 因此stall對效能造成的傷害更大 : 這就是hyper-threading在p4上無法有效提升效能 甚至拉低效能的原因 : : -- : : ◆ 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 : (沒有批評的意思 我一向很佩服偏執狂) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 有些偏執狂很厲害....XD : 3. 最重要的問題 程式是寫給人看的 現在硬體愈來愈快的結果 : 使得人們把寫程式的重心從效率轉移到彈性和維護成本上 : 當然組合語言不會死 : 只是全部用組合語言以提升效率的時代已經過了 : 現在如果要用組合語言提升速度 : 多半都是先做profiling找出效率的瓶頸 : 然後再小部分用組合語言加速 (反正把assembly嵌入C之中是很容易的事) : : 推 Dopin:組語要寫得結構化才會比較 OK 之後還有優化 203.70.65.28 06/08 : : → Dopin:有些工具還頗好用的 以前在 TASM/MASM 時代常用的 203.70.65.28 06/08 : : 推 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: 61.224.134.53
oijkue:用cpumark測就知道了 prescott測出來會比北木低 219.84.132.86 06/10
chiwa:印象中,pipeline stage越深,pipeline hazard就會 140.117.189.45 06/10
chiwa:越嚴重? 140.117.189.45 06/10
chiwa:只記得這樣XD 140.117.189.45 06/10
Dopin:c 兄賓果 QQ 線切越細 做事越少 任一出鎚 全部死光 203.70.65.28 06/10
Dopin:www.tomshardware.com/cpu/20040201/index.html 203.70.65.28 06/10
Dopin:這也是為何我以前狂推 CG 的原因之一 203.70.65.28 06/10
singe:我比較推OGC 140.114.58.115 06/10
singy:樓上的又見面了........-_-||| 61.224.134.53 06/10
singe:XDGC 140.114.58.115 06/10
Dopin:請問一下 s 兄什麼叫做 XDGC ?_? 203.70.65.28 06/11
yellowfisher:我要推XDGC 218.184.100.69 06/11
> -------------------------------------------------------------------------- < 作者: singy (忙期末考.....) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Fri Jun 10 19:28:58 2005 ※ 引述《littleshan (我要加入劍道社!)》之銘言: : [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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 我有點疑問@_@a 塞入另一組暫存器怎麼會代表兩個cpu 指令本身並沒有增加 增加的是暫存器的多寡 所以說"假裝"嗎.......? : 只要作業系統支援多cpu : 就可以同時餵兩支process給它 : 由於兩支process的指令一定是不相依的 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 假如有三個連續指令 mul eax,ebx ; instruction 1 mul ecx,edx ; instruction 2 lea edi,esi ; instruction 3 如果是這種情況會怎麼分配指令呢? 依照不會衝突的分配法 CPU_A 12 ,CPU_B 3 time0 A do 1 B do 3 ,then time1 A do 2 下面是同是用到mul指令 因此delay little time CPU_A 13 ,CPU_B 2 time0 A do 1 B do 2 ,then time1 A do 3 所以HT會採取第一種分法嗎? : 所以可以提高這些運算單元的使用率 : 連帶地整體效能也提高了 : 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.134.53 ※ 編輯: singy 來自: 61.224.134.53 (06/10 19:35)
breadf:因為程式實際上在執行的時候 即使是全速執行也不140.113.126.193 06/10
breadf:會佔用100%的CPU 而只有30%~50% 所以INTEL設計成140.113.126.193 06/10
breadf:讓程式"以為"他自己現在擁有整個CPU的優先權140.113.126.193 06/10
> -------------------------------------------------------------------------- < 作者: littleshan (我要加入劍道社!) 站內: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Sat Jun 11 02:07:20 2005 ※ 引述《singy (忙期末考.....)》之銘言: : : 但是在hyper-threading的情況下 : : 因為μOp Queue被切了一半 : : 所以對out-of-order execution來說 可以被分析的指令也少了一半 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 我想請教一下L兄 這裡指令少一半是什麼意思? : 是指QUEUE的長度減半所以單顆CPU能分析的解碼指令也少一半嗎? 是的 : 如果這樣的話 : add edx,esi ;cpuA execution at time 0 : add eax,ebx ;cpuB execution at time 0 : sub ecx,edx ;cpuA execution at time 1 : mov ecx,edi ;cpuB execution at time 1 : 在time0沒有相依 : 可是add instruction在這時不是delay了一下 : 這樣是說多執行緒使用的時候 : 同一個指令的execution和Queue的容量減半 : 是造成ht再某些情況效能降低的原因嗎? 我看不太懂你要表達的意思 cpuA和cpuB是指HT的兩顆logic cpu 所以它們的暫存器應該是獨立的兩組 : : 產生的效果就變差了 : : 最後 hyper-threading中 兩顆虛擬cpu的L1 cache是共用的 : : 但兩支thread的spatial locality並不高 (很難翻譯這個名詞^^||) : : 也就是cache更容易miss : : 上面提到的三種情況 (decode不夠快、out-of-order效果不好、cache容易miss) : : 都會使得運算單元停下來等待(stall) : : 然而 prescott為了提升時脈 而有了超深的pipeline (31層pipeline stage) : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 為什麼會造成更大的傷害啊?? 對不起 我現在才發現這邊這麼講並不是很正確 深的pipeline在發生stall時 對效能的影響不一定比較大 還是要視情況而定(stall的原因 以及stall的cycle數) 但以prescott的例子來說 pipeline的深度的確造成了影響 那就是out-of-order 前面有提到cpu必須先分析一定數量的指令(μOp in-flight)並進行重排 而這個數量則要取決於pipeline的深度: pipeline越深 則μOp in-flight的數量就應該越多 然而比起northwood 開啟HT後的prescott的pipeline變多 μOp in-flight反而被減半了 而cache miss很傷則是因為prescott的miss panalty比northwood更高 northwood的L2 cache latency為7 cycle prescott則是18 cycle 超過northwood的兩倍 但它的時脈並沒有提升到兩倍那麼多 所以一旦發生cache miss prescott要等更久的時間才能讓指令繼續跑下去 -- DO NOT disturb my programs! -- From Archimedes' last word, and may be my last word. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.244.211
chiwa:多謝l兄的解釋,學到不少東西 140.117.189.45 06/11
> -------------------------------------------------------------------------- < 作者: littleshan (我要加入劍道社!) 站內: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Sat Jun 11 02:16:46 2005 ※ 引述《singy (忙期末考.....)》之銘言: : : (學術一點的說法叫SMT) : : 它的想法是在cpu內塞入另一組暫存器 然後假裝自己是兩顆cpu : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 我有點疑問@_@a : 塞入另一組暫存器怎麼會代表兩個cpu : 指令本身並沒有增加 不是指令 是function unit : 增加的是暫存器的多寡 : 所以說"假裝"嗎.......? 除了暫存器 它連到北橋的界面應該也有一些額外的設計 OS才能辦認出兩顆cpu 不過這部分我並不清楚 : : 只要作業系統支援多cpu : : 就可以同時餵兩支process給它 : : 由於兩支process的指令一定是不相依的 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 假如有三個連續指令 : mul eax,ebx ; instruction 1 : mul ecx,edx ; instruction 2 : lea edi,esi ; instruction 3 : 如果是這種情況會怎麼分配指令呢? : 依照不會衝突的分配法 : CPU_A 12 ,CPU_B 3 time0 A do 1 B do 3 ,then time1 A do 2 : 下面是同是用到mul指令 因此delay little time : CPU_A 13 ,CPU_B 2 time0 A do 1 B do 2 ,then time1 A do 3 : 所以HT會採取第一種分法嗎? 看來你還是不太了解HT喔 如果兩顆logical cpu都有在運作 表示有兩個thread在進行 所以應該是像這樣的 thread 1 thread 2 mul eax,ebx add eax, ebx mul ecx,edx add ecx, edx lea esi,[edi] mul eax, ecx ... ... (你的lea指令應該是寫錯了吧 :X) -- void null undef NaN Nil ε -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.244.211 > -------------------------------------------------------------------------- < 作者: Dopin (大鵰傳說) 看板: hardware 標題: Re: [問題] Intel 3.2g 和 AMD 3500+ 939 到底괠… 時間: Sat Jun 11 13:01:20 2005 ※ 引述《littleshan (我要加入劍道社!)》之銘言: : 如果兩顆logical cpu都有在運作 表示有兩個thread在進行 可能是 l 兄解釋 out-of-order execution 時 誤讓 s 兄以為每一個指令是 循序交由不同 Logical CPU 去執行 ? 我覺得用組語來解釋 HT 其實還蠻困難的 Q_Q;;; 因為除了 OP 和 Register 以外 ASM 會觸及的東西不多 頂多就是再加上 Value 或 Address 之類 如果 用兩個 Thread 來看 因為是獨立兩組 Code 會讓人直覺 HT 的使用 效能應該 直接可提升 Double 卻容易忽略關鍵的資源卻是共用的 (事實上 SMP 也不可 能兩倍) ... instruction-level parallelism 以前不管是用 ASM 或 C 我發現週遭的朋 友和我都不常去注意 (大家高階語言玩太多了嗎 ?_?) 反而都只注意 O(X) 或是速率決定步驟 (rate-limiting step 後來用於程式語言方面有別的用詞) 的多 ... 真正要平均於指令 降低運算器與暫存器相依關係的東西 在寫作的 過程中真的就只能稍微注意罷了 (交給優化原始碼的軟體 QQ;;;) 不過缺點 往往 程式的可讀性也變差許多 ... (慚愧 以前都很少在 Remark 的 :p) 最 後又回到那一種組譯器 (assembler) 比較好的話題上 而編譯器 (Compiler) 也一樣 (直覺的寫法能少用到間接定址也儘量少用 尤其是多重參照 -.-;;;) Top-Down Design 到 OO 以後 我想效能的犧牲往往也是更大 畢竟那是程式 維護的優先權大於效能最佳化 ... 而關於 HT 以前我會比較傾向告訴人家 "想成是搭載一個雙 CPU 的系統就好" 可是後來發現 這種觀念居然變成一種廣告詞 ... (默) 現在要是說到某些狀 況下 (一定要強調是少部份狀況 -.-;;;) 開 HT 會不如沒開 馬上... (爆) -- 我真跟不上時代了 還活在 mov ah,09 / int 21 類似這種狀態 ... 32 位元 暫存器 ... 感覺好遙遠 ~_~;;; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.65.28
Dopin:只能說偉哉 l 兄 Q_Q;;;; 203.70.65.28 06/13