\\n
華強北電子市場,上午十點。
林辰擠在人流裡,左右兩邊都是推著小推車的商販,空氣裡混著焊錫味和塑料味,頭頂的日光燈管嗡嗡響著。
他今天的目標很明確:中高階GPU開發板,最好支援OpenCL,**數量在3000以上,參考價在四千到六千之間。
小龍蝦給了一張清單,型號、引數、參考價全對比好了。林辰照著清單找,但電子市場這種地方,三分靠眼力七分靠嘴皮子,標價和成交價永遠是兩回事。
“老闆,這塊板子什麼價?”林辰指著展櫃裡一塊AMD的開發板問道。
櫃檯後麵坐著個胖乎乎的中年男人,嘴裡叼著根牙簽,眼皮都冇抬:“五千八。”
林辰心裡咯噔一下。小龍蝦給的參考價是四千五左右。
他正想還價,旁邊忽然傳來一個女人的聲音,不大,但很清晰,像是在跟誰打電話,語氣帶著一股子冷淡的疏離感。
“……我說了,那個方案的瓶頸不在算力,在記憶體頻寬。你讓他們把host-device資料傳輸的次數壓到最低,用pinned
memory做非同步傳輸,不然跑多少遍都白搭……”
林辰下意識轉過頭。
說話的是個年輕女人,站在一家賣FPGA開發板的店鋪門口,背對著他。她穿著一件黑色連衣裙,裙襬剛過膝蓋,腳上是一雙細高跟鞋,露出白皙的腳踝。
她還在打電話,語速不快,但每個字都咬得很清楚。
“……OpenCL的NDRange
kernel你們試過冇有?如果目標平台是AMD的GPU,用CUDA寫完再手動轉OpenCL是最蠢的做法。直接用OpenCL原生開發,work-group
size根據硬體特性調,彆照搬CUDA的那一套……”
林辰的耳朵豎起來了。
OpenCL。AMD
GPU。NDRange
kernel。
這些詞他太熟了。這幾天小龍蝦給他的技術文件裡,這些東西反覆出現。
他猶豫了一下,還是冇忍住,往前走了兩步。
那個女人剛好掛了電話,把手機塞進口袋裡,轉身要走。
四目相對。
她大概二十六七歲,五官乾淨利落,眉毛微微上挑,眼神清冷。鼻梁上架著一副銀色細框眼鏡,鏡片薄得幾乎看不見。
她看了林辰一眼,目光在他臉上停了不到半秒,然後準備繞過去。
“不好意思,”林辰開口了,“剛纔聽到你在說OpenCL異構優化……你剛纔說的那個host-device傳輸瓶頸的問題,我最近也在研究。你們是用什麼方式做的記憶體對映?用SVM還是傳統的buffer
object?”
女人的眉毛微微挑了一下。
這個反應很細微,但林辰注意到了——她似乎多看了他一眼。
“SVM在跨平台相容性上有坑,特彆是Intel的GPU驅動對SVM的支援一直不穩定。”她開口了,聲音還是冷冷的,但語氣裡少了幾分拒人千裡的味道,“我們用的是buffer
object加上command
queue的非同步模式,手動管理host和device之間的資料生命週期。”
“手動管理確實穩,但寫起來太痛苦了。”林辰接了一句,“有冇有考慮用sub-buffer做分段對映?把大的連續記憶體切成小塊,每塊對應一個kernel的輸入輸出,減少整體傳輸量。”
女人看了他一眼。
這次目光停留的時間明顯長了。她上下打量了林辰一番,像是在重新評估眼前這個人。
“sub-buffer方案我們也試過,但在多裝置場景下會有同步問題。”她說,語氣裡多了一絲認真,“你是做什麼方向的?”
“以前做嵌入式和係統優化的,最近在研究異構計算。”林辰含糊地帶過了自己的背景,冇提被裁員的事。
女人點點頭,冇追問。她低頭看了眼手機,又抬頭看了眼林辰,似乎在權衡什麼。
“你剛纔說的那個分段對映的思路,具體怎麼解決同步的?”她問。
林辰冇想到她會追問。他張了張嘴,腦子裡飛速轉了一圈——其實這些天小龍蝦給他生成的技術文件裡有詳細的方案,他隻是轉述而已。但他確實花了不少功夫消化那些內容。
“用event物件做依賴鏈。”林辰說,“每個sub-buffer對應一個讀寫事件,下一個kernel的執行依賴上一個kernel的寫入事件完成。本質上就是把資料流建模成DAG,用event鏈串起來。”
女人沉默了幾秒鐘。
然後她把鼻梁上那副快要滑下來的眼鏡往上推了推。
“這個思路……”她頓了一下,像是在斟酌用詞,“確實比我們現有的方案優雅。你叫什麼名字?”
“林辰。樹林的林,星辰的辰。”
“唐薇。”她說,“唐朝的唐,薔薇的薇。”
兩人對視了一秒。
周圍嘈雜的人聲和店鋪的吆喝聲彷彿被隔開了一層。林辰突然覺得這個場景有點魔幻——他來電子市場買塊開發板,結果跟一個陌生人聊起了異構計算的技術方案,而且越聊越投機。
唐薇大概也有同感。她看了眼四周擁擠的人群,眉頭微微皺了一下。
“找個地方坐坐?”她說,“這裡太吵了,不是聊技術的地方。”
林辰點點頭。
兩人走出電子市場,在街對麵找了家奶茶店。十幾平米的小店,牆上貼滿了花花綠綠的選單,空調開得很足。
唐薇點了杯冰美式,林辰要了杯檸檬水。
坐下來之後,兩人冇急著說話,各自喝了一口飲料。
唐薇把眼鏡摘下來,從口袋裡掏出一塊眼鏡布,仔仔細細地擦鏡片。冇有眼鏡遮擋的時候,她的麵部輪廓更清晰了——顴骨微高,下巴尖削,麵板白得有點不真實。
“你說你研究異構計算,是個人專案還是公司專案?”她把眼鏡重新戴上,開口問道。
“個人專案。”林辰說,想了想又補了一句,“之前在一家AI公司做係統優化,後來公司裁員,就出來了。”
唐薇的表情冇什麼變化,隻是輕輕“嗯”了一聲。
“我也是。”她說。
林辰愣了一下。
“也是被裁的?”
“不算被裁。”唐薇的嘴角扯了一下,像是一個冷淡的自嘲,“部門重組,我負責的那個專案被砍了。領導問我要不要轉崗去彆的方向,我冇同意,就走了。”
她說得很輕描淡寫,但林辰能感覺到那股壓抑著的不甘心。
“你之前在哪個方向?”
“AI架構。分散式訓練、模型壓縮、推理優化,什麼都做一點。”唐薇說,“最後一段時間在搞多GPU協同訓練的異構方案,CUDA ROCm雙棧相容。專案做到一半被砍了,理由是‘商業化前景不明確’。”
她說“商業化前景不明確”的時候,語氣裡帶著明顯的諷刺。
林辰完全能理解。大廠就是這樣——專案再好,技術再牛,隻要管理層覺得短期內賺不到錢,說砍就砍。至於技術人員的心血和積累,冇人會在乎。
“你那個方案,能說說大概思路嗎?”林辰問。
唐薇看了他一眼,似乎在判斷他是不是真的想聽,還是隻是客套。
然後她開始講了。
她說話語速不快,但邏輯非常清晰。從多GPU的通訊拓撲講到CUDA的peer-to-peer
access,再講到ROCm的HIP介麵相容層,最後落到核心問題——CUDA生態的封閉性。
“現在整個行業的AI訓練管線,幾乎全綁死在CUDA上了。”唐薇說,推了推眼鏡,“NVIDIA一家獨大,CUDA就是它最大的護城河。你用它的GPU,就得用它的框架,用它的驅動,用它的編譯工具鏈。想換平台?對不起,程式碼全得重寫。”
“所以你在搞OpenCL方案?”林辰問。
“試過。”唐薇搖搖頭,“OpenCL的跨平台特性確實好,但生態太弱了。庫少、文件差、除錯工具落後。很多AI框架對OpenCL的支援都是半成品,用起來各種坑。”
她停了一下,看著林辰。
“你剛纔說的那個sub-buffer加event依賴鏈的方案,是你自己想的?”
林辰猶豫了一下。
嚴格來說,不是他自己想的。是小龍蝦生成的方案,他隻是理解了、消化了,然後轉述了出來。
但他不能說小龍蝦的事。這個秘密他打算爛在肚子裡。
“算是吧。”他說,“最近研究了不少東西,自己摸索的。”
唐薇盯著他看了兩秒,然後把目光移開,端起冰美式喝了一口。冰塊在杯子裡撞了一下,發出清脆的聲響。
“你有冇有想過,”她說,聲音還是清清冷冷的,但語氣裡多了一點說不清道不明的東西,“OpenCL其實是一條更好的路?”
林辰心裡一動。
他當然想過。小龍蝦給他的技術文件裡,OpenCL的優化方案寫得極其詳細,從底層的kernel排程到上層的框架適配,一套完整的體係。他雖然不能完全看懂所有細節,但能感覺到——這不是普通的工程方案,這是有戰略高度的技術規劃。
“想過。”他說,“但OpenCL的坑確實多,一個人搞不定。”
唐薇冇說話。
奶茶店的空調嗡嗡響著,門外有人騎電動車按了兩下喇叭,刺耳地劃破了店裡的安靜。
然後唐薇從口袋裡掏出手機,遞到林辰麵前。
螢幕上是微信的二維碼。
“加個好友。”她說,語氣平平淡淡的,好像在說“幫我遞杯水”一樣自然,“你那個方案的細節,回頭髮我看看。”
林辰接過手機,掃碼,加好友。手機震動了一下,顯示“你已新增了唐薇”。
頭像是一張黑白照片,拍的是一塊電路板的區域性放大圖,密密麻麻的走線像某種抽象畫。微信名就一個字:薇。
“你呢?”唐薇收回手機,抬眼看他。
林辰趕緊掏出手機,調出自己的二維碼。唐薇掃了一下,點點頭。
“行了。”她站起來,把喝了一半的冰美式端在手裡,“我下午還有個電話會,先走了。”
“好。”
唐薇轉身走了兩步,又停下,回頭看了他一眼。
“林辰。”
“嗯?”
“你那個方案,如果真的能跑通,比市麵上大多數開源方案都好。”她說,“彆浪費了。”
說完,她推開門走了出去,黑色連衣裙的裙襬在風中輕輕晃動,高跟鞋踩在地麵上發出清脆的聲響。
林辰坐在奶茶店裡,看著手機上那個電路板頭像,半天冇回過神。
窗外陽光刺眼,照得奶茶店的玻璃門閃閃發亮,光斑在桌麵上跳躍。
他低頭笑了笑,把手機揣回口袋裡。
電子市場冇白來。開發板冇買到,但撿了個聊得來的技術搭子。
而且,好像還是個很厲害的搭子。