電腦效能應用與安全研究室 Performance, Applications and Security Lab


我們的研究範圍很廣,從嵌入式系統、手機應用、一直到雲端計算、商務應用、資訊安全都有做。
我們的合作研究夥伴很多,包括聯發科、IBM、中研院、資策會,還有和台大、清大、交大的教授合組研發團隊
,包括高階應用處理器架構研究、虛擬化技術、異質計算、系統軟體等重要技術的研究與創新,我們很關切台灣人才與產業的未來。

2015年8月28日 星期五

計算的原理與實務

原本是回應陳維超教授談到的技術問題,不小心寫多了,乾脆趁此機會用實際案例來引申出來談談「電腦工程」中如何融合道理與實務的這個議題。

在往下看之前,建議讀者先看看陳教授的短文(https://www.facebook.com/weichao.chen.tw/posts/10153241768458152)。

陳教授在與業界人士聊天時,發現有個他覺得trivial(簡單基本到不行) 的觀念,對方竟然沒有想到要用來解決問題。

這種事在我們實驗室裡,每天都在發生,在我與業界的交流中,也時常出現。雖然「要花很多時間取得資料,不如重新算過一次」是個粗淺到小學生都懂的概念,但是真的有一大堆人不會活用。

以資訊科技來說,台灣的業界比較重視實務,但往往過於短視;學界比較重視創新,但往往過於理論,以致於產學界難有真正的交集,而學校訓練出來的學生有頗大的學用落差。

缺乏交集,自然缺乏活用知識和理論的機會和經驗。

以陳教授所舉的例子,「要花很多時間取得資料,不如重新算過一次」的道理很簡單,對於懂得效能分析實務的人來說,的確是很基本的,但對於不曾主動做分析和創新設計,只是利用或抄襲現成技術的人來說,很可能從來沒碰過。

所以雖然陳教授輕描淡寫地說這個很trivial,但要把簡單的道理用於複雜的問題上,是最難的事,但如果做到了,卻是最美的事,這就是所謂的simple is beautiful。

想到我當年在SUN工作的第一個任務,是分析與解決密碼加速器的效能瓶頸。我發現問題的根源是,設計密碼加速器的產品開發部門竟然認為「有了密碼加速器,所有大大小小的加解密工作都給它做就是了」,但是在實際運作上,資料量小的工作,根本不值得花時間送給它做。

這麼簡單的問題,產品開發部門幾位有經驗的工程師,折騰了好幾個月還搞不清楚,我這個菜鳥則是憑著一些常識,很快地幫助他們釐清和解決問題,結果成為SUN在密碼加速器研發上的重要人物,而這些工作,雖然用不到我的博士研究的專業,但用上了我在求學過程中的研究方法和活用知識的訓練。

早年計算能力相對低的年代,常常有用查表法代替計算,有空間換取時間的做法,來增進效能。知道這個的人應該不少,我在高中時就寫過這樣的程式碼,那個時候個人電腦的CPU可以在一個時脈週期中讀取一筆資料,但是要做乘法計算則需要幾十個時脈週期,所以用查表的比較快。除法和超越函數更是如此,而現在還有一些低階的處理器,還在用這些技巧。

後來當CPU時脈提高,但記憶體存取相對變慢的時候,我們必須反過來減少記憶體存取的次數,所以高階處理器 cache越來越大,做data prefetch來提早取得資料、使用multithreaded architecture來容忍資料遲到的狀況、使用壓縮的方式傳送資料,甚至還會用speculation的方式來猜測資料是在哪裡和是什麼。這些在計算機結構都有講,但是沒有實際用過的話,可能聽過就忘了。

在多處理機和多核心電腦上,存取資料的問題更嚴重,除了時間延遲和頻寬之外,還要考慮到尖峰時刻塞車的問題,所以有時候簡單的工作,就可能就不分工了,要不就由一個CPU代表去做,做完把結果給大家,要不就大家都做同樣的事情。前者多半在有共享記憶體的多核心處理器上看到,後者多半在分散式的系統看到。

到了異質計算的年代,CPU和GPU的分工,更需要好好地做效能分析。因為傳統GPU和CPU不共享記憶體,透過較慢的PCIe Bus交換資料,所以有些工作CPU自己做比較快。另一方面,當GPU有超過2000個核心的時候,用重複的計算(redundant computation)取代資料交換,也是常見的事。

更進一步談巨量資料,為了節省資料的取得時間,我們往往費盡心思。我們花時間將資料和計算擺在同一個地方,做所謂的data computation co-location,將重複出現的資料利用data deduplication技術節省儲存空間和取得時間,用一堆目錄(indexing)讓資料可以快速被找到。

當計算機結構有所不同時,優化的策略可能會隨之而變,不能食古不化。但原理雖然簡單,系統和實作技巧卻越來越複雜,軟硬體優化的機會越來越多,可惜能夠真正連通理論和實務的人則越來越少。

以上這些技術,講起來很容易,但在實作上,必須先搞清楚運算和資料的相對位置、距離、時間先後、相依性、數量等等,才知道該如何取捨。但很多人根本不會用效能分析工具,就在那邊瞎子摸象,隨便亂講,這時候要解決問題,就需要瞎貓遇到死耗子的運氣。

所以這些看似trivial的道理,很多人即便知道,沒有經驗,也難以活用,就會一直卡在那裡。

有些公司主管不知道是天真還是邪惡,說是找我們去談計畫,實際上把這類問題丟出來考驗我們,我們花了時間了解問題,把類似的結果告訴他們,卻被認為「沒什麼了不起」,變成了免費的諮商。

很多公司也不懂學生所受訓練的價值,因而學生自己也不懂。我們紮紮實實訓練學生做系統研究,就是在遇到複雜系統的疑難雜症的時候能夠快速有效的對症下藥,不然你要摸索到幾時?

這個跟找名醫看病的道理是一樣的,你身體好的時候,不愛聽醫生的話,等到身體出問題了,才到處打聽名醫,如果名醫兩三下就醫好了,有些「奧客」可能還會覺得沒什麼了不起。

所以之前科技代工業很旺的時候,就像身體好卻習慣差的人,根本不希罕我們做的東西,部分學生也覺得辛苦學這些到業界沒有用。現在退潮中,就可以看看誰沒有穿褲子,有沒有研發創新能力的公司和個人,外界會看得越來越清楚 -- 拿出真本事,驗證真功夫的時候到了。

沒有留言:

張貼留言