There has been growing demands in the dynamic graph, in which a continuous stream of graph updates is mixed with graph computation. For the above scenarios, the compact physically continuous structures and the dispersed but logically continuous structures become the two ends of the scale. In principle, the Pointers become the weights. The number of them determines which side of the scale the data structure leans towards. The Pointers make it easier to update the graph but they will result in poor cache locality. This paper presents SoCo, a graph storage and software prefetch co-design for dynamic graph processing that significantly improves on both graph updating and graph computation. We utilize C++20 coroutines and software prefetching techniques to optimize cache miss overhead during computation, and design a data structure that not only meets the requirements of dynamic graph processing but is also more suitable for prefetching. We also conduct extensive experiments on different datasets and show that SoCo could outperform state-of-the-arts by 10.48x on average and at the same time guarantee a pioneer insertion performance (1st place in 5 cases and 2nd place in 2 cases).
翻译:动态图场景中,连续的图更新流与图计算相互交织,此类需求正日益增长。在上述场景中,紧凑的物理连续结构与分散的逻辑连续结构构成了天平的两端。本质上,指针成为权衡的关键——其数量决定了数据结构偏向哪一侧。指针使图更新更便捷,但会导致缓存局部性恶化。本文提出SoCo,一种面向动态图处理的图存储与软件预取协同设计方案,显著提升了图更新与图计算的性能。我们利用C++20协程和软件预取技术优化计算过程中的缓存未命中开销,并设计了一种既能满足动态图处理需求又更适合预取的数据结构。通过在多个数据集上的大量实验表明,SoCo平均性能较现有最优方案提升10.48倍,同时保证了开创性的插入性能(5个场景排名第一,2个场景排名第二)。