PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   系統組件 (https://www.pcdvd.com.tw/forumdisplay.php?f=19)
-   -   請問線程是什麼? (https://www.pcdvd.com.tw/showthread.php?t=1152451)

冰的啦魔王大人 2018-10-18 05:41 PM

引用:
作者NEAL
Computer Organization會比較有Feel,能的話實作一下會比較有感覺。



CO 比較淺, 講CPU不多,
CA 比較深, 比如會講管線怎麼推, 有什麼挑戰, CACHE怎麼HIT ,幾階與幾個Way set association 什麼的, 其他處理器的內部架構又是什麼, 但是也沒講很清楚關於HT的事.
但能夠講到ILP/DLP/TLP就只有這書了吧?

NEAL 2018-10-18 06:00 PM

引用:
作者冰的啦魔王大人
CO 比較淺, 講CPU不多,
CA 比較深, 比如會講管線怎麼推, 有什麼挑戰, CACHE怎麼HIT ,幾階與幾個Way set association 什麼的, 其他處理器的內部架構又是什麼, 但是也沒講很清楚關於HT的事.
但能夠講到ILP/DLP/TLP就只有這書了吧?


對耶!書名我記反了,Computer Organization是大學時的計組,Computer Architecture是研究所時的計結。

是說我們這屆開始Memory就是CO會教蠻完整的,至於ILP/TLP/DLP就真的是CA的內容。

謝謝魔王兄指正書名。

anderson1127 2018-10-18 08:14 PM

討論很精彩說....

NEAL大是從programming切入看thread , 我則是從整體OS面來看待thread ....
說老實話,我沒念過thread 相關的programming , 觀念方面更一點都沒有去念過書
thread 這方面的說明,市面上還是比較多從programming 切入 ....

這種事沒有對錯,都是可以切入的角度點!!

至於Intel所謂的thread ,對我來說還不是很清楚 , 說是Pipeline 也不很正確,但我實在拿不出更為接近的說法...
Superscalar 的出現,是為了能夠更充份利用CPU的運算資源,避免因為較複雜的運算或者I/O Waiting
導致整個pipeline被stall (卡住) , 只為了等待運算的結果 !! 所以,當有這種狀況產生時
就可以運用另外一路的pipeline,讓後面的instruction code可以持續的進入運算 !!
它的出現,也才有了 亂序執行的技術 ,等等一系列的CPU執行的改良技術出現!!

我在猜想,或許Hyper-Threading 大概就是整合數種技術的統稱吧?? 我想....
主要的目的想當然爾就是讓CPU運作更順暢 !!

回到樓主的疑惑點

1 clock 是否能夠執行一個instruction code ? 嗯..... 答案是很令人失望的!!
基本上這點在CISC的架構下,做不到!! 雖然我也認為RISC架構下也不一定能做到這一點

正確一點的來說,大部份的instruction code都無法在1 clock內完成執行 , 但偏偏就有一個instruction可以 , 它就是nop !! 有意義嗎?? 它符合樓主的命題 , 但卻不符合一般運用的期待 !!

你說nop 沒意義?但它又是compiler的必備使用的instruction !! 知道我在說什麼的應該都會會心一笑吧!! :ase :ase :ase

NEAL 2018-10-19 09:59 AM

引用:
作者anderson1127
討論很精彩說....

NEAL大是從programming切入看thread , 我則是從整體OS面來看待thread ....
說老實話,我沒念過thread 相關的programming , 觀念方面更一點都沒有去念過書
thread 這方面的說明,市面上還是比較多從programming 切入 ....

這種事沒有對錯,都是可以切入的角度點!!

至於Intel所謂的thread ,對我來說還不是很清楚 , 說是Pipeline 也不很正確,但我實在拿不出更為接近的說法...
Superscalar 的出現,是為了能夠更充份利用CPU的運算資源,避免因為較複雜的運算或者I/O Waiting
導致整個pipeline被stall (卡住) , 只為了等待運算的結果 !! 所以,當有這種狀況產生時
就可以運用另外一路的pipeline,讓後面的instruction code可以持續的進入運算 !!
它的出現,也才有了 亂序執行的技術 ,等等一系列的CPU執行的改良技術出現!!

我在猜想,或許Hyper-Threading 大概就是整合數種技術的統稱...


哈哈,就一起討論啊,辨證是讓知識和修為進步的重要方式。

話說回來,其實SuperScalar的觀念是相對Scalar,本質就是為了讓同一Cycle有多個指令都被處理,也就是魔王兄講的ILP,Instruction Level Parallelism,以提昇效率。

而Pipeline本身就是一個偉大發明,它也是和SuperScalar一樣是為了提升ILP,提升的效能增益也最明顯。所以維基百科也有說,SuperScalar很容易被誤解就是等同Pipeline,但其實兩者應該視為不同,因為沒有做Pipeline的CPU還是可以做SuperScalar。反過來說,SuperScalar也不是為了解決Pipeline Stall而產生的。

我舉個SuperScalar的例子,像說我的程式碼編譯後有兩行組合語言指令:

add $c, $a, $b (c = a + b)
lw $d, 64($e) (d = Memory[e+64])

第一行是做加法運算,用到的是主要ALU;第二行是記憶體存取指令,通常好一點的CPU會讓記憶體位址計算的部份也有一顆自己的小ALU,避免去搶主要ALU的資源。

因此以SuperScalar的CPU來說,它在讀指令的階段就會判斷,發現這兩行指令其實是可以同時執行的,不用等第一行add做完,再做第二行lw,這兩行用到的硬體資源是獨立無關的,所以它就會把這兩行指令同時執行。


至於Pipeline的話,做法就會和上述SuperScalar有點不同,但目標是和SuperScalar一模一樣的,就是提升ILP。它的設計哲學就像工廠的流水線,一支iPhone在製造的過程,不必等一支iPhone從頭做到好再做第二支,這樣一堆作業員都在挖鼻孔發呆。而是可以第一個作業員組好主機板後交給下個作業員去組電池,第一個作業員就可以馬上著手下一支iPhone的主機板組裝作業,所以流水線上的每個作業員無時無刻都能爆肝滿檔工作,每個Cycle也能產出一支iPhone。其實Pipeline這個詞也是借引工作流水線而來,把每行組語指令都拆分成很多階段,就能像工廠流水線這樣作業,以前述例子來說,它的設計哲學就可以將每行指令都拆成:

1. Instruction Fetch
2. Instruction Decode
3. Execution
4. Memory
5. Write Back

這就是一個最基本的5階Pipeline,一條流水線上就有這5個作業員。

所以第一行add執行到Instruction Decode時,第二行的lw也可以進入到Instruction Fetch的階段,不用等第一行add做完Write Back,才開始做第二行lw。

因此Pipeline Stall通常只能靠一些方法來解決,就不是SuperScalar能搞定的,實務上常作的解法是Prediction,因為Stall有一些情況,其中兩種叫Data Hazard和Control Hazard,也就是上下幾行指令之間有嚴重相依性,必須等第一行做完,第二行再根據第一行計算結果判斷才能做,所以Pipeline的機制等同廢掉,大家都要等第一行做完。這時Prediction就是冒險先偷偷開始做第二行指令,如果第一行算出來的結果還真的曚到猜對了,那麼第二行以後那些偷跑的執行成果就是賺到了,當然如果猜錯第一行執行結果,後面那些指令都白做,全都重來。

冰的啦魔王大人 2018-10-19 12:18 PM

引用:
作者anderson1127
這種事沒有對錯,都是可以切入的角度點!!


好了,各位同學, 這是期末考考題 :
請試著由軟體硬體角度去證明Thread 與 Hyper-Threading 不可混為一談.

答題時間, 24HR. Openbook 現在開始.
:laugh:

stanleywang 2018-10-19 02:14 PM

引用:
作者冰的啦魔王大人
好了,各位同學, 這是期末考考題 :
請試著由軟體硬體角度去證明Thread 與 Hyper-Threading 不可混為一談.

答題時間, 24HR. Openbook 現在開始.
:laugh:


這題真是怪阿,

兩者都出現很長一段時間了,我卻從來沒有想到要比較兩者,
因為這兩種東西是完全不一樣的,到底要怎麼比較呢?

Hyper-Threading是純硬體,一般人只需把它當成多一顆CPU就好了,
根本不用想太多,也不容許想太多。

而Thread 花樣就多了,
不過我也沒辦法確認 樓主說的 Thread,
到底是指 Parallelism ,
還是指 Process 。
(這個討論串已經把兩者混在一起了)

如果是指 Parallelism ,
那麼一般情況下 HT 確實可以模擬出接近實體核心的效能,
如果是 Process 那跟 HT 就沒有半毛錢的關係了。

不過他有提到CPU,可能是在問平行架構,
但是"1赫茲可執行4行組合語言的CPU指令",
這我就完全看不懂了。

NEAL 2018-10-19 03:07 PM

引用:
作者stanleywang
這題真是怪阿,

兩者都出現很長一段時間了,我卻從來沒有想到要比較兩者,
因為這兩種東西是完全不一樣的,到底要怎麼比較呢?

Hyper-Threading是純硬體,一般人只需把它當成多一顆CPU就好了,
根本不用想太多,也不容許想太多。

而Thread 花樣就多了,
不過我也沒辦法確認 樓主說的 Thread,
到底是指 Parallelism ,
還是指 Process 。
(這個討論串已經把兩者混在一起了)

如果是指 Parallelism ,
那麼一般情況下 HT 確實可以模擬出接近實體核心的效能,
如果是 Process 那跟 HT 就沒有半毛錢的關係了。

不過他有提到CPU,可能是在問平行架構,
但是"1赫茲可執行4行組合語言的CPU指令",
這我就完全看不懂了。


嗯,我也不懂為什麼魔王兄會想比較這兩種不同的東西,我前文有說到,在CPU層級看不到Thread,Thread是由OS在控制。而Hyper Threading則是一種CPU上的硬體實作,目的是讓Multi-threaded程式或有多個Thread的軟體環境能有較佳的表現,它作法是在一顆CPU上實作出兩套暫存器,以及一套各自獨立的state machine,這就是Intel說的"兩顆邏輯處理器",讓作業系統以為有兩顆CPU可以利用,但其實還是共用一顆CPU的ALU/CU功能方塊,所以上層的軟體有多個Thread時,就能減輕不斷觸發Context Switch的效能減損,也能盡量提升功能方塊的利用率,提升效能。

其實不只我這麼說,因為魔王兄似乎不同意我的說法,於是我也Google一下,確認我是否有講錯誤導人,但是Stack Overflow也有大神是這樣解釋,而且也被審查選為正解:

https://stackoverflow.com/questions...-context-switch

Thread本身就純粹是軟體的概念,它的相對意義是Process,這不只是課本,在維基上也講很明。一個Process裡可以只有一個Thread,也可以有好幾個Thread,全看寫程式的人怎麼設計。用Thread的意義是為了讓OS可以去排程,讓這些Thread的運作可以不斷輪替切換(Context-Switching),因為切換時間很短很快,就會讓使用者以為這些Threads都是同時執行的感覺。

而SMT(Simultaneously Multi-Threading)或是Hardware Multi-Threading這些硬體技術的精神就是希望讓軟體層的Threads是真的同時執行,不用擠在一顆CPU上切換來又切換去,希望能提升效率,最簡單粗暴的方式就是多顆CPU,但是因為多顆CPU很貴,所以後來Intel才實現Hyper-Threading,原理就如前文的解釋。也因為Hyper-Threading始終是共用一顆CPU的功能方塊,在一些真正需要SMT提速的計算不夠用,所以才又發展了Multi-Cores的架構。

千萬別把Thread / Process / Hyper-Threading這些名詞全都搞在一起像玄學一樣,其實有認真去鑽研程式碼和電路方塊設計,印證學到的知識,就不會只是用讀課本的程度去理解這些事物,就算是考試也一樣,考卷只會寫老師或課本講的標準答案;相比還能舉出實際的程式碼,畫出實際的電路方塊圖,一步一步的分析執行過程的運作和變化,那分數也當然是高下立判。

而且學東西的意義在於為自己所用,討論和辨證都不錯,但拿來和考別人和PK是蠻怪的,真的要PK,我的作法是上國家考場或競賽擂台,爭到的名次也是國家或第三方認可的,實在犯不著在一個論壇嘴炮,不然就像對岸常講的:菜雞互啄。多難看:p

aya0091 2018-10-19 03:58 PM

我比較好奇

同製程、同架構、同時脈的Intel CPU

4C8T跟6C6T的效能會是誰好??

anderson1127 2018-10-19 09:05 PM

引用:
作者aya0091
我比較好奇
同製程、同架構、同時脈的Intel CPU
4C8T跟6C6T的效能會是誰好??


這裡面涉及OS job scheduling 以及programming 兩大區塊的問題
沒有一定的標準答案!!

不過,如果想問的是3D Game的效能, 我認為去看評測報告後,再行選擇!!

至於如果是我的選擇的話,我選便宜的!! 因為...目前的Hardware效能都已經過剩了 !!

Mozohung 2018-10-20 07:48 PM

4C8T,如果用來轉檔,大約比4C4T多大妁25-30% 的效能,就當作是5C5T好了,還是略遜於6C6T.但耗電量應該也少一些.一般應用其實差不多.現在的軟體和作業系統對多核心的優化,感覺十幾年來有進步一些.


所有的時間均為GMT +8。 現在的時間是10:53 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2024。