[問題] GPU-bases SQL 資料庫

看板Linux作者 (Willy)時間9年前 (2016/08/04 16:11), 9年前編輯推噓5(5016)
留言21則, 6人參與, 最新討論串1/1
想請教有沒有人有使用GPU加速SQL速度的經驗 雖然我還沒實作,但以下是我的猜測 (Centos 7, C++, CUDA in C++, MariaDB, CPU八核心) ﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍ 程式的執行是由int main開始 接著併發一千個cuda thread, parse 「mysqlcppconn」 lib給每個thread (mysqlcppconn 是一個mysql寫給C++ lib, mariadb也可用) 每個thread單獨連接mariadb,mariadb不設thread pool,也就是one thread per connection cuda thread 執行完query, 返回結果給int main ﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍ 根據我的猜測,以下這幾點是不是正確的呢? 1. mariadb的query 執行一樣是CPU,不管是直接c++呼叫,還是從一千個cuda thread 2. 根據1, 只是一千個query在CPU一直task switch 另外,上網查GPU-based的SQL, 好像SQLite目前有支援GPU執行 https://www.cs.virginia.edu/~skadron/Papers/bakkum_sqlite_gpgpu10.pdf http://wscg.zcu.cz/wscg2014/Short%5CK17-full.pdf 我還沒時間仔細看,但直接看結論,似乎SQLite可以真正作到 把「SQLite」包在每個cuda thread,真的是同時執行一千個sql query 而不是還要透過CPU一層 希望可以聽到有經驗的人的分享,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.16.181 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1470298262.A.587.html

08/04 16:22, , 1F
query是由db那邊負責的吧,要做得應該是db那台server
08/04 16:22, 1F

08/04 16:22, , 2F
有GPU,接到query的時候由GPU去加速,然後回傳給client
08/04 16:22, 2F

08/04 17:10, , 3F
還在自己的電腦測試,db就在同一台,cpu和GPU都有
08/04 17:10, 3F

08/04 17:10, , 4F
你說的「GPU加速」有沒有詳細一點的?
08/04 17:10, 4F

08/04 17:13, , 5F
query執行我不想經過CPU,不確定mariadb能否作到
08/04 17:13, 5F

08/04 19:28, , 6F
可是你不會想在資料庫裡面算啊,io的大小也有限
08/04 19:28, 6F

08/04 22:22, , 7F
query執行全部都不經過CPU的設計很沒有必要,還是有一些比較
08/04 22:22, 7F

08/04 22:23, , 8F
適合用CPU算,除非你整個db跑在VRAM裡面
08/04 22:23, 8F
謝謝以上的分享,其實我很久以前就有這種想法 但也因為上述的原因,一直找不到情境適合來作 但最近開始在建立伺服器端的「搜尋」系統,其實現在沒多少資料,也是不必要 但假如這是一個上千萬比資料的伺服器(類似Google搜尋) 不知道Google的作法,但目前我是建立一隻「搜尋爬蟲」,反正大家搜尋的內容大部分一樣 先呈現的結果都是已經事先搜尋好的cache給上去而已,不是即時搜尋,即時會太慢 目前想試試看如何加速搜尋爬蟲,從用CPU改成GPU 目前可能想試試看 1.mariadb的被搜尋資料建立在sqlite 2. 看要用哪一種方法切分資料成一千等分 3. 只是很簡單的"select content from table where content like '%apple%'" 情境:『很簡單的query, 但就是資料量很多』 當然現在資料量很少,但想實作看看 ※ 編輯: hn12404988 (220.133.16.181), 08/04/2016 23:19:57

08/05 02:34, , 9F
那兩篇論文看起來是只能支援select的subset
08/05 02:34, 9F

08/05 02:35, , 10F
有些比較困難的語法可能就不適用
08/05 02:35, 10F

08/05 02:35, , 11F
如果你是要找現成的,那就各家找找看,應該會有有支援
08/05 02:35, 11F

08/05 02:36, , 12F
GPU加速的現成DB可以用
08/05 02:36, 12F

08/05 02:36, , 13F
如果你要自己寫,那就去寫吧
08/05 02:36, 13F

08/05 02:38, , 14F
吃到query的時候,判斷是否夠簡單,然後從Main memory
08/05 02:38, 14F

08/05 02:38, , 15F
透過PCIE丟到GPU,然後比對完再傳回結果
08/05 02:38, 15F

08/07 06:11, , 16F
就算 query 夠快, 直接用在普通資料庫大概也會卡在 disk
08/07 06:11, 16F

08/07 06:12, , 17F
access, 除非整個 dataset 可以 in-memory
08/07 06:12, 17F

08/07 06:13, , 18F
我總覺得你的方向好像不太對, 改找 caching 之類的方案
08/07 06:13, 18F

08/07 06:14, , 19F
似乎會更適合, 但你也沒說你到底想拿來幹什麼
08/07 06:14, 19F

08/17 15:36, , 20F
GPU的各個thread無法完全獨立 如果條件控制太亂 效能
08/17 15:36, 20F

08/17 15:36, , 21F
會非常差
08/17 15:36, 21F
文章代碼(AID): #1NelYMM7 (Linux)
文章代碼(AID): #1NelYMM7 (Linux)