[問題] GPU-bases SQL 資料庫

作者: hn12404988 (Willy)   2016-08-04 16:10:55
想請教有沒有人有使用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一層
希望可以聽到有經驗的人的分享,謝謝
作者: a1u1usul3 (Q-Max)   2016-08-04 16:22:00
query是由db那邊負責的吧,要做得應該是db那台server有GPU,接到query的時候由GPU去加速,然後回傳給client
作者: hn12404988 (Willy)   2016-08-04 17:10:00
還在自己的電腦測試,db就在同一台,cpu和GPU都有你說的「GPU加速」有沒有詳細一點的?query執行我不想經過CPU,不確定mariadb能否作到
作者: obarisk (OSWALT)   2016-08-04 19:28:00
可是你不會想在資料庫裡面算啊,io的大小也有限
作者: soem (流水)   2016-08-04 22:22:00
query執行全部都不經過CPU的設計很沒有必要,還是有一些比較適合用CPU算,除非你整個db跑在VRAM裡面
作者: a1u1usul3 (Q-Max)   2016-08-05 02:34:00
那兩篇論文看起來是只能支援select的subset有些比較困難的語法可能就不適用如果你是要找現成的,那就各家找找看,應該會有有支援GPU加速的現成DB可以用如果你要自己寫,那就去寫吧吃到query的時候,判斷是否夠簡單,然後從Main memory透過PCIE丟到GPU,然後比對完再傳回結果
作者: uranusjr (←這人是超級笨蛋)   2016-08-07 06:11:00
就算 query 夠快, 直接用在普通資料庫大概也會卡在 diskaccess, 除非整個 dataset 可以 in-memory我總覺得你的方向好像不太對, 改找 caching 之類的方案似乎會更適合, 但你也沒說你到底想拿來幹什麼
作者: KAOKAOKAO (鬼斗)   2016-08-17 15:36:00
GPU的各個thread無法完全獨立 如果條件控制太亂 效能會非常差

Links booklink

Contact Us: admin [ a t ] ucptt.com