Windwaker wrote:
程式根本看不到底部的硬體所以不會拒絕執行
對程式來說他不知道有幾個核心
光讀CPUID 可以獲得很多資訊
要知道環境並不是很困難的事...
Windwaker wrote:
這也就是支援八核心的程式
放在四核心,三核心,二核心都是一樣可以跑的
但是支援四核心的程式
到八核心上面就只能用到四核.(恕刪)
Windwaker wrote:
OS處理的是硬體資源的排程分配
但是把工作切個多少個核心
也就是平行Thread的數量來支援的核心數量
這部分是程式決定
...(恕刪)
Windwaker wrote:
也是你所謂的Task Manager的多Thread的程式
但是他明明就不支援多核啊?
因為這七個線程
這就是Sequential Thread啊
所以專案的七位成員只有一個能執行啊
所有七位成員都屬於Sp2004的Process只能用到一個核的效能(無法超過50%)
所以你現在能不能了解
為什麼支援N個數量多核心
需要N個數量的平行線程啊
...(恕刪)
Windwaker wrote:
不是平行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))
umts wrote:
如果把這句話改成"到八核心上面就只能用到相當於四核的效果"會不會更好?
假定OS排程器把thread均勻的灑在八核心,只是thread相依性,相互Idle等待結果,只達成50%的利用率,有沒有發生的可能呢?若有,如何一口咬定thread只會被標定的四核心上執行,其餘的四核心一定在旁邊發呆睡覺,置身事外呢?
umts wrote:
"不支援" 的定義是等價的處理效果沒增加,還是沒使用到該處理核心,在整個討論串一直有模糊地帶,真是個災難!
syntech wrote:
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
這個則是新增到 thread queue 的順序是無序(平行)的(可能有序,可能隨機,但順序不一定為循序,看演算法而定),
可能是 Tn,T10,T1,T8,Tn-6,..... (每次執行皆不同)
當然排程後,按FIFO 原則,結果大致上也會是 Tn,T10,T1,T8,Tn-6,..... (每次執行皆不同)的順序.
並非用來說明會使用到幾個cpu 核心的情況.
ycweng wrote:
再提示一次:要證明你的命題,最一搶斃命的方式就是舉出Windows thread排程器的排程邏輯,如果你的命題成立,這麼重要的排程邏輯,不可能你這幾天猛力Google,卻找不到相關資料,還找到Task Scheduler這個專門進行如星期一重組、星期二備份...等管家工作的工作排程器身上去、兼把異質性核心處理器扯出來......