第358章 儘量
第357章 儘量
請訪問ʂƮօ55.ƈօʍ獲取最快的章節更新
特倫頓的風從教堂門口灌進來的時候,陳拙正彎著腰,把一箱臨期罐頭搬出來。
箱子不算輕。
紙板外殼被雪水打濕了一角,邊緣有些發軟,手指稍微一用力,就能摸到裡面鐵罐冰冷的圓弧。
亞伯拉罕站在後面,一邊用胳膊擋開幾個試圖提前往前擠的流浪漢,一邊用那根舊棒球棍敲了敲地面。
「排隊。」
神父的聲音不大,但在這條泥濘街道上足夠有用。
「今天沒人餓死,但誰搶,誰最後拿。」
人群里傳來幾聲不滿的咕噥。
一個裹著髒毯子的男人罵了兩句,看到亞伯拉罕手裡的棒球棍,又把嘴閉上了。
阿米爾站在教堂側門旁,沉默地接過陳拙搬來的箱子,臉上沒有多餘表情,只在箱子堆歪的時候伸手扶正。
伊利亞則完全是另一種狀態。
他站在泥水邊緣,穿著那雙已經被特倫頓毀掉的佛羅倫斯手工皮鞋,雙手抱著一箱切片麵包,嘴裡從俄語罵到英語,又從英語罵回俄語。
「我發誓,如果上帝真的愛世人,他至少應該先讓這個街區有一條像樣的排水溝!」
亞伯拉罕頭也不回。
「上帝可能也沒想到,會有人穿著這雙鞋來特倫頓搬麵包。」
伊利亞冷笑了一聲。
「我也沒想到。」
他把箱子重重放在門邊,又低頭看了一眼自己的鞋,表情像是在參加一場小型葬禮。
陳拙從車斗里搬下最後一箱罐頭,剛準備轉身,口袋裡的手機忽然震了一下。
起初他沒聽見。
特倫頓的街道太吵。
有人在吵架,有人在咳嗽,遠處還有警笛聲被風吹得忽近忽遠,伊利亞正對著一塊濺到大衣下擺上的泥點發表長篇控訴。
手機又震了一次。
陳拙把箱子交給阿米爾,空出一隻手,從大衣內袋裡摸出諾基亞。
屏幕亮著,來電顯示是一串跨洋轉接後的號碼。
下面跳著兩個字。
楚戈。
陳拙看著那個名字,停頓了半秒。
這個點打國際長途,不是電腦炸了,就是人快炸了。
按楚戈的性格,前者的可能性還大一點。
在他的記憶里,這個名字通常和凌晨一點的宿舍燈光,亂糟糟的網線,半瓶可樂,以及鍵盤敲擊聲聯繫在一起。
楚戈不是一個喜歡打電話求救的人。
哪怕當年在學校,他寫程序寫到滿臉發青,也更願意先自己把問題拆成一地零件,再把其中最硬的那塊丟到陳拙桌上。
陳拙按下接聽鍵。
電話接通後,對面沒有立刻說話。
聽筒里先傳來一陣很輕的電流聲,然後是一個空曠而壓抑的呼吸聲。
隔了幾秒,楚戈的聲音才從地球另一端傳過來。
「拙哥。」
聲音很低。
有點啞,還帶著一種很久沒有睡覺後的乾澀。
陳拙站在教堂側門旁,背後是灰白色的天空和泥濘的街道,前方是正在排隊領取食物的人群。
他沒有問「怎麼了」。
楚戈能在這個點打來,肯定已經不是一句「怎麼了」能解決的事。
「你說。」
陳拙換了一隻手拿手機,另一隻手從旁邊的箱子裡取出兩罐肉醬,遞給一個排到面前的老婦人。
老婦人接過罐頭,嘟囔著道謝。
電話那頭,楚戈沉默了兩秒。
「我先說清楚。」
楚戈的聲音壓得很低,像是站在一個封閉的樓梯間裡。
「我不是讓你幫我寫代碼,也不是讓你管我們公司的事。」
陳拙抬起眼,看了一眼正拿棒球棍維持隊伍秩序的亞伯拉罕。
「嗯。」
「你也不懂計算機。」楚戈又說。
這句話說得很直,像當年宿舍里幾個人互相拆台時的語氣。
陳拙點了點頭。
「對,我對計算機的理解,主要停留在別把水潑鍵盤上。」
電話那頭沉默了一下。
楚戈像是想笑,但沒笑出來。
那口氣憋在嗓子裡,最後只變成了一聲很輕的呼吸。
「我就是想問你一個數學上的問題。」
陳拙從箱子裡又拿出一袋臨期麵包,放到阿米爾遞過來的桌板上。
「你問。」
電話那頭,楚戈的聲音頓了頓,開始儘量平靜地描述。
他說得不快。
從三十萬並發開始說。
說他們復現了波士頓那幾篇預印本里公開出來的底層邏輯,寫了兩個月代碼,買了能買到的最好商用伺服器,三十萬並發時,系統跑得像一塊涼水裡的石頭,紋絲不動。
然後是五十萬。
一開始能撐,後面響應時間越來越長,內存堆積,主進程被系統殺死。
八十萬。
死機。
一百萬。
瞬間CPU拉滿,內存見頂,伺服器像被人把腦子裡所有神經同時點燃,直接宕掉。
後來他們試圖在工程外圍掛強制回收腳本。
楚戈說到這裡的時候,聲音里終於出現了一點壓不住的疲憊。
「然後燒了一台伺服器的電源。」
陳拙安靜地聽著。
他沒有插話。
特倫頓這邊的隊伍向前移動,陳拙跟著往旁邊挪了一步,把手機夾在肩膀和耳朵之間,雙手搬起一箱新的麵包。
伊利亞看了他一眼,皺眉。
「你在跟誰講電話?你現在像一個在戰場上接聽銀行推銷的人。」
陳拙偏過頭,用肩膀壓著手機,騰出一隻手扶了一下快要滑下去的紙箱。
「等一下。」
他用中文對電話那頭說了一句,又轉頭看向伊利亞。
「我朋友的機器快死了,情況比你的鞋嚴重。」
伊利亞低頭看了一眼自己的皮鞋,臉色明顯更差了。
「這很難說。」
陳拙沒再理他。
阿米爾從他手裡接過麵包箱,目光落在陳拙耳邊的手機上,又很快移開。
楚戈那邊似乎也聽到了這一句,但沒有追問。
他繼續說。
「代碼我們查了三遍。」
「沒有內存泄漏,沒有指針越界,也不是線程池邏輯寫錯。」
「工程上的問題能試的都試了,但一到極值點,那個矩陣就太大了,機器吃不下。」
他的聲音低了一些。
「拙哥,我現在就想問你一句。」
樓梯間裡似乎有風聲。
「你那個代數底座,是不是本來就不該這麼用?」
陳拙終於停下了手裡的動作。
他站在教堂側門旁,轉過身,看向遠處那條被雪水和泥巴混成灰黑色的街道。
陳拙沉默了幾秒。
「你們直接用了完整結構?」
楚戈那邊安靜了一下。
「嗯。
「」
「完整矩陣?」
「嗯。」
「沒有在生成前拆域?」
楚戈愣了一下。
「我們是在調度層之後做的切分。」
「那就是生成完再切。」
電話那頭沒有聲音。
陳拙伸手從箱子裡取出一罐肉醬,放到桌板上,又順手把旁邊那袋快滑下去的麵包扶正。
「那不死才奇怪。」
這句話說得很輕。
沒有責備,也沒有嘲笑。
就像在說一件非常普通的事實。
電話那頭,楚戈呼吸停了一瞬。
「什麼意思?」
陳拙看了一眼身邊正在排隊的流浪漢,轉身往教堂裡面走了幾步,避開最吵的人群。
前廳里稍微安靜一些。
亞伯拉罕看了他一眼,沒有跟上,只是繼續站在門口守著隊伍。
陳拙靠在一張破木桌旁,低頭看著桌面上散落的麵包屑。
「那篇東西不是給你們這種機器直接跑的。」
他說。
「它是一個數學閉環。」
「我寫它的時候,討論的是高維並發對象在代數空間裡的完整映射和一次性降維,它默認的是,在極值點出現時,承載它的系統有能力把完整對象先托住,再壓下去。」
楚戈沒有說話。
陳拙繼續道:「你們現在的問題不是代碼錯了,也不是伺服器壞了。」
「是你們讓那個完整對象出現了。
17
電話那邊,楚戈的聲音變得更低。
「完整對象不能出現?」
「在你們的機器上,不能。」陳拙說。
「完整矩陣一旦生成,就已經超過你們硬體能承受的範圍了。後面再寫回收腳本,就像盤子已經扣在地上了,你再研究怎麼端穩,來不及。」
「剪得動嗎?」
楚戈沒有回答。
陳拙聽見電話那頭有很輕的呼吸聲。
他知道楚戈聽懂了。
所以他沒有繼續解釋「為什麼剪不動」。
楚戈不是數學家,但他是一個足夠優秀的工程師。
陳拙只需要把那條線指出來,楚戈自己就能看到線後面的牆。
過了一會兒,楚戈才開口。
「可是原論文裡的結構就是完整閉合的。」
「對。」
「如果不完整,數學上不就塌了嗎?」
「看你在哪個層面上要求完整。」
陳拙說。
他低頭看著桌面上的麵包屑,伸出手指,在木桌上隨手劃了一下。
「你還記得以前宿舍里,大勇問過一個材料受力的問題嗎?」
「哪次?」
「他用鋼管和鋁棒抵消熱膨脹那次。」
楚戈沉默了一下。
「記得。」
「那不是完美材料。」
陳拙說。
「它只是讓兩個不完美的東西在某個局部區間裡互相抵消,整體上當然不優雅,也不純粹,但在那個溫度範圍內,它穩定。」
「你們現在也一樣。」
陳拙停頓了一下,聽見外面伊利亞又在抱怨有人踩了他的鞋。
「你們不需要完整的全局最優。」
「你們只需要局部不炸。」
電話另一端,楚戈的呼吸聲變重了一點。
「怎麼做?」
「你別問我代碼。」
陳拙說得很乾脆。
「我看你們那東西,大概跟你看大勇的合金配比差不多。」
電話那頭,楚戈終於低低笑了一聲。
很短。
但那股壓得快要發硬的東西,似乎因為這一句鬆了一點。
陳拙繼續道:「但從數學上說,你們不該讓那個矩陣完整出現。」
「別等所有並發請求匯成一個整體再降維。」
「在它進入完整映射之前,先把輸入域拆開。」
楚戈沒說話。
陳拙抬起頭,看向禮拜堂的方向。
門縫裡能看見那塊破舊黑板的一角。
「比如一百萬。」
陳拙說。
「你們現在把它當成一個一百萬的整體去算,所以它會生成一個你們機器托不起的高維對象。」
「但一百萬不是一百萬。」
楚戈聽到這句話,忽然有一種很熟悉的感覺。
當年在科大宿舍里,陳拙給王大勇解釋實變函數的時候,也曾用這種像拆積木一樣的語氣,把一個看起來龐大而沉重的東西拆成很多個簡單到令人發愣的部分。
陳拙繼續道:「一百萬可以是二十個五萬,也可以是五十個兩萬,重點不是數字怎麼分,重點是每一塊內部必須能夠獨立閉合。」
楚戈的手指下意識地按在樓梯間粗糙的牆皮上。
「局部閉合?」
「嗯,每一個局部塊內部,保留完整映射,塊和塊之間,不傳遞完整矩陣,只傳遞邊界量,邊界量必須低維,必須固定,必須允許誤差。」
電話那頭安靜了足足五秒。
然後楚戈的聲音忽然變得快了一點。
「也就是說,不能做全局調度,要做分片局部調度。」
「這是你的說法。」
陳拙糾正道。
「我的說法是,不要把整個空間一次性抬起來,你們抬不動。」
「那塊和塊之間的數據衝突呢?」
「用邊界常數處理。」
「常數C?」
「別用那個。」
陳拙幾乎沒有停頓。
「那個太重。」
楚戈愣住了。
「太重?」
「嗯。
「」
陳拙看了一眼自己的鞋尖。
「原始常數C是為了證明用的,不是給幾台商用伺服器硬背的。」
他說這句話的時候,沒有任何不好意思。
好像一篇震動數學、物理和計算機世界的東西,在他這裡本來就只是某種不適合普通機器的理論工具。
「你們需要一個簡化的邊界常數。」
「它不必維持全局代數優雅,只要能保證兩個局部塊拼接時不發生數據衝突。」
楚戈的眼睛慢慢亮了起來。
「犧牲一部分全局最優?」
「對。」
「換局部穩定?」
「對。」
「那用戶請求在塊之間遷移的時候怎麼辦?」
「那是你的問題。」
陳拙回答得非常自然。
「你是寫代碼的。」
楚戈張了張嘴,忽然又有點想笑。
這個回答太陳拙了。
他確實不懂計算機。
他甚至懶得假裝懂。
可他偏偏把最核心的那道數學門檻,直接踹開了一條縫。
「拙哥。」
楚戈低聲說。
「我能不能理解成,你讓我把完整空間拆成很多個小盒子,每個盒子裡自己算自己的,盒子之間只交換一個很輕的邊界標記?」
「差不多。」
「這個邊界標記不追求數學上的完美閉合,只保證工程上不衝突?」
「不是工程上。」
陳拙又糾正了一次。
「是局部代數關係不衝突。」
楚戈立刻改口。
「對,局部代數關係不衝突。」
陳拙想了想,又補充了一句。
「還有一點。」
「你說。」
「不要在映射之後回收。」
「那在哪?」
「映射之前。」
楚戈整個人猛地站直,樓梯間裡的燈因為他的動作閃了一下。
「映射之前?」
「你們之前的外掛回收為什麼燒機器?」陳拙問。
楚戈立刻答道:「因為強制回收切斷了同調映射,矩陣找不到對應節點,瘋狂重試。」
「所以不要切已經映射過的東西。
陳拙說。
「在它成為矩陣的一部分之前,就決定它屬於哪個局部塊。」
「如果它不屬於任何塊,就先讓它等。」
「別讓它進去。」
楚戈握著手機的手指慢慢收緊。
這不是代碼,這也不是一個可以直接複製粘貼的解決方案。
但這是一條路。
一條他們自己可以走的路。
輸入域前置分片。
局部閉合。
低維邊界量。
簡化邊界常數。
映射前限流,而不是映射後回收。
這幾句話在楚戈腦子裡迅速拼成了一張新的架構圖。
不是原論文裡那個巨大,完美,漂亮到不講道理的數學聖殿。
而是一排低矮,結實,能扛風雨的倉庫。
不好看。
但能用。
電話那頭,特倫頓的聲音忽然又變得嘈雜起來。
有人大聲爭執,亞伯拉罕低沉的警告聲從遠處傳來,伊利亞用他那極具穿透力的俄式英語罵了一句什麼。
陳拙側過頭,看見救濟隊伍前面有兩個男人因為多拿一袋麵包推搡起來。
亞伯拉罕的棒球棍已經抬了起來。
阿米爾默不作聲地走過去,站在兩人中間。
陳拙收回目光,對電話那頭說:「我這邊快從分麵包變成分人了。
楚戈怔了一下。
他這才重新意識到,自己這通電話並不是打到了普林斯頓某間安靜的辦公室里。
對面很吵。
有風聲,有人的爭執聲,有箱子拖動的聲音,還有一個陌生男人用帶彈舌的口音不耐煩地罵街。
「你在哪?」楚戈下意識問。
「特倫頓。」
「幹嘛?」
「分麵包。」
楚戈一時間沒反應過來。
「啊?」
陳拙看著門外泥濘街道上排隊的人群,語氣很平常。
「幫一個神父分臨期食品。」
電話那頭沉默了兩秒。
楚戈忽然不知道該說什麼。
深市南山科技園的樓梯間裡,白熾燈忽明忽暗。
門後是十幾台伺服器,是合同,是上線時間,是百萬並發,是一家公司生死存亡。
而電話另一端,陳拙站在新澤西某個貧民區破舊教堂的門口,手裡可能還沾著麵包屑正在給流浪漢分食物。
兩個世界隔著半個地球。
卻被一通國際長途勉強連在一起。
楚戈靠著牆,忽然笑了一下。
「你還真是......在哪都挺忙。」
陳拙沒有接這句。
他只是說:「楚戈。」
「嗯。」
「別去碰完整模型。」
陳拙的聲音在嘈雜背景里依然穩定。
「你們用不起,不丟人。」
楚戈喉嚨動了一下。
這句話比任何安慰都有用。
不是你們差。
是這東西本來就不是這麼用的。
「我知道了。」
楚戈低聲說。
陳拙繼續道:「你們現在要做的,是寫一個你們自己的版本。」
「不是復現我那篇東西。」
「是借它的骨架,重新搭一個能在你們機器上站住的東西。」
楚戈閉上眼睛,深吸了一口氣。
「明白。」
「別問我代碼。
「」
「不會問。」
「別問我商業。
「不問。」
「你們自己決定能犧牲多少延遲,能接受多少等待,能把輸入域拆成多碎。」
「好。」
陳拙看了一眼教堂門口,亞伯拉罕已經把那兩個推搡的男人分開了。
「我掛了。」
楚戈握著手機,忽然開口。
「拙哥。」
「嗯?
「謝了。」
電話那頭安靜了一下。
然後陳拙的聲音傳來。
「別燒第二台伺服器了。」
楚戈愣了半秒,隨即低低笑出了聲。
「儘量。
」」
>