[问题] 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