十月下旬,左城第一次踏進了藍灣通訊的研發中心。
地點在華夏市高新區,距離學校四十分鐘地鐵。研發中心占了一棟二十六層的寫字樓,門禁係統刷三道卡才能進核心區域。左城在前台領了臨時工牌,韓哲的助理帶他穿過一條長走廊,兩側是透明玻璃隔開的實驗室,裡麵全是他隻在教科書上見過的測試裝置。
韓哲在十七樓的會議室等他。
」坐。」韓哲指了指對麵的椅子,麵前攤著左城的課題方案,幾個地方用紅筆圈了標註,」環節二的情況我先跟你說清楚。」
他翻開一張藍灣通訊內部的基站網路拓撲圖,手指點在華夏市南區的一個節點上。
」這是我們在南區部署的一座5G實驗基站,覆蓋半徑兩公裡,日常接入使用者大約三千人。你的演演算法要在這座基站的訊號處理單元上跑起來,實時處理真實的使用者訊號,連續執行七十二小時不出故障,各項效能指標達到方案裡承諾的水平。」
左城看著那張拓撲圖,心裡迅速計算著工作量。
實驗室模擬和真實基站之間隔著一道巨大的鴻溝。模擬環境裡的訊號是乾淨的、可控的、可重複的;真實基站麵對的是三千個活生生的使用者,每個人的訊號特徵都不一樣,移動軌跡不可預測,環境乾擾千變萬化。
更麻煩的是硬體。實驗室裡跑演演算法用的是高效能伺服器,算力基本不設上限。但基站的訊號處理單元是定製的嵌入式平台,算力有限、記憶體有限、功耗有限。演演算法必須在這些約束下跑出同樣的效能——這就像讓一個在寬敞跑道上跑出好成績的運動員,換到一條滿是障礙的窄巷裡還得保持同樣的速度。
」硬體平台的技術規格能給我一份嗎?」左城問。
」已經準備好了。」韓哲把一個U盤推過來,」裡麵有基站訊號處理單元的完整硬體手冊、介麵文件和開發環境配置指南。另外我給你開了遠端訪問許可權,你可以在學校裡通過VPN連線到基站的開發測試環境,不用每次都跑過來。」
」謝謝韓總。」
」還有一件事。」韓哲靠在椅背上,語氣變得隨意了一些,」周總讓我轉告你,他下週有一天在研發中心,如果你方便的話,他想跟你當麵聊聊。」
周鶴年。藍灣通訊CTO。
」我方便。」左城說。
從藍灣通訊出來之後,左城在地鐵上開啟了U盤裡的硬體手冊。
他越看眉頭皺得越緊。
基站訊號處理單元用的是一款定製的嵌入式處理器,主頻不高,但整合了專用的訊號處理加速模組。問題在於這個加速模組的指令集和通用處理器完全不同——左城的演演算法裡有大量的矩陣運算,在通用處理器上可以直接呼叫標準數學庫,但在這個定製晶片上,標準庫跑不了,必須用專用指令集重新實現。
這就是方澤的戰場了。
當天晚上,左城把硬體手冊和他的初步分析發給了方澤。
方澤看了兩個小時,回了一條很長的訊息。
」處理器架構我大致看明白了。好訊息:這款晶片的加速模組對定點數矩陣運算有專門的硬體支援,如果把你的浮點演演算法改成定點實現,理論上速度能提升三到五倍。壞訊息:浮點轉定點會引入量化誤差,你的演演算法對精度要求高,量化誤差控製不好的話效能會崩。這是一個精度和速度的權衡問題,需要你和我一起啃。」
左城盯著」一起啃」三個字,嘴角微彎。
方澤從來不說」我來搞定」,也不說」你來解決」。他說的是」一起啃」。這個人骨子裡是個合作者,不是獨行俠——前提是他認可你的能力。
接下來三天,左城和方澤每天晚上在實驗室碰頭,專攻浮點轉定點的精度控製問題。
這是一場硬仗。
核心難點在於左城的自適應追蹤演演算法裡有一個遞迴更新的步驟——每一次疊代都會在上一次結果的基礎上做微小修正。浮點數的精度足夠高,這種微小修正可以精確執行。但定點數的精度有限,每次疊代都會引入一點量化誤差,幾百次疊代累積下來,誤差可能被放大到不可接受的程度。
左城試了三種常規的誤差補償方法,全部失敗——誤差要麼冇壓下去,要麼壓下去了但速度也跟著掉下來,得不償失。
第四天,他坐在實驗室裡對著一螢幕的資料發呆。
方澤從旁邊走過來,把一杯冰美式放在他手邊。這是左城第一次看見方澤給別人買咖啡。
」換個思路。」方澤說,靠在桌邊,雙手抱胸,」你一直在想怎麼減小量化誤差,但有冇有想過——讓演演算法本身對量化誤差不敏感?」
左城抬起頭。
」你的遞迴更新步驟之所以會放大誤差,是因為更新公式裡有一個除法操作——定點除法的精度損失最大。」方澤拿起筆在紙上畫了一個簡圖,」如果把更新公式從乘除形式改成加減形式,用對數域變換把乘除運算轉化成加減運算,定點加減的精度損失比乘除小兩個數量級。」
左城瞪著紙上那個簡圖,腦子裡像被閃電劈了一下。
對數域變換。
把乘除變成加減。
這個思路他完全冇想到——因為對數域變換在訊號處理領域不常用,它是數字通訊編碼領域的技巧。左城的知識體係是從訊號處理這棵樹上長出來的,天然存在視野盲區。而方澤做嵌入式底層開發,天天跟定點運算打交道,對這類技巧信手拈來。
這就是團隊的意義——一個人的盲區,恰好是另一個人的強項。
」方澤,你是天才。」左城說。這不是客套,是由衷的。
方澤麵無表情地喝了一口自己的咖啡:」不是天才,是被定點數折磨過太多次。」
當天晚上,左城重寫了遞迴更新模組,用對數域變換替換了所有的乘除操作。方澤同步把新的程式碼移植到定製晶片的模擬器上跑測試。
淩晨兩點,測試結果出來了。
量化誤差降到了原來的五十分之一。演演算法在定製晶片上的執行速度比浮點版本快了四倍。效能指標和實驗室模擬的結果幾乎一致。
方澤看著螢幕上的資料,破天荒地說了句臟話。
是好的那種。
左城長長地吐了口氣,靠在椅背上,盯著天花板笑了好一會兒。
光幕在意識中悄然彈出一行字:
【檢測到宿主解決關鍵技術瓶頸,主線任務鏈·環節二進度更新:35%】
才百分之三十五。演演算法移植隻是第一步,後麵還有係統整合、聯調測試、七十二小時連續執行驗證。
但最難的那道坎,已經邁過去了。
左城關掉麵板,看了一眼手機。淩晨兩點十五分,有一條未讀訊息。
韓哲發來的,時間是晚上十一點。
」周總確認下週三下午三點在研發中心,你到時候直接來十七樓就行。另外他讓我提前跟你說一聲——他想聊的不隻是課題的事。」
不隻是課題的事。
左城把手機放下,目光投向窗外沉寂的校園。
藍灣通訊CTO要聊的」不隻是課題的事」,會是什麼?
他暫時想不出答案,但直覺告訴他,下週三那場談話的分量,可能比拿下整個課題還重。