《情滿四合院:智者》第138章 研發攻堅(1)

作者:六州的雲王·13小時前

2014年8月。崑崙2號的研發進入最緊張的階段。北京的夏天到了尾巴上,但暑氣還沒散,知了還在叫,聲音比六七月低了一些,像是嗓子啞了。空氣凝滯而沉悶,混著馬路上的灰塵味和樓下花壇裡被曬蔫的草木散出的枯澀氣息,隔著牆都能感覺到外面的熱浪在建築表面結了一層看不見的障壁。研發中心的空調從早開到晚,外機在窗臺上嗡嗡地震動著,連窗戶玻璃都在微微顫抖。

頂層架構定下來了,RTL程式碼開始大面積鋪開。每天都有新的模組寫完初版,每天也都有新的問題冒出來——時序不滿足,面積超標,功耗太高。程徹每天早上到公司的第一件事,不是開電腦,是站在白板前面列當天的任務清單。白板上還殘留著昨天擦掉的痕跡,在日光燈下泛著一層模糊的白色霧影,他拿起板擦先把它清乾淨,細碎的白色粉屑在空氣中飄浮了一會兒才緩緩落定。他習慣用不同顏色的筆——紅色是必須今天完成的,藍色是這周內要完成的,黑色是遠期任務。八月中旬的那塊白板上,紅色佔了三分之二,遠遠看過去像一片紅色的記號密密麻麻地覆蓋著板面。有時候林智早上到的時候,程徹已經站在白板前面了,手裡捏著馬克筆,背對著門口,肩膀微微弓著,像是從早上八點開始就進入了戰鬥狀態。

林智也在。但他每天走得早了——晚上八點就走。留下來的那段空白時間,被程徹自己填上了。從八點到十一點,三個小時,他一個人坐在工位上,寫完林智沒寫完的程式碼,跑完林智沒跑完的模擬,查完林智沒來得及查的資料。辦公室裡只有鍵盤的敲擊聲和伺服器風扇的嗡鳴,偶爾有一聲滑鼠點選的聲音穿插其中,又輕又脆,給那持續的低沉背景加了一個不規則的節拍。偶爾他停下來,整棟樓裡安靜得像沒有人一樣。有時候林智走的時候經過程徹的工位,看到他低頭改程式碼的樣子,腳步會頓一下,但最後還是繼續往前走。兩個人都沒有說話,但兩個人都知道對方知道。

八月末的一個晚上,程徹在改一個關鍵模組的時序。這個模組負責資料通路的排程,是整顆晶片的核心部件之一,資料從這裡進出,一旦出問題整條流水線都會卡住。他改了一個小時,跑了模擬,結果不對。又改了半個小時,再跑——還是不對。模擬器輸出的錯誤資訊一行一行地滾出來,紅色的字元在黑色的終端背景上格外刺眼。他把程式碼從頭看了一遍,一行一行地檢查——邏輯沒問題,語法沒問題,連線沒問題。他發現不是時序的問題——是架構的問題。他之前設計的那個資料通路,在併發訪問的場景下會有競爭條件,兩個請求同時到達的時候資料就亂了。

他試著修了一下——加了一組握手訊號來同步資料。但修完以後,整個資料通路的延遲變長了,影響了後面的所有模組。時序本來剛好夠,這下超了。他靠在椅背上,盯著螢幕上的程式碼,手指在桌面上敲了幾下,節奏越來越快。然後他站起來,走到白板前面,把那個模組的架構圖畫了一遍。畫完之後他看了一眼,搖了搖頭,擦掉。白板擦劃過板面的時候發出一聲尖銳的摩擦聲,在空曠的研發中心裡迴盪。畫第二次——有改進,但還不夠好,延遲還是太高。畫第三次——畫到一半的時候他停下來,手懸在半空中,然後放下筆。筆落在筆槽裡,發出一聲清脆的塑膠碰撞聲。

不是畫不出來。是他不確定最好的方案是什麼。他站在那裡,看著白板上被擦掉大半的殘餘線條,那些模糊的白色痕跡像是一堆沒說完的話。

他走回工位,沒有繼續畫。他坐在那裡,看著螢幕上那段改了三遍還沒跑通的程式碼。螢幕的光刺得眼睛有些發澀,他眨了幾次眼,眼眶裡有一點乾澀的刺痛感。窗外——八月的北京,晚上九點。研發中心裡只剩下他一個人,日光燈的白光照在空曠的辦公區裡,所有的工位都空著,只有他的那一盞燈還亮著,像是黑暗海面上唯一的燈塔。窗外偶爾傳來一聲遠處汽車駛過的聲音,輪胎碾過路面的嗡鳴在寂靜中迅速消散,像是往平靜的水面扔了一顆石子然後水面又迅速恢復如初。

他想了一會兒,拿出手機,翻到林智的號碼。他的拇指在綠色的撥號鍵上方停了一下,然後按了下去。

電話響了兩聲,林智接了。他的聲音沒有剛睡醒的那種沙啞,反而很清醒,像是根本沒有睡熟,手機一響就醒了。

程徹?

怎麼了?

有一個問題——資料通路的競爭條件。我想了三個方案,都不對。

程徹說這話的時候聲音比平時低了一些。他不是那種輕易說的人,但對林智他不需要掩飾。

電話那頭沉默了幾秒。林智沒有說話,但程徹能聽到電話裡傳來輕微的呼吸聲——林智應該已經從床上坐起來了,背景裡還有蘇念模糊的聲音,像是說了一句怎麼了。

你現在在公司?

我過來。

不用。我就問一下——

我過來。

電話掛了。沒有商量,沒有你方便嗎,沒有蘇念知道嗎。程徹看著手機螢幕,通話結束的介面亮了片刻然後變暗。他把手機放在桌上,螢幕朝下扣著,然後靠在椅背上。接下來的三十分鐘裡,他什麼也沒做——沒有改程式碼,沒有畫圖,就坐在那裡等著。空調的風吹在他臉上,他沒有感覺到。他一直在想那個仲裁器的問題,但腦子已經不轉了,像是走到了一個死衚衕裡。他知道林智會來。林智說我過來,那就是會來。

三十分鐘後,林智推開研發中心的門。玻璃門被他推開的時候帶進一陣溫熱的夜風。外面的夜色很濃,他應該是跑了一段路的——T恤的領口微微被汗浸溼了,他站在空調風口下緩了一口氣,冷風打在他微潮的皮膚上,能看見鎖骨上方起了一層細密的雞皮疙瘩,熱氣蒸發時帶走了一部分體溫,帶來一陣短暫的寒意。他穿了一件T恤——從家裡出來的,沒有換衣服。頭髮有點亂,像是跑過來的,左邊的頭髮翹起了一小撮。他的呼吸比平時急促一些,在安靜的研發中心裡聽得很清楚。

哪個模組?

程徹指了指螢幕。

林智拉了一把椅子,坐在他旁邊。椅子腿在地面上颳了一下,發出刺耳的摩擦聲,但他沒有在意。他把椅子往前拉了一點,離螢幕更近一些,整個人的重心往前傾。他看了那段程式碼大概五分鐘,沒有說話。程徹坐在旁邊,也沒有說話。空調在頭頂吹著冷風,發出輕微的嗡嗡聲,冷風打在林智微熱的皮膚上,起了一層細小的雞皮疙瘩。他在腦子裡跑了一遍訊號——從資料通路的輸入端開始,沿著每一條可能的路徑走下去,經過每一個邏輯閘,最後到達輸出端。跑了一遍,沒問題。再跑一遍——在仲裁器那裡卡住了。他停下來,退回上一步,重新走了一遍——仲裁器在併發場景下的優先順序分配有問題。

問題不在資料通路上。林智說。

那在哪?

在仲裁邏輯。你的資料通路是好的——但仲裁器的優先順序策略在併發場景下會導致某個請求被無限期阻塞。我看到入口處有一個沒有處理的等待狀態——高優先順序請求不斷湧入的時候,低優先順序的請求永遠排不上隊。

程徹愣了一下。他沒想到是仲裁器的問題——他一直在資料通路上找原因,方向完全偏了。

他重新看了一遍程式碼。從資料通路開始看,一直追蹤到仲裁器的優先順序邏輯——程式碼只有十幾行,他卻像是第一次看到一樣,逐字逐句地讀過去。他的目光沿著每一行程式碼移動,頭微微低著,螢幕的光在他臉上投下一片藍白色的光影,隨著捲軸的滑動不斷變化明暗。然後他停住了。螢幕上的程式碼他看了幾十遍了,但這一次他看到了一直沒注意到的東西:仲裁器的優先順序策略在併發請求的場景下,低優先順序的請求雖然不會被完全阻塞,但高優先順序的請求如果持續到達,低優先順序的請求就永遠得不到響應。不是死鎖——是餓死。他之前一直盯著資料通路上的握手訊號,從來沒想過問題出在更上游的地方。

。對得說智林

?的來出看麼怎你

。聲一的吱出發,下一了仰後往微微背椅。碼式程段那著看,上背椅在靠他。答回有沒智林

?案方個三了想——說才剛你

?個三哪

。下一了想智林,完說他等。著聽地靜安是只,他斷打有沒智林候時的說他。來下停候時的排並指手三,指手一出就案方個一說每,著劃比上桌在指手候時的述描他。裁仲計設新重、序順先優改修、取快加增——案方個三了述描徹程

。升上會也耗功,大變會積面片芯但,題問決解能。取快加增——案方個一第

?呢個二第

。五十之分百低期預比能可況壞最,降下會能效下況端極但,積面加增要需不——序順先優改修

?個三第

。案方的好最是,了對做果如,雜複——裁仲計設新重

。定確很但,輕很的點他。頭點了點智林

。個三第做就那

。聲響的沉低出發,滾上面地在椅,寸半了挪前往子椅把他。兒會一了默沉,他著看徹程

猜你喜歡

同題材或同分類的其他作品。