There are two types of high-performance graph processing engines: low- and high-level engines. Low-level engines (Galois, PowerGraph, Snap) provide optimized data structures and computation models but require users to write low-level imperative code, hence ensuring that efficiency is the burden of the user. In high-level engines, users write in query languages like datalog (SociaLite) or SQL (Grail). High-level engines are easier to use but are orders of magnitude slower than the low-level graph engines. We present EmptyHeaded, a high-level engine that supports a rich datalog-like query language and achieves performance comparable to that of low-level engines. At the core of EmptyHeaded's design is a new class of join algorithms that satisfy strong theoretical guarantees but have thus far not achieved performance comparable to that of specialized graph processing engines. To achieve high performance, EmptyHeaded introduces a new join engine architecture, including a novel query optimizer and data layouts that leverage single-instruction multiple data (SIMD) parallelism. With this architecture, EmptyHeaded outperforms high-level approaches by up to three orders of magnitude on graph pattern queries, PageRank, and Single-Source Shortest Paths (SSSP) and is an order of magnitude faster than many low-level baselines. We validate that EmptyHeaded competes with the best-of-breed low-level engine (Galois), achieving comparable performance on PageRank and at most 3x worse performance on SSSP.
翻译:高性能图形处理引擎有两种类型的高性能图形处理引擎:低级和高级引擎。低级引擎(Galois、PowerGraph、Snap)提供优化的数据结构和计算模型,但需要用户写出低级要求代码,从而确保效率是用户的负担。在高级引擎中,用户用像数据仪(SociaLite)或SQL(Gilight)这样的查询语言写作。高级引擎较容易使用,但数量级比低级图形引擎慢。我们展示了空头引擎,这是一个支持丰富数据类查询语言的高级引擎,其性能可与低级引擎的性能相当。在“空面”设计的核心是一个新的组合算法,它满足了强大的理论保证,但迄今没有达到与专业图形处理引擎(Grail)相似的性能。为了达到高性能,空头引擎推出一个新的组合引擎架构,包括更差的查询优化和数据布局,利用单级的多级数据(SIMD)平行。随着这个架构,在最低级的级别上,低级的内位超性能性能性能性能性能和最低水平的SPLSPLSPLSD,在三个级标准级的级别上将达到一个最高级的级的级的级的级的级级的性能,在高级级级级的级的性能,在高级排序,在高级和低级的级的级排序上,在高水平上,我们级和低级平级平级指令。