• 72

amd6核心或intel新cpu

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



這個在 309 說了,有人做了實驗.

他的"sequential thread"應該指第一篇的情況,也就是讓thread必須依序執行的情況.

第二篇,分成多個執行緒看看如何塞滿CPU.
實際上,程式並沒有做甚麼指定cpu的動作,而是分成多條 thread queue,
結論大致上是1核1緒的效率最佳.
這個是大部分人認知的多執行緒執行情況.
當然真實世界不會這麼美好.

第三篇,改用tpl時,實際運作的最佳情況也不是1核1緒,而是動態的調整緒數.

當然這是在.net上頭小規模測試的情況.
而且可能需要借助其他工具才能觀察到底是怎麼塞滿cpu的.


irisshinra wrote:
旁觀者路過其實我覺得...
另外sam大的該程式碼小弟認為似乎的確說服力較為薄弱了點..(恕刪)


關於那程式碼我一直要表達的是: "合適的問題"很容易平行化, 且不需要高深的什麼東西就可以完成. 那個例子誰都可以做, 只要學parallel_for每個人立刻都能用簡單的方式利用多緒程式解決他手上合適解決的問題. 矩陣本來就是合適的問題, 其它像是我們經常用黎曼和解積分也常用這個方法. 我針對我的命題以及別人在問我寫程式要不要考慮有的沒的這件事情來回答, 所以用這個例子. 而且那個例子很明白的表示, 我沒有做任何的事情, 照樣可以輕易的把多個核心塞滿, 不必程式去指定哪個核心跑哪個thread.
平行化這東西能討論的很多, 但若拿出來都是人家要學很久的東西來討論的話, 不但多半的人看不懂且對他們自己在做的應用無益? 既然拿程式碼舉例讀起來要費工, 何不舉一些對大家有益的例子?
公喵不帥, 母喵不愛. 公喵愈壞, 母喵愈愛. 不帥的公喵想要母喵愛, 就只好學壞.
亂入一下
現在在爭論的事可以這樣表達嗎
假如一個程式有4個Thread暫稱1 2 3 4且未平行化
今天把這程式在一個四核處理器上執行

1. 多數人認為四個Thread會被OS平均分配到四個核心
但不能"同時"執行
2號必須等1號執行完才執行
3號必須等2號執行完才執行
依此類推
所以結論是儘管四核心但效果跟單核一樣
都必須一個一個來

2. 某位大哥則認為四個Thread不會分到四顆核心
完全由同一顆核心執行
順序就是1→2→3→4
其他三核完全沒事做
結果跟第一個情況一樣

可我認為某大哥之前的論點有一矛盾處
如果要平行化
程式應該不需要"指定核心"才對吧
也就是程式不須知道你是幾核心的系統
只要讓這四個Thread變為獨立
不需要其他Thread的運算結果的資料也可運算即可
這樣四個Tread就可被"同時"執行
至於分配給那些核心執行那些雜項就交由OS處理

我是個外行人
不知道可不可以這樣理解?
Windwaker wrote:
請問一下Sequential Thread/Parrellel Thread和定義和.Net Framework有關係嗎?
...(恕刪)

大師,您可以再健忘一些.....

請問下面那個你自己張冠李戴引用來"說明"Sequential thread"跟"平行Thread"的連結,不是來自關於.NET framework的微軟網頁嗎?還是你根本沒看抬頭那個".NET framework 4"、找到就用?

Windwaker wrote:
ycweng wrote:
你所謂的"Sequential Threads"的定義為何?是假設一件事切成thread A跟thread B,但是thread B必須等待thread A的執行結果,才能繼續執行?

不是平行Thread就是Sequetial Thread啊
http://msdn.microsoft.com/en-us/library/dd537608.aspx

' Sequential version
For Each item In sourceCollection
Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))


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

ycweng wrote:
請問下面那個你自己張冠李戴引用來說明Sequential threads跟平行Thread的連結,不是來自關於.NET framework的微軟網頁嗎?還是你根本沒看抬頭找到就用?


我知道啊,我只是問.net執行環境這和Parrellel/Sequential的定義有關係嗎
難道今天Array, Function這些程式設計的定義難道因為.net有 CLR就改變嗎

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


如果說是〝單一核心〞就一定成為定律的話
我覺得沒問題啊
重點只是多線程未必能完全支援多核心而已啊

這樣我們就回到〝現在大部分的程式都不支援多核的效能〞的一開始討論啊
而你說Multi-thread程式大把,應該每個都支援多核啊.....

ycweng wrote:
大師,您可以再健忘一...(恕刪)


yc大
上面w大也說了他所謂在同一個核心上執行
只是單純認為scheduler為了cache affinity應該會直接在同一核心上執行
要不然事實上是不是同一核心也非重點
david210 wrote:
可我認為某大哥之前的論點有一矛盾處
如果要平行化
程式應該不需要"指定核心"才對吧
也就是程式不須知道你是幾核心的系統


程式不需要知道你是幾核心的系統
但是如果你的程式支援四核的系統
你就一定要有四個平行Thread
當然程式不需要硬性指定CPU A跑Thread A
但是程式需要有足夠的平行Thread 至少和支援相同CPU核心數量相同

如果要支援八核,你只有四個平行Thread
另外四核的資源該程式就運用不到
Windwaker wrote:
我知道啊,我只是問.net執行環境這和Parrellel/Sequential的定義有關係嗎
難道今天Array, Function這些程式設計的定義難道因為.net有 CLR就改變嗎
....(恕刪)

當然....張冠跟李戴兩個人,都有兩個眼睛.....

給你一段我私訊所接到關於你回文"手法"的評語:
======================================================
尤其是他總是把對的和錯的混在一起,然後你指出他錯的他又把對的拿出來變成他沒錯,真是昏倒..ORZ
======================================================
你現在又提到Array、Function,就是想用相同方式迴避問題......

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

如果說是〝單一核心〞就一定成為定律的話
我覺得沒問題啊
重點只是多線程未必能完全支援多核心而已啊
....(恕刪)

我要"證明",不要問東答西。
irisshinra wrote:
只是單純認為scheduler為了cache affinity應該會直接在同一核心上執行


這個部分在Microsoft® Windows® Internals 有描述.
雖然主要因為cache affinity會傾向讓同一個核心去做,
這不是絕對條件.
符合其他條件時,還是有機會交給其他核心去做.

"但是否同一個核心並不重要,重要的是不可能會給第二個或是第三個核心"
這一句話在某些情況下會發生錯誤.
我還是不懂.Net CLR怎麼會改變Parrellel/Sequential Thread的定義
我的感覺你只是找我麻煩而已

ycweng wrote:
我要"證明",不要問東答西。


我可能沒法證明我是對的
只能證明你是錯的

我不能證明是否Sequential Thread是跑同一個核心
但是我可以證明他絕對是只在一個核心上面跑
這個可以證明Sequential Multi-thread只能在一個核心跑
所以可以證明你說〝Multi-thread沒有平行線程自己會利用多核的資源〞是錯的

當然這是討論版,不是論文發表
我們可以討論怎麼樣可以證明更多事情的真相
但是你那種錯誤的言論就記得收起來
  • 72
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 72)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?