2009年12月12日 星期六

CPU和GPU的合作,和大腦分工相似。

Bee是搞自動控制的,有一個問題一直是系統不好選擇的。到底是要用分散式處理器來做系統運算,還是用PC做中央控制。
分散控制也是有好處的,系統加元件是很快,因為關係單純,但程式不好改,要改許多處理器程式。
中央控制則是要經過中央管理系統,比較複雜,但程式好改。

這個問題到Bee開始處理影像相關問題,才知道要如何選。
原因在於影像處理無法使用分散運算的方式,若是真的要用,那訊息傳輸系統一定一直在傳影像相關資料,反而是一種浪費。

不過一開始Bee處理影像控制是想用FPGA來做,但它的記憶體不足,必須外掛SDRAM。
規劃到一半GPGPU興起,完全符合影像處理的需求,我就直接轉到GPGPU的領域去。
其實對於影像處理,其瓶頸在於運算相同,但資料量很大,平行計算才能有效解決。
但資料之間有相關,無法分開存放,要使用集中式的存放才能有效運算。

只是理解之後,Bee在想,一樣的工程問題,生物界是如何解的?
果然,大腦的發展,差不多和眼睛的出現是相關的。不是一個感光細胞的眼睛,是一群感光細胞組成的眼睛。

Sensor Array的出現,就是引入大量平行處理的開始。
在multi-sensor的狀況下,腦不需很大,大概就處理環境記憶和時間相關資訊。
但Sensor Array就不同了,記憶體需求量大,且運算力大增,才可做出分析。

在玩CUDA之後,發現並非所有的問題都合適GPU運算。在做統合判定的地方,CPU的運算更合適。
而且CUDA的異質運算結構,可以比OpenMP更容易去選擇運算結構。簡單的說何時要用CPU運算,何時要做GPU運算,是很容易分的。
但OpenMP不是如此明顯,但還是有平行運算的味道在。

最近看了"你腦內的兩個世界"
http://blog.xuite.net/unlimiter1001/unlimiter/29032221
了解兩個半腦的分工,更可以確定人工智能真的需要並行處理器及串行處理器的配合。
腦之所以二個完全分開,正因為腦的運算為成長型。右腦專精於平行處理,左腦專精於串行處理。二種迴路基本型式必然完全不同,所以分成二個腦來成長。
也可以說生物界對於平行運算和串行運算,沒有做出統一的解,所以長出二個處理器來做。
那Intel想用X86來做GPU,想必無法有效和真正的GPU來競爭。果不其然Larrabee的計劃真的失敗。

但並行運算就算是解了影像處理問題,但後繼串行處理的部分也是會增加運算量。原因是資訊也跟著變多,串行處理的資料及儲存也是要跟著增加上去。
所以左右腦的大小一直都是一樣,可見得二者重要性誰也沒有贏過誰。
意指,就算CPU和GPU就算合成一個晶片來做通用運算,二者電路的比例可能仍是很相近。那關於這個預測,要等GPGPU運算普及才會有人探討。

那對於現在,Bee的問題出在沒有收集過平行運算的運算法。因為才開始流行,資料不多。但對於軟體發展,這是無法避免的。
只能開始注意及了解相關的發展了。



沒有留言:

張貼留言