四月的芝加哥,天氣是個狡猾的騙子。
透過戈登綜合科學中心(GCIS)的雙層隔熱玻璃,陽光鋪在橡木地板上,泛着金色的暖意。
但只要推開那扇沉重的金屬防火門,密歇根湖吹來的溼冷風就會立刻教你做人。
那是種滲入骨髓的陰冷,能瞬間凍僵面部肌肉,把呼出的熱氣變成白霧。
林允寧推開206實驗室的門。
冷風倒灌,攪動了室內原本沉悶的空氣。
陳舊的紅牛酸味,混合着剛沖泡的星巴克深烘咖啡焦香,撲面而來。
實驗室裏充斥着一種令人焦慮的低頻底噪??
那是服務器機架上幾十個散熱風扇全速運轉的嘯叫。
在這個底噪之上,是機械鍵盤青軸那種清脆、密集、不間斷的敲擊聲。
咔噠咔噠。
節奏快得讓人心率加速。
趙曉峯縮在牆角的人體工學椅裏。
椅背被拆掉了,取而代之的是一個硬邦邦的記憶棉靠墊,強行矯正着他的脊椎。
他面前豎着兩塊24寸的戴爾顯示器。
屏幕亮度調到了最高。
幽藍色的熒光映在他滿是油光的臉上,把那個深陷的眼窩照得慘白。
桌面上是災難現場:
紅色的Xilinx Virtex-5FPGA開發板散落着,連接線糾纏成亂麻,幾根探針危地懸在桌沿。
三罐捏扁的紅牛易拉罐堆成了一個搖搖欲墜的金字塔。
旁邊,是一袋敞口的奇多,橙色的粉末灑在了黑色的鼠標墊上。
而在實驗室的另一頭,靠窗的位置,是絕對的靜止。
蘇暢穿着一件寬鬆的灰色針織開衫,整個人陷在陰影裏。
辦公桌面乾淨整潔,只有幾張寫滿字的A4紙。
她盯着窗外光禿禿的橡樹枝椏,眼球幾乎一動不動,甚至連呼吸的起伏都難以察覺。
手中的圓珠筆在指間無意識地轉動,筆尖懸在紙面上方一毫米處,遲遲沒有落下。
“醒醒神。”
林允寧把手裏的托盤放在公共桌上,紙杯底座磕在桌面上,發出沉悶的響聲。
“馥芮白是曉峯的,燕麥拿鐵是蘇暢的。沒加糖,只有咖啡因。”
趙曉峯像是被觸發了某種硬件中斷,猛地從代碼堆裏拔出腦袋。
他眼球上佈滿了紅血絲,眼神聚焦了足足兩秒纔看清來人。
“林老師......你真是我的救命恩人。”
趙曉峯抓過咖啡,甚至沒試溫就灌了一大口。
滾燙的液體順着食道滑下去,他齜牙咧嘴地吸了口氣,隨後長嘆一聲,整個人癱軟在椅子上。
"ResNet-20在FPGA上的並行化遇到了死結。”
他指了指屏幕上一條陡峭上升然後突然斷崖式下跌的紅色曲線,聲音沙啞,“爲了追求吞吐量,我把流水線拆到了極致,每個時鐘週期都塞滿了乘法運算。
“現在的推理速度提升了30%,但是......”
他用力敲了敲回車鍵,屏幕彈出一串報錯日誌。
“內存牆(Memory Wall)。DDR3的帶寬被喫光了。計算單元大部分時間都在空轉,等待數據從內存搬運過來。
“這感覺就像你開着一輛法拉利,卻被堵在了晚高峯的肯尼迪高速上,只能怠速燒油。”
林允寧脫下沾着冷氣的羽絨服,掛在椅背上。
他拉過一把椅子,坐在趙曉峯旁邊,眼神掃過屏幕上那些密密麻麻的時序圖。
“別想着怎麼把數據從內存裏搬來搬去,曉峯。那是無用功。
“馮?諾依曼架構的侷限性,沒辦法單憑算法越過去的。”
林允寧從衛衣口袋裏掏出那張在機場候機時隨手畫的草圖,撫平了上面的褶皺,推到趙曉峯面前。
圖上沒有複雜的電路邏輯,只有一堆排列整齊的方塊,中間用單向箭頭串聯起來,形成了一個緊密的矩陣。
“這是什麼?”
趙曉峯推了推鼻樑上厚重的眼鏡,湊近看了看,“二維網格?每個節點只有局部連接......這拓撲結構看着眼熟。H.T. Kung的脈動陣列(Systolic Array)?”
“識貨。”
林允寧滿意地點了點頭。
趙曉峯作爲清華姚班出身的硬核極客,不僅基礎紮實,也稱得上是博聞強記。
“可是那是70年代的老古董了,”
趙曉峯眉頭擰成了疙瘩,“那是爲了做專用矩陣乘法設計的,靈活性太差,編程難度極高。
“現在誰還用這個?大家都轉投GPU了,CUDA纔是未來。”
“GPU的設計初衷是圖形渲染,它的緩存機制是爲了紋理映射,不是爲了深度學習裏的張量計算。”
林允寧拿起一支筆,在草圖的方塊上點了點。
“既然我們要做AI專用芯片,爲什麼要追求通用性?
“我要的就是極致的矩陣乘法效率,哪怕它連個如果是(if-else)都算不了。”
他隨手在白板上寫下一行算式:
C[i][j]+= A[i][k]* B[k][j]
“在傳統的架構裏,每算一次乘加運算,你就要去內存裏讀一次A,讀一次B,再寫回一次C。這種頻繁的讀寫就是你在高速公路上遇到的紅綠燈。”
林允寧的手指順着草圖上的箭頭滑動。
“但在脈動陣列裏,數據不是‘存取”的,而是‘流動'的。
“左邊的計算單元(PE)接收數據,完成一次乘法,加上局部結果,然後直接傳給右邊的鄰居。
“上邊的傳給下邊。數據在芯片內部流動一次,就被榨乾了所有的計算價值,最後才寫回內存。”
趙曉峯盯着那張圖,狠狠吞了口口水。
他的手指在桌面上飛快地敲擊,似乎在腦海裏重新構建電路的時序。
“沒有全局總線......全是局部互連...………如果這樣的話,”
他喃喃自語,“我可以省掉至少40%的片上緩存控制邏輯,把省下來的硅片面積全部塞滿乘法器(MAC)。如果不考慮分支預測和亂序執行這些亂七八糟的東西……………”
“對,就是這個思路。”
林允寧拍了拍他的肩膀,“這個作業交給你了。不用設計完整的TPU,先用Verilog給我寫一個16x16的脈動陣列原型。這對你來說並不難,一個月就能搞定吧。”
“兩週。”
趙曉峯接受了挑戰,頓時來了精神。
他把那袋奇多扔進垃圾桶,轉過身面對屏幕。
手指懸在鍵盤上方停頓了一秒,然後噼裏啪啦地敲擊起來,節奏比之前更快、更狠。
“只要你不嫌棄我的Testbench寫得爛。”
林允寧笑了笑,端起自己的黑咖啡,轉身走向窗邊。
那邊的靜止區域依然存在。
蘇暢保持着之前的姿勢,彷彿被透明的樹脂封存了。
實驗室裏嘈雜的鍵盤聲、風扇聲,甚至趙曉峯剛纔的抱怨,都在她周圍的一米處自動消音。
直到林允寧走到她面前,擋住了窗外刺眼的陽光,在她的桌面上投下一片陰影。
蘇暢遲鈍地抬起頭。
她的瞳孔處於一種不自然的放大狀態,眼神沒有焦距,像是穿透了林允寧的身體,看着虛空中的某一點。
“林老師。
她小聲叫道,聲音很輕,帶着一絲從深海浮上來的窒息感。
“那個持續同調(Persistent Homology)的作業,”
林允寧靠在窗臺上,視線落在她面前的那幾張紙上,“條形碼(Barcode)圖算出來了嗎?”
那是一張由計算機生成的拓撲特徵圖。
橫軸是過濾參數(Filtration),縱軸是同調羣的特徵生成元。
正常的條形碼圖應該是一條條清晰的長短線段,代表着數據中存在的拓撲結構(如孔洞、空腔)的壽命。
但蘇暢面前的這張圖,亂得像一團被貓抓過的毛線。
“我研究了幾個月,”
蘇暢低下頭,手指按着太陽穴,似乎在壓抑某種眩暈感,“在低維的時候,貝蒂數(Betti Number)很穩定。那些條形碼是長線,結構很清晰,很光滑。但是......”
她指了指圖表右側的高維投影區域。那裏的線條崩碎成了無數細小的短線,密密麻麻地擠在一起,那是大量的拓撲噪聲。
“當我把參數調高,進入高維投影的時候,數據的‘質感’變了。”
蘇暢深吸了一口氣,試圖描述那種感覺,“它們不再是平滑的流形。那些數據點......它們變得很‘澀”。就像是用砂紙打磨玻璃,充滿了不連續的尖刺。
“我的大腦一直在試圖把它們平滑化,但是做不到。那裏有無數個微小的孔洞在瞬間產生又瞬間消失,這種震盪......讓我噁心。
實驗室另一頭的趙曉峯忍不住回頭吐槽了一句:
“蘇暢,你這是在做數學還是在做胃鏡?數據還能讓你噁心?”
蘇暢沒有理會,她只是死死盯着那些破碎的線條:
“那裏沒有穩定的結構,只有混亂的撕裂。”
林允寧點了點頭。他知道蘇暢的聯覺症並非某種魔法視覺,而是一種過載的模式識別??
她的大腦將數學上的“不收斂”和“震盪”,轉化爲了生理上的排斥反應。
“那是拓撲噪聲,也是湍流的特徵。”
林允寧轉身,拿起一支粉筆。粉筆灰在陽光下飛舞,落在他的袖口上。
他在蘇暢身後的黑板上,寫下了一個方程。
au/?t +(u?V)u = 0
這是歐拉方程,描述無粘流體運動的最基礎方程。
“蘇暢,別去想那些點雲了。看着這個。”
林允寧的聲音很平靜,不帶任何評判,“如果我讓你盯着這一項………………”
他用粉筆圈出了對流項(u.7)u。
“......在一個封閉的環面(Torus)上演化,你感覺到了什麼?”
蘇暢抬起頭,目光落在那個公式上。
她沒有看到什麼發光的特效,也沒有看到彩色的電影。
她只是盯着那個非線性項,大腦開始自動進行某種高維幾何的構建。
那個(u.?)u代表着自我的輸運,代表着速度場對自身的扭曲和拉伸。
在她的認知裏,這個算子開始瘋狂地迭代。
“它在………………變緊。”
蘇暢的眉頭皺了起來,那種生理性的不適感再次襲來。
她感到一種壓迫感,就像是有一根無限長的弦,正在被不斷地纏繞、收緊。
“沒有阻力。它在自我疊加。”
蘇暢的聲音變得有些急促,“梯度在變大。越來越陡峭。空間被摺疊得太密了......它無法通過了。”
她下意識地抓住了桌角,指關節發白。
“它會卡住。在某一點,斜率會變成垂直的。那是......那是無窮大。”
蘇暢閉上眼睛,彷彿被那種極致的“尖銳”刺痛了神經,“那裏沒有體積了,只剩下一個無限緻密的點。
“非常刺眼,非常尖銳。這種結構無法在現實中存在,它會把空間‘扎破’。”
趙曉峯敲鍵盤的手停了一下。
雖然他不懂流體力學,但他聽懂了那個描述??
那是程序裏的死循環,或者是除以零的錯誤。
林允寧目光沉靜。
“換句話說,就是有限時間爆破(Finite-time Blowup)。”
林允寧解釋道,“對於三維歐拉方程,你的直覺是對的。那個‘無限緻密的點,就是速度梯度的發散。數學上,這是一個奇點;物理上,這是一個災難。”
他頓了頓,拿起黑板擦。
他在那個方程的右邊,加上了一項:
=vvzu
這是粘性項。加上這一項,它就變成了納維-斯託克斯方程(Navier-Stokes Equations)。
“現在呢?”林允寧問。
蘇暢再次看過去。
她的呼吸慢慢平復下來,緊鎖的眉頭也舒展開了。
拉普拉斯算子2代表着擴散,代表着平均化。
在她的感知裏,那個即將斷裂、崩壞的尖銳結構,被這一項包裹住了。
那種極致的張力開始向四周耗散。尖銳的峯值被抹平,變成了一個圓潤的鼓包。
“它......糊掉了。”
蘇暢睜開眼睛,那種刺痛感消失了,取而代之的是一種渾濁的平靜,“那種尖銳的東西消失了。
“但是結構也變得模糊了。就像是一滴墨水滴進了水裏,邊界消失了,只剩下大片大片的混亂。我看清了整體,但看不清細節了。”
“因爲粘性耗散了能量,也抹平了奇點。”
林允寧扔掉粉筆頭,拍了拍手上的灰。
“但也正是因爲這一項,讓流體變得‘渾濁,也就是湍流。我們看不清它的結構,也不知道它是否永遠平滑。”
他看着蘇暢,目光中帶着一絲期許:
“你的聯症很有用,蘇暢。你能感知到方程的‘性格’。
“現在在有些人製作的火箭引擎裏,現在就充滿了這種‘渾濁的混亂’。
“工業界的軟件算不準它,因爲它們只是在盲目地擬合。”
林允寧指了指黑板上的方程:
“我需要你幫我做件事。
“我會給你一組經過特定拓撲變換的渦旋數據。
“當然,不需要你去解這個困難的偏微分方程,你只需要用你的直覺去感受??在那片渾濁的混亂裏,有沒有哪個瞬間,那個‘尖銳的刺’又冒頭了?”
蘇暢愣了一下,隨即重重地點了點頭。
那種被需要的感覺,讓她眼底的疲憊消散了不少。
“好了,幹活吧。”
林允寧轉身回到自己的辦公桌前。
他打開ThinkPad,屏幕的熒光映在他臉上。
通過剛纔對蘇暢的測試,以及對SpaceX數據的模擬,他確認了一件事:
不管是趙曉峯正在做的TPU(爲了暴力計算),還是蘇暢的直覺(爲了定性尋找異常點),都只是輔助工具。
要真正解決Merlin引擎裏的“熱斑”,或者說,要真正理解那個“旁路轉捩”的物理本質,他必須直面那個幽靈。
?納維-斯託克斯方程的存在性與光滑性。
千禧年七大數學難題之一。
這不是一個工程問題,這是一個純粹的數學噩夢。
它像一堵看不見的牆,橫亙在物理世界和數學世界之間。
流體究竟是始終平滑的,還是會在某些極端條件下產生物理意義上的爆破?
僅憑他現在的數學等級(雖然已經很高,但主要集中在代數幾何和數論領域),硬剛這頂分析學領域的王冠,勝算微乎其微。
他需要一把更鋒利的刀。
或者說,一個足夠瘋狂,足夠純粹的對手,來和他一起磨這把刀。
林允寧打開郵箱,點擊“撰寫新郵件”。
收件人一樣,他輸入了一個早已爛熟於心的地址。
那個ID由一串毫無規律的字符組成,看起來像是一個廢棄多年的殭屍號。
但在數學界,它代表着一個活着的傳奇,一個已經消失在公衆視野中的幽靈。
Perelman.Grigori@...
那是隱居在聖彼得堡,拒絕了菲爾茲獎,拒絕了克雷研究所百萬美元獎金,只與老母親相依爲命,靠啃黑麪包和發酵酸奶度日的一
格裏戈裏?佩雷爾曼。
林允寧的手指在鍵盤上懸停了片刻。
窗外的雨終於落下來了。
雨滴打在玻璃上,匯聚成一股股蜿蜒而下的水流。
軌跡混亂而不可預測,像極了那些該死的湍流。