前沿與後摩爾時代

近資料運算(near-data computing)

假設你經營一家貨運公司,一位客戶問:「我的一千個包裹裡有幾個重超過五公斤?」你可以把全部一千個包裹運到總部、在那裡秤、再把答案「四十二」運回去——這是對卡車的巨大浪費。或者你可以派一名職員到倉庫,就在包裹所在之處秤,只把那個數字送回來。近資料運算就是把第二個點子用在電腦上:與其把大量資料拖到中央處理器,不如把一點點運算移到資料已經所在之處,只把那個小小的答案送回來。

近資料運算是一個廣泛的家族,把它看成一道光譜會有幫助。一個極端是記憶體內運算,把運算放進記憶體晶片本身。較溫和的版本是把一顆中等的處理器放在記憶體堆疊正旁邊或同一封裝上——是「近記憶體」而非嚴格的「記憶體內」。再往外,「運算型儲存」把一顆小處理器放進 SSD 裡,於是像「數出符合這個篩選條件的列數」這樣的查詢就在硬碟上跑,只回傳那個計數,而不是整份資料集。每一種情況下,原則都一樣:運算又便宜又充裕,但搬移資料又慢又耗能,所以把工作推向資料,而不是把資料拉向工作。

這之所以重要,是因為現代系統裡主要的瓶頸與能量成本是資料搬移、而不是算術——這個主題貫穿整個後摩爾的地景。近資料運算往往比完整的記憶體內運算更容易採用,因為你能用一顆放在資料附近、能力較強的一般處理器,而不必把邏輯硬塞進記憶體單元裡。誠實的提醒是:它只有在運算能大幅縮減資料時才划算——像是把好幾 GB 變成幾個數字的篩選或彙總。如果那個操作反正得把大部分資料送回去,把運算移到外面就幾乎沒好處,而為這些分散的小引擎寫程式與管理它們所增加的複雜度,也就不值得了。

一顆運算型儲存 SSD 裝著一個 100 GB 的日誌檔。資料庫問硬碟:「只回傳含有 ERROR 的那幾行」。SSD 內部一顆小處理器在本地掃過檔案,把符合的 50 MB 送回來,而不是把整整 100 GB 串流給 CPU——越過匯流排的資料減少了兩千倍,最終答案卻一樣。

當工作會縮減資料時,就在資料附近做、只把答案送回來,勝過把所有東西都拖回家。

近資料運算只有在運算能大幅縮減資料時才贏——像篩選或彙總。如果大部分資料反正得旅行回來,把運算往外推只是增加複雜度、好處卻很少。

又稱
near-memory computingnear-data processingcomputational storage近資料運算近記憶體運算