一直好奇一件事, 在電腦上, 程式不一定可以同時在多核心上面跑.
手機其實也算是一台電腦,所以原理都是相同的。
可是在手機上, 一個程式可以同時使用數個核心嗎?
是的,由寫程式的人決定。
是可以同時使用到8核嗎?
不一定,又是由寫程式的人決定。
還是最多同時使用到 2核.
不一定,終究是由寫程式的人決定。
網路上找了一下, 只發現多執行緒的編譯, 要多核心就得改程式把執行緒拆開來分到不同核心去, 然後等各核心同步完成運算. 很好奇手機程式真的都有改嗎? 會不會有的程式只優化到能二核心, 有的優化到四核心而已.不見得能用到八核.
那這麼一來, 執行單一程式時. 單一核心多執行緒其實比多核心還快了. 難怪A7只要2核心.
大多數程式的寫法的確沒有辦法利用多核心。只有大型程式才會花心思去跑多核。一旦考慮用多核,通常會用比較彈性的做法,不會特別針對幾核心去寫。而是寫出一個程式,可以自動在單核心至多核心間自動優化。原理沒有想像中的難,最主要是要能把工作分開。
例如一個程式要算由1加到100的總和. 單核的寫法就是簡單一個迴圈解決。多核心的方式就是把工作分開,例如若偵測到系統有4核心,就臨時把工作分成4份。
工作1,算1加到25
工作2,算26加到50
工作3,算51加到75
工作4,算76加到100
作業系統會自動把它們分配到各核心去執行。等4個小工作都完成了再把它們4個相加就得到最後結果了。這樣可以比單迴圈的版本快了接近4倍。
(這個例子只是舉例說明原理,請不要說有公式可以算,或是執行緒的負擔比分工的好處大等次要問題。)
內文搜尋

X