• 72

amd6核心或intel新cpu


Windwaker wrote:
教授自打嘴巴下不了台...(恕刪)

1. 我的程式已經貼上去了,請問哪一行在擔心?我的程式根本沒在擔心。合適的問題根本沒在擔心,不合適的問題那就要擔心。我已經證明寫程式的很多時後不必擔心,連有幾個核心都不必擔心。使用Library又怎樣? 寫程式的人根本沒在擔心。我表達的是寫程式的人沒在擔心,你要鬼打牆去哪兒?矩陣運算本來就是靠parallel_for最好搞定,難不成要脫褲子放屁用別的方式寫?

2. 我之前就說swith是想事情的方法,以剛才的程式為例,多緒的實際想法就是:
switch (size_t j)
case j = 1 to n
thread 1
case j = n+1 to m
thread 2
case ...
case j = x to size
thread x
因為外層迴圈彼此沒前後關係,所以立刻可以知道它可以被有效平行化。
而一般構思多緒的方式,大致就是以同樣觀念下去想:
switch (動畫)
case 音效
音效線程
case 音樂
音樂線程
case 物理計算
物理線程
case 人物移動
人物移動線程
這是想事情的方式,我一開始就有說明是想事情的方式,不是指程式碼。

3. 我有說"合適的問題"以現在的發展工具不必花太多腦筋就可以做平行化,難不成我用了不合適的問題? 還是我有說是全部的問題?

還有,以上這些東西,都無法說明你鬧的笑話不是笑話,它依舊是天大的笑話。

再來,你有一些說的是沒錯:
"對OS來說,只不過把不相關的Thread放在不同的核心上面 但是程式給OS平行的Thread才能讓多個核心同時執行"
也沒人說這件事情有錯。
錯的是你說了半天,依舊無法證明你之前鬧的笑話不是笑話。

你在玩的花樣就好像醬子:
因為會抓老鼠的叫好貓,所以白貓一定是好貓。
因為OS只不過把不相關的Thread放在不同的核心上面,所以是程式指派核心去執行而不是OS。

最後要說的是,別把大家當白痴然後自己不懂又說別人不懂,不然就不會那麼多人砲你。
公喵不帥, 母喵不愛. 公喵愈壞, 母喵愈愛. 不帥的公喵想要母喵愛, 就只好學壞.
我是小小的網民而已,
同意或反對我的意見,
只要說得通,有佐證,我都接受呀.

不管是證明你對還是證明錯,
對我都是有幫助.


大師,您對小弟的話可真言聽計從,說馮京就找馬涼、說張冠就找李戴,這是很好,但您累了嗎?又打到自己嘴巴了,請問沒有經過"神奇平行API"改寫的"多執行緒"程式、那個程式的所有執行緒會被作業系統的thread排程器通通分配到"同一個核心"執行,那句話的解釋在哪裡?這不是您的中心思想"假說"最關鍵的命題嗎?

我們來把您287樓引用的一堆翻成中文看看:

=======================================================
Windwaker wrote:
http://msdn.microsoft.com/en-us/library/ms682105(v=VS.85).aspx
Windows Thread的排程邏輯就在這邊
1.Save the context of the thread that just finished executing.
2.Place the thread that just finished executing at the end of the queue for its priority.
3.Find the highest priority queue that contains ready threads.
4.Remove the thread at the head of the queue, load its context, and execute it.
...(恕刪)

這段跟大師神奇的中心思想"假說"無關,跳過。

Windwaker wrote:
http://msdn.microsoft.com/en-us/library/ms684251(v=VS.85).aspx
In an SMP computer, two or more identical processors or cores connect to a single shared main memory.
...(恕刪)

翻譯:在同質性處理器/核心的系統上,二個或二個以上的相同處理器/核心,共用系統主記憶體。

Windwaker wrote:
Under the SMP model, any thread can be assigned to any processor.
...(恕刪)

翻譯:在這種同質性處理器/核心的系統上,執行緒可以被(排程器)指派到任何的處理器/核心上(執行)

Windwaker wrote:
Therefore, scheduling threads on an SMP computer is similar to scheduling threads on a computer with a single processor. However, the scheduler has a pool of processors, so that it can schedule threads to run concurrently.
...(恕刪)

翻譯:因此,在這種同質性處理器/核心的系統上,執行緒的排程與單處理器系統的情況類似,只是排程器現在手邊有一組處理器/核心資源可運用,可以將多個執行緒平行排程到多個處理器/核心上執行。(大師前面把這段的部分標紅色,用意為何?是要打自己嘴巴嗎?)

Windwaker wrote:
Scheduling is still determined by thread priority, but it can be influenced by setting thread affinity and thread ideal processor, as discussed in this topic.
...(恕刪)

翻譯:排程順序仍由執行緒本身優先度決定(譯註:例如作業系統核心服務的執行緒,會優先於應用程式的執行緒),但(程式)可以經由設定執行緒的親和性、以及執行緒本身的偏好處理器/核心,某種程度影響Thread排程器的決定。(譯註:例如在有HT的系統上,程式設計師希望執行緒能先分配使用實體處理器,再使用HT虛擬的處理器,以免造成部分處理器壅塞、部分處理器空閒)

=======================================================
大師您的英文閱讀有問題唷!您似乎誤認上面"setting thread affinity and thread ideal processor",是由排程器設定,錯錯錯!親和性是由程式本身設定請求之,作為排程器排程時的參考,但是排程器有否決跟最終決定權。


你去電影院劃位子時,跟窗口說你要中間偏後排的位子,窗口就保證一定會劃給你嗎?



您的中心思想"假說":沒有經過"神奇平行API"改寫的"多執行緒"程式,其所有執行緒會被作業系統的thread排程器一律分配到"同一個核心"執行,請問關於這種差別待遇的描述到底在哪裡????

而且下面這句打自己嘴巴的話您居然會自己引出來,您沒有看完微軟文件全文就引用嗎?微軟否定了您的中心思想"假說"耶:


"Under the SMP model, any thread can be assigned to any processor. "
"在這種同質性處理器/核心的系統上,執行緒可以被指配到任何的處理器/核心上(執行)"

大師,您又累了嗎?



如果你是在撈救命稻草,提醒你一下:哈利波特雖然經由強烈的主觀希望,順利被分類帽分到葛來芬多學院,但是對於其他人如大師來說,如果葛來芬多學生已經實在太多、或是當事人實在不是個葛來芬多的料、甚至是個爆竹,就算你心中再怎麼默念"葛來芬多、葛來芬多...",還是不會去葛來芬多唷!分類帽有最終決定權。

例子中,學院相當於處理器/核心,學生相當於執行緒,分類帽相當於執行緒排程。

sambad wrote:
1. 我的程式已經貼上去了,請問哪一行在擔心?我的程式根本沒在擔心


難道你的Parrellel_for的TPL Library不是你程式的一部分嗎
我知道TPL要自己Handle程式本身的多線程
重點根本不是有沒有TPL Library可以直接利用
而是程式本身要自己搞定平行運算的Thread

sambad wrote:
switch (動畫)

case 音效

音效線程

case 音樂

音樂線程

case 物理計算

物理線程

case 人物移動

人物移動線程



教授轉的太硬了
請問Switch的case裡面
不同的情況下
只有一個case能被執行
請問怎麼平行運算被一起執行?

真正的平行運算方法的思考模式
把一個Task分成不同的小Workorder
而不是這種Switch/IF這種只能發生一個case的思考模式

這也是屬於你天大的笑話的類別裡面嗎

sambad wrote:
因為OS只不過把不相關的Thread放在不同的核心上面,所以是程式指派核心去執行而不是OS。

最後要說的是,別把大家當白痴然後自己不懂又說別人不懂,不然就不會那麼多人砲你。


程式沒有指派足夠的平行Thread來給多核心
OS根本沒法把這些Sequential Thread同時放在多核心上面
這個你自己的For_Parrellel Library裡面的Scheduling寫的很清楚我也貼過了

說實在的,這個版上砲來砲去
除了教授你用了TPL在你的程式還天真以為OS會自己分配平行線程
就是Ycweng這個以為多線程就是支援多核心的保證
剩下的大概只是一知半解
不過真理越變越明的
到現在也就知道誰對誰錯


ycweng wrote:
大師,您又累到打自己...(恕刪)


旁觀者路過

其實我覺得w大想表達的應該是非平行的執行緒同時只會有一個在單一核心上執行
所謂的分配到"同一個核心"應該是語意上忙中有錯

是說稍微看了一下這個討論串的核心問題似乎是在於
w大認為能支援多核心的意思應是程式藉由平行化之後應該要取得顯著來自於"運算"時間縮短的優勢
而yc大則認為支援多核心的意思應該程式本身便包含多執行緒,只要在多核上面能取得節省context switch或是降低response time等好處(或沒好處)均應為支援多核心的程式

另外sam大的該程式碼小弟認為似乎的確說服力較為薄弱了點
畢竟矩陣運算為很簡單便可被平行的程式。
而目前以小弟所知學界和業界應該並沒有普遍認為寫平行程式大部分都可以透過這樣簡單的模式來平行
我想這樣的說明的確無法解釋如果平行的方法這樣簡單,為何大部分的程式並未成功的將運算的部分平行以縮短執行時間

一點淺見

ycweng wrote:
排程順序仍由執行緒本身優先度決定(譯註:例如作業系統核心服務的執行緒,會優於應用程式的執行緒),但(程式)可以經由設定執行緒的親和性、以及執行緒本身的偏好處理器/核心,某種程度影響Thread排程器的決定。(譯註:例如在有HT的系統上,程式設計師希望執行緒能先分配使用實體處理器,再使用HT虛擬的處理器,以免造成部分處理器壅塞、部分處理器空閒)


你這些講的都是平行的Thread或是Thread來自不同的Applcation
前面講過OS的動作就是把這些Thread分配在閒置的核心上
你要資料也給你了

現在講的乃是沒有平行Thread的多線程軟體

我應該直接問你
一個程式沒有平行Thread只有Sequential Thread既然是Sequential
請問怎麼樣可以同時讓OS可以分配超過一個Thread到不同的核心哩?

這應該就很清楚解釋為什麼多線程不是支援多核心的保證

Windwaker wrote:
你這些講的都是平行的...(恕刪)

我已經請你清楚定義 "sequential thread" 跟 "平行thread" 這兩類不見諸於文獻的名詞再來討論了,也跟你講過不要拿.NET framework這種基於虛擬機的執行環境的例子來充數!!syntech大,也點過你幾次了?

現在:請問沒有經過"神奇平行API"改寫的"多執行緒"程式、那個程式的所有執行緒會被作業系統的thread排程器通通分配到"同一個核心"執行,那句話的解釋在哪裡。這不是您的中心思想"假說"最關鍵的命題嗎?


irisshinra wrote:

是說稍微看了一下這個討論串的核心問題似乎是在於
w大認為能支援多核心的意思應是程式藉由平行化之後應該要取得顯著來自於"運算"時間縮短的優勢
而yc大則認為支援多核心的意思應該程式本身便包含多執行緒,只要在多核上面能取得節省context switch或是降低response time等好處(或沒好處)均應為支援多核心的程式

另外sam大的該程式碼小弟認為似乎的確說服力較為薄弱了點
畢竟矩陣運算為很簡單便可被平行的程式。
而目前以小弟所知學界和業界應該並沒有普遍認為寫平行程式大部分都可以透過這樣簡單的模式來平行
我想這樣的說明的確無法解釋如果平行的方法這樣簡單,為何大部分的程式並未成功的將運算的部分平行以縮短執行時間



很好的懶人包
我對yc的主要意見
如果只是節省context switch或是降低response time的話
該程式的負載如果超過單一核的話
沒辦法用運超過第二個核心的
就像是之前Sp2004的例子

這種程式是沒有辦法享受到Bullldozer八核的效能【終於回到主題了】
irisshinra wrote:
其實我覺得w大想表達的應該是非平行的執行緒同時只會有一個在單一核心上執行,所謂的分配到"同一個核心"應該是語意上忙中有錯
...(恕刪)

不是,他真的這樣認為,你仔細看他舉的Orthos 2004例子。

還有例如258樓:(還有不少,有空再找吧!)
Windmaker wrote:
我想我已經解釋了很清楚了
當程式只有多線程的時候而不是平行的
所有的Thread會放在"同一個"核心上
...(恕刪)

現在:請問大師沒有經過"神奇平行API"改寫的"多執行緒"程式、那個程式的所有執行緒會被作業系統的thread排程器通通分配到"同一個核心"執行,那句話的解釋在哪裡?這不是您的中心思想"假說"最關鍵的命題嗎?

大師對你自己上面的引用文、我的翻譯註解都沒意見?所以默認你又是拿明朝的尚方寶劍、斬清朝的官兒?....
ycweng wrote:
我請你清楚定義"sequential thread"跟"平行thread",也跟你講過不要拿.NET framework這種基於虛擬機的執行環境來定義!!


請問一下Sequential Thread/Parrellel Thread和定義和.Net Framework有關係嗎?

這種很基本的定義你不相信我可以看看Wiki或是MS都可以
http://en.wikipedia.org/wiki/Thread_(computer_science)

Sequential Thread就是執行完Thread A接下來執行Thread B才能到Thread C,因為乃是Sequential的
Parrellel Thread就是Thread A, B, C可以同一時間執行

問題就是平行的情況下Thread A, B, C可以給不同的核心執行【當然看核心數】
Sequential的情況下同一時間只能執行一個Thread自然就只能給單一核心
我會說大部分的情況下同一個核心,單純只是因為通常OS會希望下一個thread能夠用回上一個thread的Cache
實在沒有必要轉到另外一個不同的核心
但是否同一個核心並不重要,重要的是不可能會給第二個或是第三個核心"同時執行”

我實在搞不清楚你為什麼還要堅持說沒有平行Thread還可以同時給多核心執行

真的,多線程不是支援多核心的保證....

說實在的,我根本搞不清楚你哪邊還不懂,我講的應該很清楚了
  • 72
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 72)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?