2010年1月18日 星期一

Odin笑談Google Nexus One(更新)

26/3/2010 這篇文章刊出之後,想不到有很多朋友來看。雖然我也找了不少的資料,而這些資料未必是錯的,問題是我在寫Odin笑談Android之後,發現自已忽略了更多的資料,例如Android最初並沒有NDK,以及Java的效能問題。雖然很多朋友客氣指責,但我很清楚我這篇文章寫的並不好、並不全面,但由於本文已經刊出一段日子,我也無意再作修補,這點請各位讀者務必注意。

這篇文章刊出不久,得到了不少網友的回響,他們的意見也給予Odin不少的想法。故此,我重新再整理了所有資料,把它變得更為完整一點。在這裡,我要向fixup、mindful、rick11c、rtpud、vaio等曾提出寶貴意見的網友致謝,更必須多謝chen_junru兄多天的指點,才讓我寫出這篇文草。

---------------------------------
坊間很多人都在談Google推出自己品牌的電話,會否威脅了一眾用Android的廠商?會否打算插手硬體市場?它的目的是甚麼?

上述這些問題,Odin都不會給你答案,因為如我果答你的話都是在瞎說,我沒有甚麼可靠的資料啊。而且,由於Odin還未把玩過實機,很多內容還未得證實。我們只有希望未來能借得實機,進一步測試Qualcomm Snapdragon的圖像能力,才能定案。



Odin給你的,是一些大家都看到的東西:Nexus One,以及它對Android的影響。因為用Google的說法,Nexus One是用來示範的,它的硬件就是Google心目中的一個Android硬標準,定價和介面就是它的軟標準。

Odin認為Nexus當中最重要關鍵是:
Qualcomm Snapdragon QSD8250處理器



為了讓不熟悉智能電話系統的讀者明白本文的重點,先讓Odin解釋一下嵌入式系統的特點:
1. 智能電話的系統,多採用SoC(System-on-the-chip)處理器設計
2. SoC是把各種部件(3G模組、Wifi、晶片組、圖像處理器等等狗屎垃圾)都塞在中央處理器(CPU)裡的集成設計
3. SoC所採用的處理器,除了Intel的Moorestown之外,絕大部份都是基於ARM公司研發的ARM架構的處理器。
4. ARM處理器與Intel的x86完全不同,不能安裝Windows,效能較弱,但比Intel的x86省電不少。
5. ARM公司也像Intel一樣,除了會造自家的Cortex處理器,也會收取授權費,讓其它公司自己製造(例如Xcale)。
6. 想更了解ARM是甚麼,也可以看看Odin的Odin笑談Netbook(二):Intel決戰ARM架構(上)
7. 它們圖像處理器以PowerVR最為馳名,它採用OpenGL作為編程介面(OpenGL是Microsoft DirectX的最大對手。)





1. SNAPDRAGON



很多人見到Google Nexus One,都被它那極流暢的3D介面表現所震懾,然而,即使如此,沒有人留意到它的速度之源:Qualcomm Snapdragon是甚麼來的。先前Odin與chen_jurun君的討論中,就找出了一些Qualcomm這個Snapdragon SoC處理器的一些重要特點。

1. Qualcomm沒有採用目前已經很成熟的ARM Cortex A8處理器(iPhone/Milestone/N900/Freescale i.MX515)
2. Qualcomm以往沒有研發ARM處理器的經驗,卻自行研發自己的Scorpion處理器
3. ARM Cortex處理器,與PowerVR圖像技術有很多的關連,但Qualcomm Scorpion處理器沒有這個關連
4. Qualcomm Snapdragon使用的是AMD Z430,它是Xbox 360的行動版本,而不是目前最多人使用的PowerVR系列。
5. Qualcomm的處理器採用單晶片設計(內建3G模組),能讓系統的耗電量再進一步減少。

Odin再找了一點資料,讓我們更深入了解Qualcomm Snapdragon的高速之源:嵌入式處理器Qualcomm Scropion。這個處理器基本上建基於智能電話常用的嵌入式處理器Cortex-A8(即iPhone/Milestone/N900內嵌的那顆),Cortex-A8最高頻率最多可以提升至1.1GHz,而Scropion則提升至1GHz,使它的頻率提升了比iPhone快了30%。另外,Scropion也加強了繪圖管道和SIMD指令列處理(都與多媒體處理有關),多媒體能力也加強了20%。

換言之:純料以處理器計,Nexus One的Snapdragon處理器,比iPhone或Milestone都要快20%-30%。



但實際上呢,我們再看看Nexus One的SoC處理器Snapdragon,與另外兩大SoC處理器的的比較。



Odin先解說一下:Polys/s是處理向量圖(Vector Graphic)的指標,指的是系統每秒鐘可以做到多少個多邊型。pixels/sec處理點陣圖渲染(Rendering)的指標,指的是系統可以在多邊型上面貼上多少像素的點陣圖。兩者都與圖像的立體畫面的美化有關,但相對而言,重視向量圖像處理,會略容易於提升立體動畫的流暢度(只要沒有太多渲染動作);但重視渲染處理技術,會略容易於提升立體動畫的表層像真(甚麼是渲染?你看看立體圖像上的肌理和反光就知道了)。





2. CPU VS GPU

從上述比較看,Snapdragon的運算能力當然會較佳,但有趣的是,它的圖像能力沒有我們想像中的高。AMD Z430的繪圖能力,全線輸給iPhone的PowerVR SGX 535,但如果與Milestone/N900的OMAP處理器(530)比較,Snapdragon的triangles/sec會較佳,但最弱的PowerVR SGX 520也有250M 3D pixels,Snapdragon輸了約1倍。對,Snapdragon處理器頻率較高,加上被優化了浮點處理能力(多邊型的計算需要浮點處理器),使多邊型的生成速度較佳;然而,AMD Z430即使有著統一架構的優勢,但仍然出現渲染能力嚴重不足,這很可能是因為繪圖核心內的著色器(Shader)不足所致--而著色器是GPU硬件加速的必備部份,而硬體加速,就是多媒體能力的必須部份。

Odin相信,Nexus One的運算速度很快,但多媒體能力僅僅是平平。

這也解釋了為何Nexus One的介面比Milestone或N900還要流暢,可以媲美iPhone,但仍然播不了1080p影片。Odin認為這種圖像系統,較適合於處理科學繪圖及介面系統,因為這裡兩種用途都不太需要渲染技術,但不太適合於立體遊戲和播片。換句話說:Nexus One就是使用介面殺人而已。但如果要認真處理大量并行運算數據,例如高清影片解碼、3D遊戲的向量圖渲染等等,由於欠缺優秀的硬體加速能力,它將不會有良好的多媒體表現。

故此,同樣用Qualcomm Snapdragon的HTC HD2以及Acer Liquid只能播放720p的高清影片(因為它內置了720p的解碼器),但1080呢?不要說是不順,就連播放也不能--但是iPhone 3GS的PowerVR SGX,能很順暢地播放1080p的!

我們知道,未來Qualcomm將會有新一代的雙核心Snapdragon處理器,頻率更創出1.5GHz的ARM架構新高、也可以播放1080p影片,也有著不遜於PowerVR的圖像能力,但然後呢?

在x86的經驗裡,我們知道Intel與AMD拼頻率拼了多年,結果只是兩敗俱傷。愈高的處理器頻率,只代表更大的功耗,和更高的熱量,這將會成為處理器效能的一個瓶頸。Snapdragon要單靠提高頻率來吃掉立體圖像,並不容易。另一個重點是:圖像處理很多時都涉及單指令流多數據流SIMD,它採用平行運算方式運作,這對於採用串列運算的CPU來說是十分不利的。利用擁有大量內處理器的圖像核心(GPU)進行硬體加速,會更事半功倍,功耗也較少,是更現實的做法。

Odin不知道為Qualcomm與PowerVR有甚麼恩怨,也不知道為甚麼Snapdragon沒有一個很突出的圖像處理器,也不知道Qualcomm會否為末來的處理器加入更佳圖像系統。但如果說Google Nexus One是一個指標,它似乎指了一條沒有硬體加速的道路:連Android的旗艦機種也沒有硬體加速,那軟件開發者還是否值得為Android開發多媒體應用程式?





3. ULTIMATE BROWSING MACHINE

如果說Snapdragon的多媒體能力只是平平,那為何Google會選用Snapdragon呢?
為甚麼Google會選用Snapdragon這種行動處理器的新手?
Odin認為原因是:

Snapdragon使Google Nexus One成為目前擁有最強網絡能力的智能手機。

對,iPhone的PowerVR SGX 535圖像核心的確很強,但它在上網時的作用並不大--因為瀏覽器暫時還不支援硬體加速,還是完全靠處理器。即使在瀏覽器捲軸時,iPhone仍然因為GPU的關係而較為流暢,但在多個測試裡,Google Nexus One仍然能展現出它有著比iPhone 3GS更快的網頁讀取速度。除了瀏覽器之外,這種情況相信也會在一些雲端應用軟件上出現的。

另一個值得注意的是Snapdragon內嵌了3G模組,這種單晶片的設計使Google Nexus One更低的功耗,它那7小時的3G續航力,比iPhone 3GS更多約2小時(iPhone採用的是SoC+獨立3G模組的雙晶片方案)。要知道iPhone雖然是上網速度並不算慢,但由於3G耗電量驚人,使不少用家都感到十分無奈;但Google Nexus One就足以讓用家更盡情的上網。

然而,這種做法有壞處嗎?有,但對Google來說,也許是好處。不少人都指出Google Nexus One的最大好處,是它讓Android擺脫了以往智能電話捆綁網絡供應商的銷售模式,讓智能手機"重獲自由",但更多人忽略了Google Nexus One把3G模組都內嵌於SoC裡,對,Google不會讓你自由選擇網絡供應商,但也不會讓你不能不選擇供應商,因為我們已經不能把通訊模組,像iPod Touch之於iPhone一般抽取出來了。Google Nexus One如果真的是Android的指標,那代表Google並不希望以後有Android機械,採用較低網絡依賴性的Wifi網絡方案。(我跟chen_jurun兄曾經懷疑,這就是Qualcomm要推出Snapdragon的由來,因為Qualcomm壟斷了絕大部份的3G模組專利,當它可以把3G/LTE模組綁在晶片裡,你就不能單單選用WiMAX/Wifi,總會碰一碰它的專利權,付一付授權費。看看iPod Touch與iPhone之間的價格差距,就可以想像到Qualcomm從中吃了多少授權費。)

當然,這可能與Google無關,但當然,我們也不知道Google Voice的野心如何,也不知道它與Qualcomm會否有甚麼協議。但Odin認為

採用Snapdragon將會更有效率地把Android的機器,綁在名叫"Google"的雲端戰車上。






4. CLOUD VS APP

事實上,Odin同意這個做法還是蠻合理的。Google不是硬件或軟件銷售者,而是網絡廣告商,它的業務都在網絡上,它要的是抄作雲端概念。上網,比一切都重要。遊戲?我不管。影片?我不管。最重要的是:我上網要比iPhone要快。否則,我還說甚麼雲端系統?Android賣了多少套,效能有多強,對我也沒有直接的利益關係,最重要的是:

更多人用Android上網,然後用Google的雲端應用,這樣Google才可以賺錢。

問題是:由於Snapdragon方案犧牲了圖像能力,結果會如何?就是犧牲了Nexus One的遊戲能力。可能你會覺得:我又不玩遊戲的,我才不在意。然而,大家要了解一點:在iPhone AppStore的經驗裡,最多人買的App都是遊戲,而且,AppStore裡的軟件數量中,排第一位的就是遊戲。Odin可以很負責任的告訴你:只有一個豐富的遊戲市場,才能吸引更多人光顧Android Market。然而,Android的旗艦Nexus One也不重視遊戲,那遊戲開發商還會重視Android Market嗎?沒有一大堆遊戲,就少了很多人光顧Android Market--開發商會感到苦惱的是:我開發的遊戲,Motarola Milestone可以玩(它的TI處理器,有PowerVR圖像處理器),但是Nexus One玩不了。那未來我開發Android的遊戲時,我要按著那種硬件標準呢?天知道未來是否只有愈來愈少的Android機械才可以玩我的遊戲,那我還用賣遊戲嗎?結果,Android Market還可以與AppStore競爭嗎?結果,遊戲商不積極開發遊戲,會使Android Market的人流減少,將直接衝擊其它非遊戲軟件開發商的意欲。

我們可以先看看Nexus One的遊戲能力:


我們看見Nexus One的運作都很流暢,這反映了Qualcomm Snapdragon的多邊形運算能力也不低。偶爾會Lag的包括Armageddon Squadron及ToonsWar這兩個較多實時渲染的遊戲。(留意背景較多的山和草,都是要用著色器在多邊形上填色)。事實上,Nexus One的那些遊戲的渲染技術實在不高,好像ToonsWar其實很多都只是做了Texture Mapping而已,但已經有明顯的lag機情況,這明顯是GPU的著色器開始應付不來。

然後是iPhone的Monkey Ball 2。


論流暢度說,iPhone 3GS其實也未必會更勝一籌,像Monkey Ball 2也是會有點lag(iPhone 3GS可以完全不會停頓),但iPhone遊戲的優勢是細緻度較高,半透明效果也更勝一籌,畫質好像與Nexus差了一個世代。

當然,我們還要考慮Nexus One的解像度較高。但也明顯見到,Android的遊戲編程也是受了很大的限制,渲染技術是Snapdragon的死穴,軟件商很難為個別機種(例如渲染能力較高的Milestone)作出更高像素的遊戲編程。

這就是目前Android面對的最大困局:

硬件不統一,導致Android軟件的編程困境。

Android的SDK會否支援新的硬件規格(支援了可能會使不少新軟件與舊產品不兼容)?軟件開發者敢為一兩部超級Android手機,加入新的編程嗎(銷量與成本不成正比)?聯盟成員還應該放更多的資源在新硬件上嗎(加入了但沒有軟件支援)?事實上,目前手機廠商看著競爭日益激烈而不斷在急、Google也看著廠商亂七八糟的硬件規格而不斷在急,後面還有一堆將貨就價的深圳山寨在亂搞一通,軟件編程者更不敢單為了一兩部超級Android手機來編程,三方面的角力,最後可能只會規限了三方的腳步。

故此,Google就算排除了稱霸雲端的野心,它也要想想方法處理Android Market的困局。故此,唯一的方法就是:一眾Android廠商也不要用GPU了,一起不要用硬件加速,一起主力於CPU,來加強網絡能力。跟AppStore鬥,是鬥不贏的,鬥遊戲,也輸數條街,那不如鬥鬥雲端應用軟件吧。反正,雲端應用軟件的核心,是網絡,而不是效能。所以Odin認為Google Nexus One想作出的標準是:

Android應該更重視雲端應用,多於多媒體體驗。

*   *   *


(註:有興趣買Android系統的朋友,留意千萬不要相信Neocore為Nexus One做的測試,因為那個是由Qualcom自己寫的,它為Qualcomm處理器優化得得嚴重。連結中的HTC Magic用的是Qualcomm的SoC,跑Necore與Motarola Droid(Milestone)得分一樣"低",但玩3D遊戲時,HTC Magic已經癱瘓,但Milestone是流暢的。

為了滿足愛好跑分者,Odin再給大家一個Benchmark數據,是
iPhone 3GS vs Sony Ericssen Satio (PowerVR SGX) VS HTC HD2 VS Toshiba TG01 (AMD Z430),留意最底部份的得分差距,就可以看到渲染能力的不同。
不過大家也要留意,
TG01和HD2都是用Windows Mobile,可能對跑分有影響。








5. UNCERTAINTY

不過,Google這個做法也不是很安全的。因為,未來還有很多變數。

第一,究竟開放手機聯盟(採用Android的手機廠商聯盟)是否很老實地遵從Google的指導呢?老實說,手機市場的競爭日益激,很難確保不會有廠商為了吸引消費者,分別利用更強橫的多媒體經驗、或是以更低效能的硬件去換取更低的售價,結果,在競爭之下,Android的硬件鴻溝只會日漸擴大,使編程者變得更難處理。

第二,自Microsoft宣佈在IE9上加入硬件加速技術之後,瀏覽器採用GPU支援的可能性已經放在日程裡,Apple的桌面作業系統Mac OSX亦以加入支援硬件加速的OpenCL介面,讓GPU協助系統的運作,由於iPhone所用的PowerVR SGX 535早就支援OpenCL技術,所以未來第四代的iPhone,眼看著很大機會也會透過GPU加速瀏覽器的運作。未來,Google就會處於一個兩難之局:加入硬體加速技術,只會加劇開放手機聯盟的分裂,但不加呢?Android引而為傲的網絡優勢就會失去了。

結果如何?一切都會在今年夏天、iPhone第四代推出時揭曉。

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。