2011/9/25

Building Chromium Windows @ Windows 7 64Bit

http://changyy.pixnet.net/blog/post/29627673-building-chromium-windows-@-windows-7-64bit

great!

資訊學院的30門課 - computer graphics

computer graphics這一門課算是我比較認真的一門課,也是85+認證一族。

課堂一開始,就一直在教畫直線,有人會說,劃直線不就是給個起點與終點,然後呼叫隔壁老王(API),請他幫你油漆就好了嗎?但是如何內插中間的點,而且中間點會有小數,但是pixel位置都是整數,如果給定一個xy線性方程式,要以畫點的api劃出一條線,是相當容易的,但問題是,這個api用了多少次浮點運算,使用了多少個浮點數,這非常的重要,因為FPU比整數運算單元慢很多。學到最後,出社會也不要叫我們寫一個畫直線的api。但是卻很深刻地體認到,程式要跑得快,請注意浮點數的使用,數值程式要跑的正確,請注意浮點數的精確度。畫矩形就跳過去不講。

再還是畫直線,只是畫的是平滑直線,還要交project,沒有修這門課,我永遠搞不懂,大二時我數學系同學問我,為甚麼WINDOWS95的字都糊糊的,大二的我真的答不出來,還敢號稱是資訊系的。原因就是向量字型開啟平滑(ANTI-ALIASING)去鋸齒功能,而且當時解析度很低,例如640X480,邊緣捕的灰階點,看起來就像墨水暈開了,這問題後來怎麼解決的,不用解決啦,面板尺寸變大後,解析度拉高就看不出來了。回到PROJECT,課本只給了一個錐型的微積分方程式,然後老師跟我們說參數把離直線的垂直距離代進去就得到了灰階值。哭了,用C語言怎麼時做一個積分,而且距離直線的距離都是浮點數,也不能用手算後,讓程式查表,老師也沒教。念過數學系的我,這就是我的責任了,答案就留著明天講吧。

資訊學院的30門課 - compilers

第一發會講compiler,是因為昨天去聽了jserv大大在高雄的分享,Android 圖形系統 -- 設計與實做分析 (http://blog.linux.org.tw/~jserv/archives/2011_09.html),真的讓我感觸良多,很多人說資訊科學領域很多教課書上的內容用不到,我覺得不是用不到,而是沒有讀透,或者是工作領域上沒有關聯,但在業界,絕對都有它應用的所在。compiler就是我沒有摸到邊的一門課,今天特別把教課書拿出來,利用超商便當微坡的時間,懺悔了三分鐘。

修compiler最主要的好處在於,這對於開發一個新系統,或者在有限的資源必須開發高計算能力的軟體時,如何選用適用的程式語言,這就很重要,當然還有一門課叫作Programming Language。也才能了解到以native code與vm架構所跑軟體的不同。

大部分的創新與創意,並不是來自偶然,而是不斷的堆砌背景知識,觸類旁通之後的產物。這也是我在工作之餘,還是要吸收許多與工作幾乎沒有甚麼關連的IT知識的關係。

當然跟這個講題最有關的課還有,computer graphic與embedded system。

資訊學院的30門課 - 總綱

電子計算機程式設計
作業系統
數位系統導論
軟體工程概論
物件導向程式設計
資訊專題
電子電路學
網路與通訊概論
計算機導論
機率論
程式語言
電腦動畫
系統程式
資料結構
線性代數(2)
微積分(1)
普通物理學(1)
以上是85+

集合論
編譯器設計
資料庫系統
演算法
計算機結構與組織
數位系統實驗
線性代數(1)
檔案結構與管理
以上是75+

普通物理學實驗(1)
電子電路實驗
微積分(2)
等候理論
普通物理學實驗(2)
普通物理學(2)

以下是研究所課程
圖型識別
人工智慧
網路程式設計
Inerternet程式設計
高等視窗程式設計
嵌入式系統
電腦視覺
多媒體網路

2011/9/21

雙核ARM多核架構

在單核時代,Cortex A8架構是絕對的主流。作為ARM官方設計的產品,雖然Cortex A8和Cortex A9都基於ARM v7指令集架構,但是它們之間依然有很多的不同點,其中最重要,也是用戶最能感覺到的,是一項叫做亂序執行的功能。雖然Cortex A8和Cortex A9都支持同時執行兩條指令,但是只有Cortex A9支持亂序執行能力,這個功能究竟是什麼意思?
我們知道,計算機程序,都是由一條一條的指令組成的。這些指令有很多種功能,有的是把數據從一個地方復製到另一個地方,有的是做數學運算,有的負責判斷某一個條件,有的負責從一處跳轉到另一處。編譯器會把所程序員寫出的程序編譯成一條一條順序的指令,就像電器的使用指南一樣,讓處理器遵照它去做。為了方便理解,我們假設一個程序的內容是做一份考試卷,執行的過程是先做完選擇題,再做完問答題;做選擇題的條件是要有鉛筆去塗答題卡,而做問答題的條件則是要有鋼筆去寫答題紙。
如果你忘了帶鉛筆,那麼為了完成考卷,就必須要等到鄰座的做完了選擇題,你找他借來鉛筆,才能繼續自己的考卷,這樣就耽誤了時間。對於一顆標準處理器而言,很多時候都會遇到這類"沒有帶鉛筆"的情況,比如需要訪問的數據在內存裡,這就需要處理器通知內存管理器,讓內存管理器去把數據調入處理器,才能繼續執行這一條指令。由於處理器內部的時鐘延遲是納秒級別,而內存的運行頻率則有數十納秒的延遲,兩者之間差了許多倍,因此處理器一般需要消耗很長的等待時間,才能繼續開始工作,最終的結果就是性能下降。

這時候,亂序執行就派上用場了。一個程序的指令都是有嚴格的邏輯順序的,但是所謂的亂序執行,就可以打破這種原本的指令順序,在邏輯允許的範圍內以一種新的順序去執行程序。如果繼續用考試的例子,那就是這樣:
http://www.evolife.cn/html/2011/60967_2.html
那麼回頭來看看Scorpion核心。這個核心是高通在單核時代設計出來的,雖然也是基於ARM v7指令集架構,但在具體設計上屬於高通自己的實現,與Cortex A8相比有很多區別,其中最重要的就是高通為Scorpion核心引入了部分的亂序執行能力。所謂部分的,就是說在某些特定指令序列下,Scorpion可以實現亂序的效果,Cortex A8則不行。在單核時代正是由於這點,高通的處理器核心在很多測試中的表現都要稍好於Cortex A8,但是當雙核時代來臨後,大家都升級到了支持完整的亂序執行的Cortex A9核心,而高通則依然沿用老舊的Scorpion核心,當年的優勢就成為了現在的劣勢。

不僅如此,在純執行能力上,Scorpion面對Cortex A9也處於劣勢。根據高通提供的數據,同樣在1000MHz的頻率下,Cortex A8的執行能力為2000DMIPS(可以簡單認為是每1週期執行兩條指令),Scorpion比它要高一些,為2100DMIPS,但是Cortex A9則高達2500DMIPS,領先Scorpion接近20%。雖然高通試圖通過超頻20%的方式彌補這個差距,但是在單線程性能上,還是被競爭對手甩開了不小的距離,畢竟亂序執行的能力在很多應用中可以獲得的性能提升遠遠不是這200MHz的頻率可以彌補的,而且更高的頻率也會抵消Scorpion核心在省電上的特點。這點在後面的測試裡也可以看出來。
這就是為什麼ASMP目前採用的越來越少的緣故。雖然ASMP存在著設計簡單、結構清晰、耗電較低的優勢,但是由於性能不足,在PC領域從來都沒有成為過主流。而在移動領域,高通認為手機對於耗電的要求要大於性能,又希望可以在雙核時代繼續沿用單核時代的核心架構而不需要徹底重新研發,因此採用了ASMP架構。但是事實證明,高通在這點上可能有些耍小聰明之嫌,因為既然消費者決定購買雙核,那麼就一定是衝著性能去的,並且對功耗也已經做好了心理準備。


最近比較火熱的小米手機就選用了高通MSM 8260芯片,不過它自稱的"最快"還要打上一個問號

根據高通的官方數據,其1.2GHz的MSM8x60芯片組在滿負荷工作的時候,僅處理器部分就要消耗大約1.2瓦特的功率,這相對於單核時代不到500毫瓦的功耗而言,也已經是非常高的數值了,這證明了不管怎麼去省電,雙核都依然是雙核,既然如此,去追求雙核應有的性能顯然應該比如何去節省那麼一點點的電更加重要。換一個方面說,性能足夠強的話,系統可以以更短的時間完成任務,進而更多地進入低功耗的狀態。高通通過ASMP也許節約了一定的耗電,但是其最大33%的性能損失會導致系統多出33%的時間處於高功耗狀態,消耗的功率可能抵消甚至反超節約的,讓高通的如意算盤打空。

回到話題上來,可能有些讀者會認為,單獨來看,可能ASMP和SMP的差距也並不是那麼巨大,在之前圖中的極限狀況下也就相差33%而已,在實際運行中的差距很難達到這個數字。但是不要忘記,之前的文章中我們討論過亂序執行的重要性,那麼如果我們將指令等待也引入到之前的圖中,那麼會發生什麼情況呢?

在此,我們用灰色的方塊代表需要等待的指令,而等待時間​​為兩個週期。
這就是為什麼ASMP目前採用的越來越少的緣故。雖然ASMP存在著設計簡單、結構清晰、耗電較低的優勢,但是由於性能不足,在PC領域從來都沒有成為過主流。而在移動領域,高通認為手機對於耗電的要求要大於性能,又希望可以在雙核時代繼續沿用單核時代的核心架構而不需要徹底重新研發,因此採用了ASMP架構。但是事實證明,高通在這點上可能有些耍小聰明之嫌,因為既然消費者決定購買雙核,那麼就一定是衝著性能去的,並且對功耗也已經做好了心理準備。