2011年1月6日 星期四

多核心時代真的到了

近二個月收到一些訊息。
有DSP開始推展多核心,有在賣八核心的DSP。
也看到了Forth也出了144核心的chip。
而Bee自己在玩OpenMP及CUDA。
ARM也出了不少雙核,只是Bee沒有接觸到。
這些都是多核心的處理器。且隨手可得。那接下來呢?
當然就看軟體如何去應用了。

不過工程上遇到的第一個問題會是如何去設定編譯器(Compiler)。
這個一直是一般工程師很少去注意的問題。大部分都是安裝好就不會去動了。
如果您像Bee一樣是嵌入式系統工程師,那就必須去面對Compiler相關的問題。

主要的問題是,主流的語言都是由單核心發展起來的。
所以要控制多核心時,就要調整Compiler的設定。可以由語言內或語言外的設定去調整。
但是Bee常常看到網路上有一堆人在問,為何設定不起來。
沒辦法,大部分人在學compiler都是一知半解。更何況是半路出家的工程師。
有許多在使用嵌入式系統的工程師都不是學軟體的。
Bee感覺到從機械來的人也不少,可能是因為從事和機器人相關的,所以才會如此感覺。

好了回歸主題,多核心時代到來。要做的準備工作就是:記得準備好使用工具,把Compiler學好點!

2 則留言:

  1. 很好,是該FORTH上場的時候了。
    先將問題簡化一點,FORTH的compiler完全可以任由使用者操作指揮,也因此讓我只寫六頁程式就設計出數學計算系統,但只證明了我完全操控了compiler,並沒有讓compiler辦到指揮程式使用多CPU的功能。
    你已讀過多工(multi-tasking)資料,在FORTH系統中不難設計,搞清楚後你就會發現,系統根本就只靠掌握單一個可以設計出多人共用系統的UP(User Pointer)指標,就達到了目的。這個指標旁邊第一個執行碼,決定此工是該睡著還是該醒來執行,接著就是幾個此工專用的指標變數,其中包括自己的兩個堆疊指標。每一個工作程式(task)結構都一致統一成這樣,多工就跑起來了。根據這個原則也能實現一個FORTH系統使用多個CPU的compiler操控.
    把問題進一步簡化,何不就把原本就可以獨立執行的單工(single task),由interpreter配合compiler交給不同的CPU執行,如此一來,compiler並不一定要完全負起編譯出只能使用不同CPU的責任,卻達到了能夠平行處理的能力。
    工間切換只能由唯一的主CPU掌控,其他各工都能由它來分配出去,包括可以使用不同的CPU卻能執行完全相同的compiling,至於分工原理,你可以自己想出一套統一固定的規矩自己設計,這才是關鍵。
    另外,FORTH要執行assembler指令時很麻煩,要先處理出CPU內被FORTH用掉的暫存器後才能執行,多工機制配上多CPU實際硬體結構,就不會有這種額外負擔了。組合語言寫成的低階指令,可以專門指定一個CPU來執行,win32Forth中已經將此類碼組譯到特定區域,具有未來跑多CPU的眼光。
    系統與外界溝通扯到硬體的程式,如HD的讀寫、多個顯示幕的獨立作業、端口資訊(例如網訊)的傳輸,都能改成必須為一工化的(taskrized)程式,FORTH在40年前就已潛伏了這種功能,想跑多CPU的FORTH系統離你很遠嗎?從eForth32的多工範例開始,自己先搞一個只跑兩個CPU的系統試一試。
    我年紀大了,做這些事情已經沒有意義,只想研究自己的數學計算,是數學多而FORTH少。所以,該輪到像你這樣有希望的年輕人了。你若願意做,就大膽下手,有問題我們可以討論,我盡量教你,因為我看你將來可以很有作為,但願它日能夠以你為榮。
    抱歉,taskrized是我臨時發明的用字,你不必去查字典,可是,它可能是能跑多CPU之FORTH系統的關鍵觀念。
    曾慶潭Ching-Tang Tseng於紐西蘭
    [版主回覆01/08/2011 18:27:49]在X86上自己組機器碼還有機會。
    不過現在ARM Cotrex系統已經不公開機器碼,最多使用組合語言。
    所以Forth在ARM Cortex上實現的路已經斷了。
    另外在CUDA也有一樣的狀況。
    所以在這些多核心系統上面,Forth已經插不進去。
    導致我只能用C在多核心系統上。
    情勢所逼,使用Forth的機會越來越少了。

    回覆刪除
  2. 不能取得機器碼資料,還想搞多CPU的FORTH,確實形成困擾,而且還是一股潮流,這也難怪FORTH在多CPU的發展路途上只能靠自己了。
    軟體系統構想,只不過是整件事情的一部份,鎖住CPU存取記憶體機制的方式如果都無法得知,多CPU系統就別想自己設計了。
    現代作業系統內的FORTH,連執行硬體I/O都被限制的難以忍受了,將來如果連機器碼都不准碰,確實就不用發展FORTH了,時代趨勢如此,也只好接受。
    為了生活,不值得硬碰難以發展的東西,面對現實,跟著時代要求前進,這也是無可奈何的事情。
    也許等將來大公司淘汰競爭落定後,再跟著附屬發展,日子會比較好過吧,您底子不錯,好自為之。
     
    曾慶潭Ching-Tang Tseng 於紐西蘭
    [版主回覆01/09/2011 15:33:56]我在想,要是未來電腦要是全上雲端,那Forth要如何跑?
    該不會斷線就沒得玩了!
    其實我是知道要如何走下去。就用C改做VM的方式去實現。

    不過既然是用C,先裝Lua還比較快。
    Open Source有得用,就懶得自己寫。
    這個只能說,時代不一樣了!

    回覆刪除