瀏覽單個文章
RogerShih
*停權中*
 
RogerShih的大頭照
 

加入日期: Nov 2000
您的住址: Taipei,ROC
文章: 573
引用:
作者fulami
計算機結構學的不好,有些地方不太懂,希望又大大能夠解答

1.所謂的muilty-thread 的程式寫法是否是將一個程式交由CPU執行的時候能同時提供多給Thread給多個CPU亦或是虛擬出來的多CPU(HT技術)執行?

2.多工的廣泛定義,應該是同時執行多個工作?一般CPU要執行多個程式都是看OS的寫法,理論上單一CPU沒有多核心設計(包括虛擬)的多工能力應該都是看CPU的執行能力,因為同一個時間被執行的thread都是一個?

3.如果1與2是正確的話,沒有支援multy-thread的單一程式,就算OS有支援multy-thread用多CPU、多核心單一CPU(包括虛擬),效能都是一樣?(在只執行此一程式的情形下)

4.換一個角度,根本不可能用軟體模擬出擁有同時執行多個thread的CPU在一個不支援同時處理多個thread的單一CPU上,因為被CPU執行的thread永遠只有一個。

5.說HT是模擬擁有2個CPU下這應該是100%成立的?就INTEL官方的HT試意圖,HT技術是在CPU 等待其他資料進來的空檔插入另一個thread來做處理,所以並不是兩個thread同時執行(跟雙核心有很大的不同),視空檔大小決定後到的thread所佔的CPU資源?

6.如果5成立,今天就算是管線不長,HT也能順利執行而且能力更好,因為thread處理的更快?


1. 你說對一半, Multi-Thread 程式應該這麼看, 當有多 CPU 的時候, 例如兩顆, 那就平均分配, 那個有空就那個去執行, CPU 越多, thread 排隊的時間越短.

而只有單一 CPU 時, 那就照排, 所以排列時間比較長.

2. 事實上, 多工應該說是分時、平行運算混合, 拿現在的 Windows XP 為例, 你一進入程式可能已經執行了幾十個 Process, 這些 Process 可能是單一 thread, 或是 multi-threads, 但, 平常會有幾十顆同樣數量的 CPU 同時平行運算嗎?所以其中分時多工也必定存在. 每一秒可能切割成許許多多單位, 優先權高的多分配一點, 可能是 5/1000 秒, 優先權低的可能是 1/1000 秒, 然後利用 CPU 中的 task 切換每一個 Process、thread, 來讓使用者感覺到你程式是同時在執行的.

有人講到 Super-Scalar, 這是 thread 等級的平行處理技術, 這部份我還要再了解一下, 只是如果 Super-Scalar 真像某位朋友說的是平行處理, 也就不需要 HT 了.

3. 結論沒錯.

4. 基本上, 在 286 開始就已經開始支援多工機制 (保護模式), 提供 Task 的切換, 這就是單核心多工的基礎, thread 跟 Process 的性質差不多, 能多 Process 切換執行, 多 thread 就可以, 只不過作業系統在實作的時候要清楚 thread 跟 Process 的不同跟溝通.

Super-Scalar 具有某種程度的指令平行處理能力, 不過不能跟雙核或 HT 混為一談.

5. 應該說是切換, 當一邊 thread 差生空檔, 另一邊 thread 就可以取得比較多的CPU資源. 在作業系統的優先權觀念來說, 是優先權對調.

6. 管線不長, 效能浪費就少, HT 就比較沒有發揮的餘地. 管線長的設計, 在分支預測錯誤的時候, Lantecy 比較長, 這段時間內, CPU 的運算資源可能是 hold 沒在用的, 白白浪費掉. 而管線短的這個 Lantecy 時間短, HT 的幫助就很小了.

可以試著在有 HT 的 P4 玩看看兩個 CPUMark(單一Process單一thread的測試程式應該都可以), 到工作管理員中一個設給 CPU0 跑, 一個設給 CPU1, 看結果如何, 再來試著自己推測原因

還有, 我對於媒體用 HT 來下標題, 也不認為是對的.
舊 2005-07-16, 01:59 AM #203
回應時引用此文章
RogerShih離線中