Google 自研的手機 SoC 翻車了嗎?
因為上一代用驍龍 765G 的騷操作,在大家心目當中,Google Pixel 系列算是斷更一代。 而 Pixel 6 系列就不同了,有 Google 自研 SoC——Google Tensor(Tensor 是張量的意思,名字就很 AI,很ML)、追上時代的相機硬體,也有相對厚道的價格。
重回旗艦市場的計算攝影大佬,終於肯用現代的CMOS了! 機圈立即奔相告,直到國外使用者拿到真機,Anandtech 放出Google Tensor的測試成績和分析……
在不改變 Anandtech 原意的情況下,我們對這顆如此重要和有趣的 SoC 的內容進行整理和編譯,原文:
全自研還是魔改(半定製)?
Google 表示 Google Tensor 是邁向新型工作負載探索之旅的起點,現有晶片方案無法實現他們說的目標。 憑藉多年來的機器學習研究經驗,Google 把 Tensor 做成一款以機器學習作為差異化的 SoC,據說其讓 Pixel 能實現很多獨特的功能。
關於Google Tensor的第一個爭議是,它是全自研? 還是魔改(半定製)? 這裡主要看你對 「自研」 的定義,Google 和三星看似密切的合作,模糊了傳統的自研和半定製之間的界限。
在Google內部, Google Tensor 代號是 GS101,可能是 Google SoC 或 Google Silicon 的意思。 而之前爆料說的 Whitechapel(白教堂),還沒有任何證據表明其是真實存在的晶片。
而Google Tensor基本遵循三星 Exynos 的命名規則,其ID是”0x09845000″,拆解後能看到絲印是 S5P9845(編者:原文發佈之初,認為ID對應 S5E9845,但經TechInsights拆解,確認是 S5P9845)。 作為參考,三星 Exynos 2100 的 ID 是 S5E9840,Exynos 1080 是 S5E9815。
幾年前就有報導說三星開始提供半定製的晶片服務,當時就有三星與思科、Google 的合作消息。 ETNews 在 2020 年 8 月的文章中提到,三星會根據客戶需求提供”定製”技術和功能,甚至從晶片設計階段就開始提供。
三星不再是簡單的晶元製造商,而是完全參與晶元設計,這都可以和 ASIC 設計服務相提並論了。 但這是個很特殊的情況,畢竟三星不但有台積電那樣的晶片代工業務,它也有自己的自研SoC。
Google Tensor 和三星 Exynos 高度同源,除了大家常說的 CPU、GPU、NPU 等高級結構外,晶片中的基本結構很多都是同源的。 雖然紙面上,三星、聯發科、海思,甚至高通(只有CPU方面),用的都是arm的 Cortex CPU 和 Mali GPU 公版架構,但它們的底層架構還是非常不同的。
Google Tensor 使用的是三星 Exynos 的框架,不但有相同的時鐘和電源管理架構,它們的儲存控制器、外部介面的 PHY IP 等高級塊,甚至連 ISP 和媒體編解碼器等較大的 IP 功能塊都很相似。 有趣的是, Github 上已經有 GS101 的公開資訊,可以 1:1 地比較它和 Exynos 的結構組成。
不過,雖然用了 Exynos 的基礎模組和框架,但 SoC 的定義確實由 Google 控制,結構和 IP 塊之間的連接設計上,Google Tensor 和三星 Exynos 都是不同的。
例如 Exynos 上,CPU 是用總線連起來的,而 Google Tensor 的 CPU 集群是被集成在一個更大的 CCI 裡面。 從外部看,可能是用了不同的總線設計,也可能是完全不同的IP。 另外,像記憶體控制器的連接方式,它們也是不太一樣的。
性能規格分析
單看 CPU 就知道 Google Tensor 的特殊之處,2x X1 + 2x A76 + 4x A55,這個”2+2+4″結構在三星 Exynos 9820 和 Exynos 990 都出現過。 但當今 Android 旗艦 SoC 中, 1+3+4 才是絕對的主流。 而且敢堆 2 顆 X1 的,僅 Google 一家。
理論上有兩顆 X1 超大核,其 CPU 多核性能會比單顆 X1 的產品更強。 而頻率上,Google Tensor 的 X1 都是 2.8GHz,略低於驍龍 888 的 2.84GHz 和 Exynos 2100 的 2.91Hhz。 此外,Google 還和驍龍888 一樣給了 1MB L2 快取,比 Exynos 2100 的 512KB 殘血 X1 更猛。
大核(編者:你喜歡叫中核也行)這邊,Google 選擇了古早的 A76 架構,這是件很有爭議性的事(2.25GHz,256KB 的 L2 緩存)。 畢竟這並不合理,因為 A77 和 A78 的性能和能效比都更高。 連 Anandtech 都沒從 Google 那裡得到明確的解釋。
他們猜測可能是幾年前設計晶元的時候,三星手上也沒有更新的IP供Google選擇。 也可能是在超大核換成X1 的時候,沒有時間連大核也一起換了。 但Google應該不是特意選用 A76 的,因為從下面的測試可以發現,A76 真的是跟不上時代了。
小核這邊,4 個 1.8GHz 的 A55。 Google 選擇了 128KB 的 L2 緩存,而不是三星 Exynos 自己用的 64KB,這讓這個 CPU 更像驍龍888 了。 但比較奇怪的是,Google 把集群的 L3 快取頻率和 A55 綁定,這會導致延遲和功耗問題。 另外,這也和Exynos 2100的 L3 頻率是不同的。
Google Tensor 的 GPU 是 Mali- G78 MP20,規模僅次於麒麟 9000 的 G78 MP24(編者:G78 的極限)。 大家最開始以為Google會用低點的頻率來提升能效比。 但結果Google竟然把著色器頻率推到845MHz,把 tiler 和 L2 頻率推到996MHz,簡直癲狂。 另外,它也是第一個用上 G78 分離頻率特性的產品。
作為參考,Exynos 2100 的 G78 MP14 也”只是” 854MHz,後者的峰值功耗已經很高了。 結果 Google 增加 42% 的核心,卻依然維持高頻。 因此它的峰值性能很讓人期待,但峰值功耗也會很猛。 而記憶體控制器似乎和Exynos 2100相同,支援4x16bit的 LPDDR5,理論頻寬51.2 GB/s。
它也用了 8MB 的系統緩存,但還不清楚是否用了和三星 Exynos 2100 一樣的 IP,因為它們的架構和行為方式都不太一樣。 Google 大量使用 SLC 來提升 SoC 性能(包括他們自己的定製模組)。 這個 SLC 允許自分區,將 SRAM 專門分給 SoC 上特定的 IP 塊,使它們在不同用例下,能對全部或部分緩存進行獨佔訪問。
ISP 與 TPU
大家說SoC整合的ISP時,經常把它們描述為單個IP。 但實際上,ISP 是不同的專業IP塊的組合,每個IP塊處理成像管線中的不同任務。 而 Google Tensor 非常有趣,因為它將三星用在 Exynos 晶片上的一些片段整合到了一起,同時還將自己開發的定製模組整合到了流水線中 —— 正如 Google 在展示 SoC 時所說的那樣。
成像系統部分和 Exynos 是一樣的,如相位檢測處理單元、反差對焦處理單元、圖像縮放器、畸變校正處理塊和紋理遮擋函數處理塊等。 比 Exynos 少的部分,可能是三星的一些圖像後處理模組。
Google在 ISP 中加入自己的 3AA 模組(自動曝光,自動白平衡,自動對焦) ,以及一對自己的時域降噪 IP 模組(用於對齊和合併圖像)。 這些很可能就是Google所說的那些有助於加速圖像處理的模組,這些是 Pixel 系列計算攝影的一部分,毋容置疑地地代表了圖像處理流水線中非常重要的部分。
TPU 是讓Google Tensor被稱為 Tensor 的地方。 Google 已經用自研 TPU 好幾年了,在驅動層面,Google 把 Tensor 的 TPU 稱作 Edge TPU( 端側邊緣 TPU)。 這是相當有趣的信號,因為它應該和Google 2018年發佈的Edge TPU有關,後者是Google為邊緣推理而設計的ASIC晶片(官網 cloud.google.com/edge-tpu)。
當年的Edge TPU宣稱在2W功耗下可以提供4TOPS的算力,但Google並未公佈Tensor的TPU性能指標,但是在一些測試中可以看到它的最大功率是5W左右。 因此如果它們確實是有關聯的,考慮到這幾年的製程和IP上的進步, Google Tensor 的 TPU 性能應該有明顯提升了。
這個 TPU 是 Google 晶片團隊的驕傲,它正在使用最新的機器學習處理架構,這個架構針對 Google 內部運行機器學習的方式進行過優化,並且表示它可以允許開發新的、獨特的用例,這是 Google 做定製 SoC 的主要目標和出發點之一。 在後面的測試中,這個TPU的性能指標確實也是令人印象深刻的。 因為 TPU 的資訊不多,我們只能基於它的驅動程式做簡單猜測,它可能包含四核心的 Cortex-A32 CPU。
其他模組
在媒體編碼器方面,Google Tensor 使用了三星的多功能編解碼器(與 Exynos 系列同款),還有一個看起來像是用於 AV1 解碼的自研 IP 塊。 這有點奇怪,因為三星的宣傳中, Exynos 2100 是有 AV1 解碼功能的,而且這個功能貌似也在內核驅動程序裡面。 但在 Galaxy S21 系列中,這個 AV1 解碼功能從未在 Android 的層面實現過。
Google加入的這個專用的 AV1 解碼器被他們稱做 ” BigOcean”,它能讓 Android 系統具備 AV1 硬解能力。 但非常奇怪的是,它真的就只負責AV1,其他格式編解碼還是由三星的MFC負責。
Google Tensor 的音訊子系統也不同,Google 用自己設計的 IP 塊代替了三星的低功耗音訊解碼子系統,它們可以在無需全部喚醒 SoC 的情況下進行低功耗的音訊播放。 我們認為這部分也是當協處理器用的,這也是Google Tensor和Exynos不同的地方。
Google 還用了一種稱為 Emerald Hill 的硬體記憶體壓縮器,對記憶體頁面進行 LZ77 壓縮加速,反過來也可以用來加速交換中的 ZRAM 的卸載過程。 現在還不確定 Pixel 系列是否已經啟用這個模組,但能確認在” /sys/block/zram0/comp_algorithm”目錄中有”lz77eh”。 作為課外資料,三星早在5年前,就在SoC裡集成了類似的硬體壓縮IP模組。 但出於某些原因,這些模組從未被啟用過,也許是能效比並沒有他們預想中的高。
圖源PBKreviews
另外,Google 還用三星的 Exynos 基帶,做出了第一台非高通的毫米波手機。 Pixel 6 系列用的是三星的 Exynos 5123 基帶(譯者:為遵循國內的習慣,這裡把調製解調器稱為基帶)。 三星在 2019 年就提到自己的毫米波射頻和天線模組,說 2020 年會出現在量產機上(不知道當時是否計劃讓 Pixel 6 在 2020 年上市)。 Pixel 6 系列的峰值速度可以達到 3200Mbps,但很多測試中,它的網速只有高通產品的一半左右。
雖然是同一個基帶,但它不是像Exynos 2100那樣集成在SoC裡,而是外掛的。 可能是因為Google Tensor的 GPU 和 CPU 規模太大了,而且 TPU 的規模也是未知數。 畢竟就算是把基帶外掛出去,Google Tensor 的規模也是相當大了,即便是和對比 Exynos 2100 的情況下。
總的來看,Google 確實設計和定義了 Tensor ,同時有很多 Google 特有的設計,是整體的晶片上的差異化。 但從更底層的角度看,Tensor 和 Exynos 有很多共通之處,用了很多三星特有的基礎模組,因此叫它「半定製」或許會更合適。
實際性能表現:不盡如人意
測試中,Google Tensor 的 DRAM 延遲較高,還不如 Exynos 2100,和驍龍888 比就更差了。 Google 改過了記憶體控制器,它會根據負載和內核的記憶體失速百分比來控制 MC 和 DRAM 速度,這部分是和三星不同的,其實際利用率也不如三星的記憶體控制器高。 現在不知道是 CPU 的問題,還是整個 SoC 內部的問題,但這確切地影響了下面的測試。
它的 L3 延遲也相當高,比 Exynos 2100 和驍龍 888 高得多。 Google 沒有給 DSU 和 CPU L3 快取設定特定的頻率,而是把它和 A55 小核的頻率關聯。 奇怪的是,即便 X1 或 A76 滿載,A55 和 L3 卻在低頻 「摸魚」。。 同樣情況下 Exynos 2100 和驍龍 888 都是會提高 L3 頻率的。
在系統緩存測試中,能看到 11-13MB 的延遲情況 (1 MB L2 + 4 MB L3 + 8 MB SLC) ,在正常的記憶體訪問中,Tensor 也是比 Exynos 要慢的,可能和被改過的個別緩存管線有關。
因為 L3 和 A55 的頻率捆綁,且頻率高,所以 Google Tensor 的 A55 小核是幾個 SoC 裡 L3 延遲最低的,彷如沒有異步時鐘橋一般。
CPU 部分,Google Tensor 更像是驍龍 888,而不是 Exynos 2100。 雖然Google Tensor的 L2 快取是 Exynos 2100 的 2 倍,但頻率低了 3.7%(110MhHz)。
Tensor 的弱點是記憶體延遲,導致 SPEC 測試中很多子專案都比 驍龍888 和 Exynos 2100 慢,但能耗卻更高(CPU 在乾等記憶體)。 SPEC 總分上,Tensor 的表現比 Exynos 2100 略差,對比驍龍888 的落後幅度達到 12.2% ,由於跑完測試的時間更長,最終耗電還多了 13.8% 。 折算回來,相對驍龍888 的差距應該是 1.4% 左右。
它也有和 Exynos 2100 一樣的降頻問題,只是相對沒有那麼嚴重。 如果冷卻得當,性能會高 5%-9% 左右(上圖的測試結果是在 11 度的環境下得到的)。
可憐的 A76 大核,驍龍 888 的 A78 比它強 46%,還更省電,實際 IPC 差距在 34%,這倒符合兩個構架之間的差距。 如果真是為了省電,完全可以做個低頻的 A78,但結果 Google 放了兩顆頻率又高、又耗電、性能還不行的 A76,只能推斷 Google 是沒得選,而不是有意而為之。
越接近右下角,能效比越低;越接近左上角,能效比越高 ↑
A55 小核這邊也不行,性能只是比同頻的驍龍 888 的 A55 高 11%(感謝 L3 和 SLC),但卻幾乎是 2 倍的功耗,儼然就是繼承了 Exynos 高功耗 A55 的血統,能效比甚至比自己的 A76 大核還拉胯。 看看聯發科天璣 1200 的 A55,再看看 A14 的能效核心,這真是個殘酷的世界。
Google Tensor 因為拉胯的 A76 性能表現,就算有 2 顆 X2 都無力回天,拖低了整體分數。 X1 本身也比對手稍慢一些,大部分時間的能效比都和 Exynos 2100 的 X1 一致。 但 A76 實在落後時代太多了(無論是性能還是能效比),而 A55 又繼承三星低能效的傳統,一言難盡就是了。
GPU 這邊規模大,頻率高,但 3DMark Wild Life 測試的峰值性能只比 Exynos 2100 高 21%。 在 GFX Bench 的 Aztec 場景測試中,領先 Exynos 2100 14%,小幅領先驍龍888。 雖然採用了分頻設計,但貌似瓶頸在 GPU 的其他地方。
Tensor 的 GPU 峰值功率高達 9-10W,手機一跑就降頻(一輪測試都沒跑完啊…… ),拖低了整體功耗,所以才會有7.28 W的平均功耗。 Pixel 6 系列沒有熱管,散熱配置和機身結構更像是iPhone,而不是猛堆散熱的Android旗艦。 它跑起來時,左側的SoC 45度,但右側只有30-33度,散熱確實是弱。
讓人不解的是,今年這批SoC都設定了高得不切實際的 GPU 頻率,一跑就降頻。 可能是為了應對突發的 GPU 負載? 或者是其他什麼原因? 但無論怎麼樣,實際能效比是受累了。
TPU:極強的推理性能
這是Google Tensor挽回顏面的地方。 MLPerf 測試中,Pixel 是在 NNAPI 跑的,其他廠商是各自的庫,高通是 SNPE(最近優化了 MLPerf 1.1,提升了成績)、三星是 EDEN,聯發科是 Neuron,而蘋果沒有 coreML 加速,所以吃虧。
在圖像分類、目標檢測和圖像分割工作負載中, Tensor 成績低於高通,但強於三星。 而在語言處理(MobileBERT 模型),Google Tensor 提供了驍龍 888 3 倍的性能,推理部分強得很。 Google 在宣傳里,確實也提到過實時轉錄、翻譯等使用場景是其差異化所在。
還沒發佈的 GeekBench ML 測試,用是 TensorFlow 模型,代表的是 GPU 的機器學習性能。 這時候Google Tensor就弱於Exynos 2100。 如果用 NNAPI 模型,此時是 CPU+GPU+NPU 的混合工作,Google Tensor 就可以大幅領先驍龍 888。
除了絕對性能,跑 AI 測試時,Pixel 6 Pro 的整機功耗和 Exynos 2100 的 Galaxy S21 Ultra 接近。 單獨進行推理任務時, Exynos 2100 的爆發功率達到 14W,驍龍 888 也有 12W。 但因為Google Tensor的 AI 性能更高,所以最終能效比要更高一些。
不過 Google 還沒有計畫推出相關的 SDK 讓開發者去更好地利用這顆強大的 TPU 。 但再看看三星,它的 NPU 發佈都 2 年了,現在都沒有 SDK…… 現在 TPU 的強大性能,主要集中體現在官方 app 裡,像是給攝像頭加入更多的機器學習功能,以及各種翻譯功能。
總結
Google 表示,他們搞自研 SoC 的主要原因是現有的 SoC 在機器學習上的性能和能效比太低。 而 Tensor 的機器學習性能和能效,被用來支撐新的用例和體驗,例如我們在 Pixel 6 系列上看到的很多機器學習特性。 像是即時轉錄、即時翻譯和圖像處理等演算法,所有這些都是運行在 Tensor 的 TPU 上的。
雖然 Google 可能不想承認或者談論,但 Google Tensor 確實就是和三星合作的產物,大部分都源自 Exynos,並繼承了三星在能效比方面的弱點。 CPU 被古老的 A76 拖後腿,規模龐大的 GPU 被散熱拖後腿,但 TPU 確實表現很好,特別是自然語言處理方面,遠遠拋離所有競品。
但總的來說,我們認為Google已經通過 Tensor 實現了最初的目標。 我們不知道 Google 下一代的 SoC 會走什麼樣的路線,但我們很有興趣等等看。