宋顏教授彙報完,其他單位依次彙報自己負責的技術方案,同時接受大家的質詢。
硬體、儲存、人機互動、電源、分離元器件……
不知不覺就到了中午,眾人吃了點簡餐,繼續開會。
陳教授站起來,走到臺上:“同志們,今天聽了大家的方案,非常具有可行性,特別是宋教授的方案,非常好,但是我有一個問題,不是問宋教授,是問我們在座的每一個人。”
他轉過身,重新掛上宋教授的那張系統框圖。
“宋教授,這個方案,五十六個運算單元,是一個計算核心。對不對?”
宋顏點點頭。
陳教授繼續說:“那如果我們將來需要更大的算力呢?比如,魏知遠教授的數字孿生,從現在的1024×1024網格,升級到2048×甚至4096×4096。一個核心夠不夠?”
宋顏沉默了幾秒:“不夠。”
陳教授點點頭:“那怎麼辦?重新設計一個更大的核心?112個單元?224個單元?”
他轉過身,面對全場。
“同志們,我今天要提一個思路。不是否定宋教授的方案,是在這個方案的基礎上,往前走一步。”
他拿起粉筆,在黑板上畫了一個圖。
一個圓圈,周圍圍著幾個圓圈,都用線連到中心。
“這是宋教授的方案,星型拓撲,一箇中心控制,七個運算晶片,這是一個計算節點。”
他又畫了一個更大的圖,中心一個大圓圈,周圍圍著幾個小一點的圓圈,每個小圓圈周圍又圍著幾個更小的圓圈。
“如果我們把宋教授的這個節點,看作一個單元。那麼,我們能不能把多個這樣的單元連線起來,構成一個更大的系統?”
他用教鞭指著那些圓圈。
“這是多核心並行系統。不是用一個核心算,而是用多個核心一起算。一個大的計算任務,切分成小塊,分給不同的核心同時算。算完之後,把結果拼起來。”
他放下教鞭:“這個思路,在數學上,叫分而治之。在計算機領域,叫平行計算。”
臺下安靜下來。
陳教授繼續說:“我剛才聽宋教授講的時候,一直在想一個問題。我們這個崑崙工程,目標是甚麼?是造一臺機器,解決當前的問題?還是造一個平臺,讓後人能在這個平臺上繼續往前走?”
他看著全場:“我認為,應該是後者。”
“如果只是造一臺機器,那宋教授的方案就夠了。56個單元,夠魏教授用幾年。但幾年之後呢?再從頭開始,重新設計一個新核心?”
“如果我們要造的是一個平臺,那就必須在今天的方案裡,留下生長的餘地。讓後人可以透過連線多個核心,獲得更大的算力。”
他指著黑板上的那個大圖。
“這叫多核心並行。在這個架構裡,宋教授的那個核心,只是一個子核心。上面還有一個全域性管理核心,負責把任務切分、分發、協調、合併。”
“全域性管理核心的功能是甚麼?第一,任務分發。把一個大的計算任務,比如1024×1024的矩陣乘法,切分成子任務,分配給各個子核心。第二,資料協調。確保所有子核心需要的數已經到位,算完之後的結果能正確合併。第三,狀態監控。盯著所有子核心,誰出問題了,馬上處理。”
他頓了頓:“這是第一層。當子核心的數量增加到幾十個的時候,單一的全域性管理核心會變成瓶頸。那時候,就需要層次化管理。子核心上面有機櫃管理器,機櫃管理器上面有系統總控。”
他放下教鞭:“同志們,這不是天方夜譚。這是國際計算機界正在探索的前沿方向。我今天提這個思路,不是要大家現在就做幾十個核心的機器,是希望大家在設計今天這個核心的時候,給未來留一扇門。”
首長坐在第一排,一直沒有說話。
聽到這裡,他轉過頭,看著旁邊的劉星海:“老劉,陳教授說的這個,你能不能用大白話給我解釋一下?”
劉星海點點頭,站起來。
“首長,我打個比方。”他說,“宋教授設計的這個核心,好比一個能獨立作戰的步兵班。有班長,有戰士,能自己解決一個小戰鬥。”
“陳教授的意思是甚麼呢?是說,將來我們要打大仗了,一個班不夠,要把幾個班編成一個排。那怎麼辦?得有個排長,得有個通訊兵,得有個統一的指揮體系。”
他指著黑板上的圖:“這就是陳教授說的全域性管理核心。它不親自打仗,它負責告訴每個班,你打哪個方向,甚麼時候進攻,甚麼時候撤退。幾個班打完之後,它把戰果彙總起來,報告給上級。”
首長點點頭:“明白了。那層次化管理呢?”
劉星海繼續說:“打仗人多了,一個排不夠,要編成一個連。連部下面有幾個排,排下面有幾個班。這就是層次化管理。總指揮不直接指揮士兵,他指揮連長;連長指揮排長;排長指揮班長。一層一層下去。”
首長笑了:“老劉,你這個比方打得好。我懂了。”
他看向陳教授:“陳教授,你這個思路,我支援。但問題來了,這個多核心的機器,現在能造嗎?”
陳教授搖搖頭:“造不了。技術上還有很多難題沒解決。”
“那你說這個幹甚麼?”首長問。
陳教授笑了笑:“首長,我說這個,不是要現在就造。我是希望,在宋教授設計這個核心的時候,給它留幾個介面,留幾條線,讓它將來能跟別的核心連起來。就像蓋房子,現在只蓋一間,但地基要打好,將來想加蓋的時候,直接往上接就行,不用把房子拆了重蓋。”
首長點點頭,看向宋顏:“宋教授,你能留這個介面嗎?”
宋顏想了想:“能。但要多佔幾個引腳,多幾條控制線。”
“佔就佔。”首長說,“現在多花點功夫,將來少走彎路。”
陳教授說完,臺下沉默了。
但沉默只持續了幾秒,就有人舉手。
是秦世襄。
“陳教授,您這個思路,我支援。但我有幾個技術問題,想問清楚。”
他站起來,走到臺上,拿起粉筆。
“第一,通訊瓶頸。”他在黑板上畫了兩個方塊,中間畫了一條線,“兩個核心之間交換資料,這條路有多寬?能跑多快?如果這條路太窄,資料堵在路上,就算有100個核心,也只能乾等著。”
他看著陳教授:“您那個全域性管理核心,怎麼保證資料通路不堵?”
陳教授想了想:“這個問題,我現在沒有現成的答案。但方向是明確的。第一,資料通路要足夠寬。不能只是一根線,要一組線。第二,交換方式要高效。不能一個核心發完資料另一個才能發,要能並行交換。第三,協議要簡單。越複雜的協議越慢。”
秦世襄點點頭,在黑板上寫下“通訊瓶頸”四個字。
包康建舉手了。
他走到臺上,拿起粉筆,在秦世襄寫的“通訊瓶頸”旁邊,又寫了四個字:“同步難題”。
“陳教授,秦教授說的是資料通路的問題。我說的是時間同步的問題。”
他指著黑板上的兩個方塊:“兩個核心一起算一個任務,怎麼保證它們步調一致?核心A算得快,核心B算得慢,A等不等B?如果不等,結果怎麼拼?如果等,快的那個就閒著,效率上不去。”
他看向陳教授:“這個同步問題,比通訊瓶頸更難。幾十個核心要同步,需要非常複雜的時鐘網路和控制邏輯。”
陳教授點點頭:“包教授說得對。同步是平行計算的死穴。但也不是完全無解。”
他走到黑板前,在“同步難題”旁邊又寫了幾個字:“松耦合”、“非同步並行”。
“一種思路,是松耦合。讓各個核心相對獨立,不需要每步都同步。A算完自己的那塊,結果先放著;B算完自己的那塊,也先放著。等所有核心都算完了,再統一合併。這叫‘分而治之,非同步執行’。”
“另一種思路,是非同步並行。每個核心按自己的節奏跑,需要資料交換的時候,透過握手訊號來協調。你給我發個訊號,說你算完了;我收到訊號,知道可以取你的結果了。這樣不需要全域性同步,只需要區域性協調。”
他放下粉筆:“這兩種思路,都比緊耦合、全域性同步容易實現。但代價是,程式設計複雜。程式設計師要想清楚,甚麼時候該同步,甚麼時候可以非同步。”
包康建點點頭,在本子上記了幾筆。
魏知遠舉手了。
他走到臺上,拿起粉筆,在“同步難題”旁邊,又寫了四個字:“負載均衡”。
“陳教授,包教授說的是時間同步的問題。我說的是任務分配的問題。”
他指著黑板上的兩個方塊:“一個任務切分成兩塊,分給兩個核心。如果這兩塊一樣大,兩個核心同時算完,完美。但如果一塊大一塊小,大的那個算半天,小的那個算完就閒著,浪費。”
“這叫負載不均衡。幾十個核心的情況下,任務切分要做到完全均衡,幾乎不可能。總有一些核心忙死,一些核心閒死。”
他看向陳教授:“這個問題怎麼解?”
陳教授想了想:“魏教授,這個問題,沒有完美解。只能靠動態排程。”
他在黑板上寫下“動態排程”四個字。
“不是事先把任務切死。是準備一個任務池,誰算完了,自己來池子裡取下一個任務。這樣算得快的核心多幹點,算得慢的核心少乾點,大家都不閒著。”
“代價是,任務池的訪問會變成新的瓶頸。所有人都來池子裡取任務,池子門口的隊就排長了。”
魏知遠點點頭,在本子上記了一筆。
劉星海站起來。
他走到臺上,看著黑板上那些密密麻麻的字:“通訊瓶頸、同步難題、負載均衡......”
他轉過身,面對全場。
“同志們,陳教授今天提的這個思路,把一個問題擺在了我們面前,崑崙工程,到底要做多大?”
他頓了頓:“是做一臺能用的機器,解決眼前的問題?還是做一個平臺,為未來的發展鋪路?”
“這不是一個技術問題,這是一個戰略問題。”
他看向第一排的首長。
首長沉默了很久。
然後他站起來,走到臺上。
他沒有看黑板,而是看著臺下的每一個人。
“同志們,我今天聽了一上午。從宋教授的單核心方案,到陳教授的多核心構想。從通訊瓶頸,到同步難題,到負載均衡。我問一句,這些問題,現在能解決嗎?”
臺下沒有人回答。
首長點點頭:“解決不了。對不對?”
還是沒有人回答。
首長繼續說:“那為甚麼要提?為甚麼要吵?”
他走到陳教授面前:“老陳,你剛才說,要給未來留一扇門。這話說得對。”
他轉過身,面對全場。
“我們這代人,不是隻幹五年、十年的事。我們要乾的是五十年、一百年的事。今天我們造崑崙,不光是給魏教授算數字孿生,不光是給氣象局算天氣預報,不光是給國防科委算彈道。我們是在給中國的計算機事業打地基。”
“地基打多大,決定了以後能蓋多高的樓。”
他指著黑板上那些字:“通訊瓶頸、同步難題、負載均衡。這些問題,現在解決不了,但將來總要有人解決。誰來解決?我們這一代人。如果今天我們不想這些問題,將來的人就要從頭想。”
他頓了頓:“所以,我支援陳教授的思路。單核心要造,介面要留。今天造單核心,明天造雙核心,後天造四核心、八核心。一步一步往前走。”
他看向劉星海:“老劉,你們繼續討論。把這些問題都掰開揉碎了,能解決幾條是幾條。解決不了的,也要記下來,留給後人。”
劉星海點點頭。
首長回到座位。
劉星海看向全場:“同志們,首長說得對。這些問題,今天解決不了,但要記下來。繼續討論。”
接下來,會場炸了鍋。
從物理層吵到邏輯層,又從邏輯層吵到軟體層。
秦世襄帶著一幫搞硬體的,盯著“通訊瓶頸”不放。
資料匯流排到底要做多寬?16位夠不夠?要不要32位?64位?做寬了,晶片引腳不夠;做窄了,資料堵在路上。
包康建帶著一幫搞儲存的,盯著“同步難題”不放。
核心之間要不要用同一個時鐘?如果用,怎麼保證傳輸延遲一致?如果不用,怎麼保證非同步握手可靠?
魏知遠帶著一幫搞演算法的,盯著“負載均衡”不放。
任務切分怎麼做到均衡?動態排程怎麼做才不成為瓶頸?程式設計模型怎麼設計才不讓程式設計師發瘋?
還有一幫人,盯著“可靠性”不放。
幾十個核心一起跑,一個壞了怎麼辦?是整機停擺,還是自動隔離?怎麼設計容錯機制?
吵了兩個小時,沒有結論。
劉星海站起來,敲了敲桌子。
“同志們,停一停。”
會場安靜下來。
劉星海說:“今天吵不出結果,不奇怪。這些問題,全世界都沒人解決。我們能把問題提出來,記下來,就是收穫。”
他看向陳教授:“老陳,你說說,下一步怎麼辦?”
陳教授站起來,走到黑板前。
“同志們,今天我們吵的這些,歸根結底一句話,單核心好做,多核心難做。但難做,不是不做。我們要做的是,在今天這個單核心的基礎上,把介面留好,把協議想好,把坑蹚一遍。”
他在黑板上畫了一個圖。
一個核心,旁邊有幾個空著的虛線框。
“這是我們的計劃。第一期,單核心。造出來,能用。第二期,雙核心。把兩個核心連起來,解決最簡單的並行問題。第三期,四核心。第四期,八核心。一步一步走,每走一步,解決一批問題。”
他放下粉筆:“同志們,這叫演進式發展。不是一口吃成胖子,是一步一個腳印。”
臺下響起一陣掌聲。
但掌聲還沒落,有人站起來。
是計委的周委員,負責經費審批。
“陳教授,您說得對。但我問一個實際的問題,錢呢?”
他走到臺上,看著劉星海:“劉教授,崑崙工程的經費預算,你們報上來了。我算了一下,單核心就要3800萬。”
他從兜裡掏出一個本子,翻開。
“人員經費與智力成本萬。核心硬體,邏輯晶片500萬,磁芯儲存器200萬,電源與機櫃80萬。外圍裝置,磁帶機、讀卡機、鍵盤、示波器、顯示器、印表機,200萬。基礎設施,機房建設、安裝除錯,200萬。”
他合上本子,看著全場:“這是3800萬。一個單核心。”
他又看向陳教授:“陳教授,您說的多核心,一個核心3800萬,兩個核心就是7600萬,四個核心就是一億五千萬。這錢,從哪兒來?”
會場安靜下來。
沒有人說話。
周同志繼續說:“我不是反對技術進步。但錢是有限的。今年的國家預算,已經定了。工業系統的經費,大部分給了6305廠,給了半導體所,給了你們星河計劃各協作單位。崑崙工程的這3800萬,是從牙縫裡擠出來的。”
他看著劉星海:“劉教授,我不是來吵架的。我是來問一個實在的問題,這筆錢,到底怎麼花,才能花得值?”
劉星海沉默了幾秒。
然後他站起來,看向全場。
“同志們,周同志問得對。錢是有限的,必須花在刀刃上。”
他看向夏先生:“夏先生,走單核心方案萬,能不能保證成功?”
夏先生想了想:“劉教授,我不敢說百分之百。但八九成的把握,是有的。”
劉星海點點頭,又問道:“如果走多核心構想,如果要現在做,要多少錢?多長時間?”
夏先生苦笑:“劉教授,現在做不了。技術問題沒解決,時間沒法估,錢也沒法算。”
劉星海點點頭,看向首長。
首長一直沒有說話。