GPU LSM: A Dynamic Dictionary Data Structure for the GPU [pdf]
arxiv.org
arxiv.org
Having fast dynamic data structures on the GPU is of huge utility. People think that you can't make these sorts of things efficient due to thread divergence, but if you do it right, the massive flops and memory bandwidth of a GPU can really work in your favor.
[1] GraphBLAS http://graphblas.org
[2] OmniSci MapD DB https://github.com/omnisci/mapd-core
[3] SuiteSparse::GraphBLAS http://faculty.cse.tamu.edu/davis/suitesparse.html
[4] Previous Discussion https://news.ycombinator.com/item?id=18099520
Our recent work implements a subset of GraphBLAS operations for GPU and compares them to Gunrock in breadth-first-search [1]. Our implementation of a subset of GraphBLAS is comparable to Gunrock performance for power law graphs, but are worse for mesh graphs. Gunrock uses a different load-balancer in Advance for those graphs and the load-balancer we use in the analogous operation (matrix-vector multiplication) isn't as optimized for mesh graphs. We definitely want to collect data in more applications than just BFS, so we're working on that now.
The code is open-source, so feel free to check it out! [2]
Imagine being able to keep a dynamic dictionary on the GPU to support dictionary-encoded strings or enforcing of unique ids. We do these sorts of things on the CPU now, and have made them relatively fast, but making them faster with GPU-acceleration could significantly speed up import, a major focus of ours.
We also currently build our hash maps on the fly for joins, and can cache the hash table when it makes sense, but have to rebuild from scratch when there are updates or deletes. We could likely build on this sort of data structure to be able to not start from scratch every time there is an update/delete.
Sure there are lots of other uses, just thinking off the top of my head.
And now we wait and see if this is true, or if we'll see Cunningham's Law in action[0]. Either way we'll learn something.
Anyway, a general-purpose dictionary data structure for the GPU sounds like it should unlock a whole lot of new possible use-cases, no? Are there any scenarios where this would be immediately beneficial?
(This experimental program analyse human text and detect if there is a reasoning error, if so, which one). It already has 100% of success for syllogisms. But I will in the future be hit by combinatorial explosion and gpu acceleration will help me, even if dictionnaries are not my main data structure.
I will not describe my algorithms, but still, I don't use overhyped neural networks (which are not well designed for true NLU) instead I use a normal program like opencog which allow top-down inferences.
Good luck with your research!
https://www.quantamagazine.org/new-ai-strategy-mimics-how-br...
What's more important is divergence, ie. being able to schedule threads that run the same way. A GPU amortizes the program counter (generally) and control logic across a bunch of threads, and if they diverge in their code flow, you end up wasting a bunch of resources on threads that are just masked off.