從SIMD與AVX-512說起,你明白了嗎?
昨天提到了PG 16開始支持SIMD了,并且我也說了很多數(shù)據(jù)庫早就開始使用SIMD來充分利用CPU廠商提供的擴展指令集,特別是INTEL的AVX-512。很多DBA可能不太關(guān)注硬件,因為數(shù)據(jù)庫雖然依賴于某些硬件平臺,但是可以 相對獨立的運行,在大多數(shù)情況下,DBA不太需要去關(guān)注硬件的細節(jié)。不過隨著現(xiàn)代硬件的不斷發(fā)展,數(shù)據(jù)庫與硬件的結(jié)合越來越緊密,數(shù)據(jù)庫產(chǎn)品也會充分的利用現(xiàn)代硬件的特性來加速某些任務(wù)。比如說通過對SIMD的支持來加速運算速度,從而提高行列轉(zhuǎn)換,數(shù)據(jù)壓縮,加解密等方面的性能。甚至有些數(shù)據(jù)庫產(chǎn)品已經(jīng)開始支持使用GPU的算力來進一步提高這些任務(wù)的性能。
AVX-512是Intel在2013年提出的一組512位擴展指令集,用于x86指令集架構(gòu)(ISA)的高級向量擴展(Advanced Vector Extensions,SIMD)指令。它可以加速諸如科學模擬、金融分析、人工智能/深度學習、3D建模和分析、圖像和音頻/視頻處理、加密和數(shù)據(jù)壓縮等工作負載和用例的性能。通過SIMD,數(shù)據(jù)庫產(chǎn)品可以調(diào)用AVX-512、SSE等擴展指令集的功能,同樣也可以使用ARM芯片上的ASIMD、SVE2等指令集來達到類似的效果。
近些年GPU火起來了,在科學計算上GPU有著CPU無法比擬的性能。GPU通常擁有更多的計算單元和更高的內(nèi)存帶寬,因此在處理大規(guī)模的數(shù)據(jù)并行計算時,GPU的性能優(yōu)勢很明顯。例如,在深度學習領(lǐng)域,GPU可以比CPU快幾十倍甚至上百倍。SIMD的主要目的是利用一個指令同時對多個數(shù)據(jù)進行相同的操作,從而實現(xiàn)空間上的并行性和提高程序的運算速度。SIMD可以利用一組指令對多組數(shù)據(jù)通進行并行操作,如加法、乘法、比較等。SIMD可以應用于圖像/音視頻處理、數(shù)據(jù)分析、科學計算、數(shù)據(jù)加密和壓縮和深度學習等大規(guī)模運算需求的應用場景。通過SIMD,可以讓CPU在這方面的劣勢得到一定程度的彌補。在使用AVX512指令集進行浮點數(shù)加法運算時,可以一次對8個雙精度浮點數(shù)或16個單精度浮點數(shù)進行操作,相比于標量運算,可以提高8倍或16倍的性能。
雖然沒有做過多的宣傳,不過Oracle數(shù)據(jù)庫很早就開始使用SIMD指令集做一些計算任務(wù)。在內(nèi)存列存儲中,使用SIMD指令集對數(shù)據(jù)進行壓縮、解壓縮、掃描、過濾、聚合等操作;在哈希連接中,使用SIMD指令集對數(shù)據(jù)進行哈希、構(gòu)建、探測、收集等操作;在向量化表達式計算中,使用SIMD指令集對數(shù)據(jù)進行算術(shù)、邏輯、比較等操作。這些操作都可以提高Oracle數(shù)據(jù)庫的性能和效率。
在其他數(shù)據(jù)庫中,也有很多使用了SIMD來提高計算類任務(wù)的性能。比如TiDB也是比較早使用SIMD的數(shù)據(jù)庫產(chǎn)品。最典型的是在TiFlash上,在表達式計算中,使用了SIMD指令集來加速向量化計算,提高了表達式的執(zhí)行效率;在編碼和解碼中,使用了SIMD指令集來加速數(shù)據(jù)的壓縮和解壓縮,減少了數(shù)據(jù)傳輸和存儲的開銷;在哈希函數(shù)中,使用了SIMD指令集來加速哈希值的計算,提高了哈希表的性能;在排序算法中,使用了SIMD指令集來加速數(shù)據(jù)的比較和交換,提高了排序的效率。
Oceanbase也比較重視將向量化引擎引入數(shù)據(jù)庫,利用SIMD來提升一些復雜分析類任務(wù)的性能。提高數(shù)據(jù)庫單核計算性能,降低查詢響應時間數(shù)據(jù)庫來說至關(guān)重要。為幫助客戶解決 HTAP 混合負載下數(shù)據(jù)查詢效率難的問題,OceanBase 引入向量化技術(shù)設(shè)計了向量化查詢引擎,實現(xiàn)了 HTAP 場景下復雜分析查詢性能的大幅提升。在 TPC-H 30TB 測試場景下,OceanBase 向量化引擎的性能是非向量化的 3 倍。對于 Q1 這種聚合分析且計算密集的 SQL 查詢,性能提升約 10 倍。測試結(jié)果可以證明,向量化引擎對提升 SQL 執(zhí)行效率、降低用戶的查詢響應時間具有相當明顯的效果。
上面這張圖來自于Oceanbase官方,并非我們自己的測試結(jié)果,從中可以看出向量化引擎的效果還是相當好的。目前引入向量化計算,更好的利用現(xiàn)代CPU的能力已經(jīng)是廣大數(shù)據(jù)庫廠商的共識。對于數(shù)據(jù)庫廠商和用戶來說,這都是一件好事情,不過對于廣大DBA來說,不能算是好事情。因為一個數(shù)據(jù)庫產(chǎn)品,在CPU類型不同的服務(wù)器上,甚至在相同架構(gòu),但是存在代差的服務(wù)器上,可能跑出來的性能會差異較大,這會讓人十分蒙圈。這年頭,干DBA也真是一件十分苦逼的事情。