Communication Efficient Triangle Counting

Counting triangles plays a crucial role in graph processing. Important metrics for analyzing the structure of large real-world networks, such as the clustering coefficient, rely on the number of triangles. As the size of graphs emerging from real-world applications continuously increases, resulting in inputs with billions of edges, processing them in a reasonable time becomes challenging. One solution for this is the exploitation of parallelism. Sequential triangle counting algorithms may be directly adapted to shared memory machines, but they are limited in terms of available memory and processors. For handling graphs of massive size, we therefore need to consider distributed memory machine models. Popular algorithms rely on the MapReduce framework, which results in high amounts of intermediate data required for communication, while other approaches replicate the input among processors. Both techniques may hinder scalability. Therefore the importance of message-passing-based implementations with predictable communication behavior arises. Arifuzzaman et al. [6] propose such an algorithm, but their approach still leaves room for improvement. We introduce CETRIC, which builds upon this algorithm and reduces the amount of data sent between processors by only requiring communication for counting triangles consisting of cut edges. Our algorithm uses 1D partitioning to distribute the input and identifies local triangles. They are then removed from the graph, which reduces the neighborhood size of vertices and therefore results in smaller messages. We suggest additional building blocks of a scalable distributed triangle counter: We speed up set intersection using bit-vectors and further reduce the communication volume by avoiding sending redundant neighborhood information. We also reduce latency introduced by the message startup overhead using an adaptive buffering scheme that aggregates multiple messages. We present an extensive evaluation of our algorithm using up to 4096 PEs and a large variety of real-world and synthetic networks under strong and weak scaling. We show that our algorithm is 30 − 50% faster than the previously proposed algorithm and scales better with increasing number of processors. Compared to the previous algorithm, it reduces the communication volume by 40%. CETRIC works especially well on web graphs and prepartitioned networks with small cut sizes. Our experiments also focus on load balancing and uncover scaling issues of the previous approach. Additionally, we outline an approximation algorithm based on CETRIC which uses Bloom filters to further reduce communication. Zusammenfassung Das Zählen von Dreiecken spielt eine entscheidende Rolle in der Verarbeitung von Graphen. Wichtige Metriken zur Strukturanalyse von großen Realwelt-Netzwerken, wie beispielsweise der Clustering-Koeffizient, basieren auf der Anzahl der Dreiecke. Die Größe von Graphen, die aus praktischen Anwendungen heraus entstehen, nimmt stetig zu. Eingaben können Milliarden von Kanten enthalten, sodass eine Verarbeitung in einem angemessenen Zeitrahmen eine Herausforderung darstellt. Eine Lösung hierfür ist der Einsatz von Parallelismus. Sequentielle DreieckszählAlgorithmen können zwar direkt auf Shared-Memory-Maschinen angepasst werden, allerdings mangelt es den Maschinen in der Regel an ausreichend Hauptspeicher und sie verfügen nur über eine begrenzte Prozessorzahl. Um nichtsdestotrotz riesige Eingaben verarbeiten zu können, muss das Distributed-Memory-Maschinenmodell in Betracht gezogen werden. Bekannte Algorithmen basieren meist auf dem MapReduce-Framework, das zu großen Mengen an Zwischendaten führt, die für die Kommunikation benötigt werden. Andere Ansätze replizieren die Eingabe, doch, genau wie die Verwendung von MapReduce, kann dies die Skalierbarkeit einschränken. Abhilfe schafft das Prinzip des Message-Passing, welches vorhersehbare, feingranulare Kommunikation ermöglicht. Arifuzzaman et al. [6] beschreiben einen solchen Algorithmus, jedoch bietet er noch Verbesserungspotential. Unser Algorithmus, CETRIC, baut auf diesem Ansatz auf und reduziert die Datenmenge, die zwischen Prozessoren gesendet wird. Dies wird dadurch möglich, dass er Kommunikation nur für Dreiecke benötigt, die ausschließlich aus Schnittkanten bestehen. Durch 1D-Partitionierung wird der Graph verteilt und jeder Prozessor identifiziert lokale Dreiecke. Durch die Entfernung dieser Dreiecke werden die Nachbarschaften der Knoten reduziert, was auch zu kleineren Nachrichten führt. Zudem stellen wir weitere Komponenten eines skalierbaren verteilten Dreieckszählers vor: Durch die Verwendung von Bit-Vektoren können wir die Schnittmengen von Nachbarschaften schneller bestimmen und durch die Vermeidung des Sendens redundanter Nachbarschaftsinformationen reduzieren wir das Kommunikationsvolumen weiter. Durch adaptive Pufferung und Aggregierung von Nachrichten reduzieren wir zudem die Latenz, die durch Verbindungsaufbau entsteht. Wir führen eine umfangreiche Evaluation unseres Ansatzes auf bis zu 4096 Prozessoren und einer Vielzahl an Realweltund synthetischen Datensätzen durch. Wir zeigen, dass unser Algorithmus durch die Reduktion des Kommunikationsvolumens zwischen 30 − 50% schneller als der bisherige Ansatz ist und zudem mit zunehmender Prozessorzahl besser skaliert. Im Vergleich zu dem vorherigen Algorithmus reduziert CETRIC das Kommunikationsvolumen um 40%. Unser Ansatz funktioniert insbesondere gut auf Web-Graphen und vorpartitionierten Netzwerken mit kleinen Schnitten. Ein weiteres Augenmerk unserer Experimente liegt auf Lastbalancierung und wir identifizieren Skalierungsprobleme des bisherigen Ansatzes. Darüber hinaus skizzieren wir einen Approximationsalgorithmus, der auf CETRIC basiert und Bloom-Filter verwendet, um das Kommunikationsvolumen weiter zu reduzieren.