Computing in a Faulty Congested Clique
Abstract
We study a Faulty Congested Clique model, in which an adversary may fail nodes in the network throughout the computation. We show that any task of -bit input per node can be solved in roughly rounds, where is the size of the network. This nearly matches the linear upper bound on the complexity of the non-faulty Congested Clique model for such problems, by learning the entire input, and it holds in the faulty model even with a linear number of faults.
Our main contribution is that we establish that one can do much better by looking more closely at the computation. Given a deterministic algorithm for the non-faulty Congested Clique model, we show how to transform it into an algorithm for the faulty model, with an overhead that could be as small as some logarithmic-in- factor, by considering refined complexity measures of .
As an exemplifying application of our approach, we show that the -round complexity of semi-ring matrix multiplication [Censor-Hillel, Kaski, Korhonen, Lenzen, Paz, Suomela, PODC 2015] remains the same up to polylog factors in the faulty model, even if the adversary can fail of the nodes (or any other constant fraction).
Keywords and phrases:
distributed computing, graph algorithms, computing with faultsFunding:
Keren Censor-Hillel: is supported in part by the Israel Science Foundation, grant 529/23.Copyright and License:
2012 ACM Subject Classification:
Theory of computation Distributed algorithmsAcknowledgements:
We thank Orr Fischer, Ran Gelles, and Merav Parter for useful discussions.Editors:
Andrei Arusoaie, Emanuel Onica, Michael Spear, and Sara Tucci-PiergiovanniSeries and Publisher:
Leibniz International Proceedings in Informatics, Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik
1 Introduction
Distributed systems are prone to failures by their nature, and thus coping with faults in distributed computing has been extensively studied since the dawn of this research area [1, 39, 47]. In this work, we address the model (or for short) [38], in which nodes of a network communicate in synchronous rounds by exchanging -bit messages between every pair of nodes in each round. This model is heavily studied, through the lens of various computing tasks, such as algebraic computations [9, 21, 10], graph problems such as computing an MST [38, 27, 26, 35, 34, 41], computing distances and spanners [30, 40, 17, 3, 18, 2, 45], computing local tasks [29, 22, 23, 12, 15, 44, 43, 14], optimization and approximation algorithms [29, 25, 24], subgraph finding [19, 16, 42, 4, 32, 33, 20, 6, 7] and many more [46, 36, 28, 11] (see the full version [13] for additional related work).
We consider deterministic algorithms, and study a faulty version of the model, which we refer to as the model. In this model an adversary may fail nodes in the network throughout the computation, such that a failed node cannot continue to participate in the computation. We capture the budget of failures that the adversary has as a parameter , such that at least nodes must remain non-faulty. Thus, the adversary may fail nodes throughout the execution of an algorithm (see Section 2 for a formal definition of the model and the additional concepts used throughout the paper). We ask:
How efficiently can one compute in the model?
Our contribution is a scheme that converts any algorithm into a algorithm. The goal of such a scheme is to incur the smallest possible overhead to the round complexity of the algorithm. We exemplify the strength of our scheme by showing that it allows multiplying two matrices over a semi-ring in rounds, thus retaining its non-faulty complexity from [9] up to polylog factors. This is more than quadratically faster compared to the complexity of that can be obtained for this problem from the follow-up work of [5].
Background.
Without further restrictions on the adversary, it may fail a node at the very first round of the algorithm, preventing the others from ever completing the computation since they can never access the failed nodeโs input. Note that loss of information is not allowed since the output may depend on the original inputs, as opposed to some other fault models that allow the output to depend only on the inputs of non-faulty nodes. Thus, the model must allow at least one initial quiet round, in which no faults can occur. We therefore consider the number of quiet rounds that are needed for a algorithm as an additional complexity measure which we aim to minimize. We emphasize that our method will require a very small constant number of quiet rounds. This does not render the model trivial for any task which can be solved in rounds in the non-faulty model, because if its exact complexity is larger than our constant then it cannot be entirely executed during the quiet rounds (also note that we do not modify the bandwidth by any constant, but rather we stick to a certain given bandwidth of bits, as we cannot change the communication model based on the task that we wish to solve).111[5] work with already-coded inputs and thus avoid the notion of quiet rounds. Here, we care about how the input is coded and hence we need these constant number of preprocessing rounds.
Similarly, the adversary can fail a node at the end of the computation, preventing its output from being accessible. Thus, in the model, the output requirement is modified. Yet, some care should be taken when doing so. We denote by the output that node should hold in a non-faulty execution of , and we would like to require that for every node there is a node which holds . However, this is still insufficient because the adversary may now fail . Instead, we demand that for every , the output is encoded in the network such that any node can obtain it within some number of rounds of communication, even if additional nodes fail, as long as itself does not fail. We call this the decodability complexity of the algorithm. Thus, a algorithm has three complexity measures: the number of quiet rounds, the number of additional (not necessarily quiet) rounds, and the number of rounds required for obtaining an output.
Our contribution is a method for computing in the model that yields the following. First, a simplified usage of it gives that any task that has bits of input per node can be solved in rounds in the model, for constant (our results hold for larger values of as well, with the actual dependence on being polynomial in ). This nearly matches the upper bound of linear round complexity of computing such tasks in the non-faulty model, and is similarly obtained by learning all the inputs.
Second, our main result improves upon this greatly for computing certain functions : To this end, we identify two particular parameters which, informally, capture the locality of communication and the locality of computation that a certain computation requires, and show that our result obtains a super-fast computation of functions for which these parameters are not large (see Section 2 for formal definitions). For such functions, the complexity overhead of our approach can be as low as for a constant . This insight is what allows us to compute the semi-ring product of two matrices, whose complexity in the model is due to [9], in -rounds in the model.
1.1 Our Contribution
Our treatment of and algorithms goes through circuits, as was also done in the follow-up work of [5], and is aligned with prior work of [19] which show how to compute circuits with algorithms. For completeness and for setting the ground with the terminology that we need, we define in Section 2 the concept of layered circuits. Roughly speaking, these are circuits whose gates can be nicely split into layers, with wires only between two consecutive layers. When we compute a circuit by a or algorithm, we assign each node with the task of computing some of the gates in a layer, which we refer to as this nodeโs part. Note that a node always refers to a computing component in the or model, while we use gates and wires to refer to circuits.
Layered circuits can be parametrized by what we call their parallel partition parameter. Informally, this parameter relates to the number of gates that have wires into and from the gates of any nodeโs part. This captures the amount of โcommunicationโ between layers when we later interpret them as algorithms. Intuitively, we say that a layered circuit has a parallel partition of when its gates have wires into/from gates in other parts. Thus, when we compute a layer of the circuit by a algorithm, the multiplicative overhead beyond the elements that each node can send/receive in a round is . This means that the algorithm will incur this number of rounds per layer that it computes. It is not hard to show that any algorithm that runs in rounds has a circuit of depth with a 1-parallel partition (). Notably, this does not depend on any non-adaptivity assumption on the algorithm (that is, this applies also to algorithms in which the communication pattern may depend on the inputs). We show this in the full version [13].
Our key insight, is that for handling faults in the model, we can exploit additional parameters of a circuit that we wish to compute. To this end, we define two additional parameters, which we call communication locality and computation locality. These help us capture the amount of โlocalityโ between layers when we later interpret them as algorithms. Informally, the computation locality of a layered circuit is when in each layer, each of the parts can be split to pieces of gates (for a total of at most gates). The communication locality is , when for each of the parts, the number of pieces of other parts that have incoming wires into it is at most .
Intuitively, the computation locality measures the amount of information that a node needs to store in order to proceed with computing a layer of a circuit. The reason that this plays a role is because in the model we will need a non-faulty node to simulate the parts of the computation of a faulty node . To do that, the non-faulty node will need to recover information that corresponds to the state of the faulty node . However, it may be that does not need its entire state, and that it can instead be compressed or partially โforgottenโ. This will allow a better complexity for the algorithm. The communication locality captures the number of -sized pieces of other nodes, which a non-faulty node has to get in order to simulate the computation of a faulty node in a layer. That is, our algorithm would benefit from a circuit in which if a node needs information from a node then it needs entire pieces of bits rather than smaller chunks of information. One can think of the information of as checkpointed โin the cloudโ, and a smaller communication locality will also reduce the complexity of the algorithm.
The reason that communication locality only addresses incoming wires is that the parallel partition parameter already takes care of communication regardless of faults. However, in the model we cannot trust the ability of a node to send its outgoing messages because it or other nodes may be faulty. Thus, it still remains to capture the number of coded pieces that a node has to collect in order to compute its gates in the upcoming layer.
We are now ready to state our main result (proven in Section 3). For simplicity, we assume throughout the paper that is a constant (our results apply to all values of with an additional dependence on ). We prove that every layered circuit can be computed by a algorithm, with quiet rounds and decodability, and with a round complexity that depends on the above parameters, as follows.
Theorem 1 (Computing a layered circuit by a algorithm).
Let be a circuit of depth with alphabet size that has an -parallel partition with computation locality and communication locality . Let be such that bounds the max size of the output per part. For every constant , there is an algorithm in the - that computes the function with quiet rounds, a (non-quiet) round complexity of , where , and decodability complexity of .
The layered circuit we obtain in the full version [13] for a general algorithm with rounds has a depth of , which is for , has an -parallel partition with , communication locality of for , and computation locality of for . Thus, Theorem 1 gives us a - algorithm with a round complexity of , which is a roughly linear-in- overhead for a constant . This is expensive for a general function , as one can use a trivial circuit that has depth 1 to get a round complexity (in which one can verify that , , , , , and hence ), by essentially having each node learn all inputs. Yet, if there is a function for which one can construct a better circuit than the general construction we give in the full version [13], then one can get a smaller overhead compared with the algorithm. Indeed, this is exactly what we exemplify for semi-ring matrix multiplication in Section 4.
Theorem 2 (A algorithm for semi-ring matrix multiplication).
Suppose that the inputs on the nodes are matrices , where each node begins with coefficients of and and is a semi-ring, then the value can be computed in the c- with quiet rounds, a round complexity of , and -decodability.
In particular, Theorem 2 means that for any constant , we incur only a logarithmic overhead in the round complexity over the non-faulty model, in which this task can be solved in rounds due to [9]. Following up on our work, [5] present a different scheme, which yields a complexity of rounds in the model for any -round algorithm. While for some algorithms their approach improves upon ours, for others our approach is significantly faster: their scheme would give a complexity of for semi-ring matrix multiplication, which is quadratically slower compared to ours. We emphasize that matrix multiplication is just an example, and more cornerstone tasks can enjoy our approach by constructing circuits that are efficient for the use of Theorem 1.
The way that the above is obtained is by compressing the communication rounds into a constant number of layers, while still having small computation and communication locality parameters, that are equal to the parallel partition parameter (that is, ). Thus our algorithm incurs no additional overhead. We say that such a circuit has an -local parallel partition. That is, since our Theorem 1 shows that we can trade off and when constructing the circuit, we leverage this while exploiting the concurrency depending on the refined locality parameters.
This exemplifies an immediate corollary of Theorem 1, which is that circuits with small local parallel partitions are the optimal choice for invoking Theorem 1, in the sense that our transformation incurs the smallest overhead for them when implementing them in the model. This should be viewed through the lens of what we can say about the complexity of their implementation, which is round, as we prove in the full version [13]. Note that this implies that layered circuits are equivalent to algorithms.
A remark on quiet rounds.
Matrix multiplication is an excellent example for why we cannot simply replace quiet rounds by an assumption of coded inputs. If we do not carefully shuffle the input matrices before encoding them, then the nodes will be forced to download (decode) too much information compared to what they need, resulting in communication and computation localities that are extremely higher compared to those of the circuit that we construct for proving Theorem 2. More explicitly, if we want a matrix multiplication algorithm to re-distribute the entries of the second input matrix among the nodes such that each node holds a column of the matrix rather than a row, or if we want each node to hold any other pattern of entries as we do in Section 4, then we need the information to already be encoded in this manner, as otherwise a node has to decode too much information in order to obtain its relevant entries. This could result in a huge number of rounds for a task that takes rounds in the non-faulty model.
Regimes of lower number of faults.
Finally, we show that if the bound on the number of failures is sublinear, then our method allows circuits with relaxed properties to be implemented by fast algorithms. The high level intuition is that if we are promised no more than faults, we can replace the usage of codewords of length with disjoint codewords of length . Since these are only technical modifications, we defer them to the full version [13]. This allows us to further extend our results for fast (ring) matrix multiplication, for which we show the following in the full version [13].
Theorem 3 (A algorithm for Fast (Ring) Matrix Multiplication ).
Suppose that the inputs on the nodes are matrices , where each node begins with coefficients of and and is a ring, then the value can be computed in the ()- with quiet rounds, a round complexity of , and -decodability.
Here is the exponent of matrix multiplication and is the complexity of ring matrix multiplication in the non-faulty setting [8].
1.2 Technical Overview
To prove Theorem 1, our approach is as follows. First, we partition the gates of each layer of the circuit into its respective parts in the parallel partition, and assign one node to each part. In the first quiet rounds, we shuffle the inputs of the nodes such that each node holds the input wires to its gates, using Lenzenโs routing scheme [36]. Then, each node encodes its state to prepare for the possibility of a failure, and sends one piece of the codeword to every other node. The code that is used has to be able to tolerate erasures, as this is the number of nodes that may fail (a node that has already failed simply does not receive its piece from ). We use codes, where is a field whose elements are of bits, and thus we need additional quiet rounds for this step.
We then split the layers of the circuit into epochs, where each epoch consists of computation layers and ends with a communication layer. On a high level, we say that a layer is a computation layer if for each part in the layer (a part is a set of gates assigned to a node for computing them), all of its output wires go in the next layer to the part that is assigned to the same node. This means that a node computing its gates in the next layer already has all the information it needs for the computation without needing to communicate with other nodes. A communication layer is any other layer. By the way we split into epochs, we get that once a node receives the information it needs to compute the gates in its part in the first layer of the epoch, it can compute the gates in its parts in the rest of the layers of the epoch. Eventually, we would want to have a circuit with as few epochs as possible. We emphasize that an algorithm may be represented by many different circuits and, indeed, given an algorithm, one needs to design a circuit that gives the parameters for which our result yields the best complexity measures.
In a non-faulty algorithm, we would simply precede the above with communication between the nodes in order for to obtain the information it needs for computing the gates in its part in the first layer of the epoch (which is indeed what we do in the full version when we compute a circuit in the non-faulty setting). However, in a algorithm, it is possible for the node to fail, in which case some node takes its role in computing the gates of in each layer in the epoch. Thus, each node encodes its state at the end of an epoch and sends one piece of the codeword to every other node. In the same spirit, at the beginning of the epoch, a node that simulates needs to first collect the pieces of the codeword. Communicating in order to obtain the required information for the epoch takes rounds, since there are codes that need to be recovered, due to being the communication locality of the circuit. Encoding the information at the end of the epoch takes rounds, since there are codes that need to be used, due to being the computation locality of the circuit. Thus, this approach takes rounds per epoch. If every part of the last layer gets successfully encoded, this also implies decodability within a number of rounds that equals its output divided by , as data elements can be routed to/from each node in a single round (again due to [36]).
However, the above is insufficient, because after a node fails, it may be that another node which simulates also fails. If we proceed with simulating by yet another node , we may incur a round complexity of the number of failures โ an unacceptable rounds.
Thus, we simulate nodes in a more careful manner. For each epoch, we progress by attempts for simulating the failed nodes of the epoch. In a certain attempt, if the number of simulation tasks that still need to occur for an epoch is greater or equal to the number of currently non-faulty nodes, then we let each non-faulty node simulate one of them. This promises that the attempt successfully simulates at least failed nodes, as this number of nodes is guaranteed to remain non-faulty. This type of attempt can only occur times.
The other case is when the number of remaining failed nodes that need to be simulated drops below the number of currently non-faulty nodes. In this case we simulate every such node by a multiplicity of non-faulty nodes, which implies that although we cannot argue that such tasks succeed, we have that it is still hard for the adversary to prevent such a task from succeeding because it would have to fail all the nodes that are assigned to it. We show that we make progress by succeeding in at least a constant fraction of the remaining tasks, resulting in at most a logarithmic number of such attempts. To make our analysis go through, we actually need to batch these remaining tasks into batches of size , each of which is handled by some carefully chosen multiplicity of non-faulty nodes.
Thus, one of the factors in our complexity is due to coding, and the other is due to either batching into -sized batches or requiring attempts per epoch (these latter two are disjoint events). Finally, we incur an additive for checkpointing the outputs. Note that if is larger than the computation locality of the last epoch, then we can replace the computation of the last epoch and instead consider it as part of the decodability complexity: simply decode the checkpointed values from the penultimate epoch and compute the last epoch (that is, simulate the last computation epoch as part of the decodability).
We mention that, informally speaking, coding is essential for algorithms. We show in the full version [13] that if the messages of the quiet rounds depend only on the input of each node and not on messages it receives, then the messages of quiet rounds must form codewords of an error-correcting code.
2 Preliminaries
2.1 The Model
Definition 4 (The model).
The model is a synchronous communication model on nodes, where in each round every pair of nodes can exchange -bit messages, for some constant . In an algorithm , each node has an input in for an alphabet of size , and after executing each node holds an output in for some value of .
Definition 5 (The model).
The - model is similar to the model, except that an adversary may fail up to a fraction of of the nodes throughout the execution of an algorithm (that is, nodes must be non-faulty). A node that is failed in a certain round, does not send or receive any message from that round on. The model allows an initial number of quiet rounds, in which no faults can occur.
Definition 6 (The complexity of a algorithm).
An algorithm for the model has three complexity parameters.
The first complexity measure is the number of quiet rounds it requires. The other two complexity measures are the round complexity and decodability complexity, defined as follows.
Let be an algorithm for the model, and consider a non-faulty execution of . Denote by the state that node has at the end of round in .
For a round of , we say that a possibly faulty execution of satisfies at round the -decodability condition if the following holds. Suppose every node is associated with some other node , then it is possible in rounds for each node that is non-faulty at the end of these rounds to obtain . (Informally, the only way the adversary can prevent from receiving knowledge of any other nodeโs state after the next rounds is by failing itself.)
We stress that during these additional rounds the adversary may continue to fail nodes up to its given budget. We say that the execution is finished executing in rounds with -decodability, if at the end of rounds, it satisfies the -decodability condition for the last round of (note that it is possible that for other rounds of , the decodability condition in holds with larger values than ).
The maximum values of and over all executions are the round complexity and the decodability complexity of , respectively.
2.2 Layered Circuits
We define layer circuits and pinpoint which of their parameters captures the complexities of and algorithms that compute them.
Definition 7 (fan-in, fan-out).
For a vertex in a directed graph , let and . The values and are called the fan-in and fan-out of , respectively.
Definition 8 (layered circuit).
A layered circuit of depth over an alphabet is a connected directed graph with vertex set and edge set , where each vertex (gate) with fan-in is labeled by a function .
We say that a layered circuit with and computes a function if the following recursively defined function is equal to . The function is defined as the function whose output is where
-
1.
For every , is the identity function and , where is the -th input of .
-
2.
For every and every such that with fan-in , there are gates for , such that .
We make use of the following parameter of layered circuits, which we call the parallel partition parameter, which captures the amount of โcommunicationโ between nodes for computing a layer of the circuit in a algorithm.
Definition 9 (parallel partition).
Let be a bipartite directed graph with and . For a pair of partitions and , let
We say that has a parallel partition of size with block fan size if there exists such a pair of partitions in which for every , . We say that a layered circuit of depth has an -parallel partition, if there is a refinement of the partition of such that for every , the restriction of to each of the subgraphs is a parallel partition of size with block fan size with , .
The following parameters of layered circuits, which we call communication locality and computation locality, help us capture the amount of โlocalityโ between layers when we later interpret them as algorithms.
Definition 10 (Computation locality and Communication locality).
Let be a layered circuit of depth and an -parallel partition with respect to a refinement of . Let denote the -th part of in .
We say that has computation locality and communication locality if there is a constant such that for all there exists a further (not necessarily disjoint) subdivision such that . For each , the number of pairs such that for which has a wire into is at most for some constant . We denote by the parts corresponding to those pairs, that is, the parts (where ) in that consist of at least one gate that has a wire into a gate in the part .
Definition 11 (Local parallel partition).
We say that a layered circuit of depth has an -local parallel partition, if it has an -parallel partition for a refinement , with a computation locality of and a communication locality of .
3 Layered Circuits as - Algorithms
We now prove our main result about how to compute a layered circuit in the - model.
Theorem 1 (Computing a layered circuit by a algorithm). [Restated, see original statement.]
Let be a circuit of depth with alphabet size that has an -parallel partition with computation locality and communication locality . Let be such that bounds the max size of the output per part. For every constant , there is an algorithm in the - that computes the function with quiet rounds, a (non-quiet) round complexity of , where , and decodability complexity of .
An immediate corollary of Theorem 1 is that circuits with small local parallel partitions are optimal if the output size is not huge, in the sense that our transformation incurs the smallest overhead for them when implementing them in the model, compared to what we can say about their implementation, which is rounds (see the full version for details).
Corollary 12.
Let be a circuit of depth with alphabet size that has an -local parallel partition (i.e., with computation locality and communication locality ). Let be such that bounds the max size of the output per part. For every constant , there is an algorithm in the - that computes the function with quiet rounds, a (non-quiet) round complexity of , and decodability complexity of .
To prove the theorem, we make use of the following codes.
Definition 13 (Error-correcting codes).
An code is a mapping , such that the Hamming distance between any two codewords is at least . By its definition, an code can correct up to erasures, that is, given a string , there is at most one codeword which equals up to at most erasures of symbols in .
Lemma 14.
Let and be some integers. Let be a prime number and let be an integer such that the prime power satisfies , then there exists an code.
Proof.
The existence of a code with these parameters () is a classical result in coding theory; in particular, since (i.e., since the field size is bigger than the length of the code) we have that the classical construction of Reed-Solomon codes suffices. See Section 6.8 of [37] or Section 5.2 of [31].
ย Remark 15.
Note that if we encode bits of information then the length of a codeword is . However, we consider the codeword as having symbols, each one held by a different node in the model. Since faults are in terms of nodes, we lose exactly bits of information per fault, and so when we consider the codeword as having symbols, the size of each symbol in the alphabet becomes .
Proof of Theorem 1.
Construction of the algorithm.
We construct as follows:
-
1.
We associate node with the gates in part . In the first quiet rounds, the nodes shuffle their data so that each node holds the inputs to its gates. This is possible by Lenzenโs routing scheme [36].
-
2.
In the subsequent quiet rounds, each node encodes all of its input and sends a coded piece to each of the other nodes, as follows: denote by multiplication on the right by the generator matrix corresponding to the code given by Lemma 14, and define the codeword . Note that the total number of bits in a codeword is at most , since the size of the input of each node is and the first layer is the identity function by Definition 8. We refer to the action of encoding the output wires of a part and splitting the pieces of the codeword to all nodes as checkpointing this information. Thus, at this point, all nodes have checkpointed the 0-th layer of the circuit.
-
3.
We now recursively describe the method by which the nodes use the checkpointed values of a layer to compute the values in and then checkpoint them (but notice that from this point on, we are not guaranteed to have quiet rounds). The method of collecting coded checkpoints can be thought of as filling out โbingo cardsโ, which represent the tasks of possibly faulty virtual nodes; in particular, we now have that the data of node lives โup in the cloudโ and obtaining data from is replaced with obtaining coded pieces from the entire network.
-
i.
Communication. Assume that the nodes have checkpointed all of the data from the previous round so that every node has a coefficient of the codeword , where (so there are codewords of length ). The reason that there are such codewords is because is the computation locality (see Definition 10). In particular, node has the value .
Each node collects the pieces
(1) that they need for computing the gates contained in their part , where because is the communication locality (see Definition 10). In particular, collects in a first set of rounds, in a second set of rounds, โฆ, and in a -th set of rounds, where is the constant in the definition of communication locality. Therefore, this takes rounds.
-
ii.
Computation. If for every part in this layer, all output wires go to the part in the next layer (and not to any for some ), we call this layer a computation layer. Otherwise, we call the layer a communication layer.
If is a computation layer, the node performs the computation corresponding to the gates in locally. The node continues to do these computations locally until there is a layer for some , in which either there is an output wire that goes from a part for some into a part for some (that is, is a communication layer), or is the output layer. The round complexity of this step is 0, because these are all local computations.
-
iii.
Checkpointing. Upon arriving at some communication layer , each node checkpoints and sends each node the value for (since is the computation locality). Checkpointing a code with these parameters requires rounds, since we have symbols of size bits. Thus, this completes in rounds.
We refer to a non-faulty execution of steps (i)-(iii) as an epoch. We have that the complexity of these steps is .
-
iv.
Repeat/Fill out Missing Bingo Cards. If all of the parts in a layer have been checkpointed, then the nodes move on to the next epoch; otherwise, they divide the work of the failed nodes and simulate the computations of the gates in their parts until all are checkpointed. In particular, if nodes failed so far, and of those , there are nodes whose parts are yet to have been checkpointed, the non-faulty nodes evenly divide themselves and simulate those parts by rerunning steps (i)-(iii). This is done as follows.
-
a.
If , then each of the non-faulty nodes is assigned to one failed node whose part has not been checkpointed yet, and repeats steps (i)-(iii) for that part.
-
b.
Otherwise, there are such parts . We batch these into sets of size at most , and let each batch be simulated by multiple nodes, as follows. We denote , and . We denote by the remainder when dividing by (thus, ). The non-faulty nodes, , are split into batches:
Notice that since is defined using the floor of the respective ratio, the size of the last batch may be larger than , but it is at most . Further, in case is less than then there is only one batch, which may also be small, but it is assigned to all non-faulty nodes. For each batch, every node in that batch is assigned to each in the batch, and repeats steps (i)-(iii) for the corresponding part .
We call each iteration of these steps an attempt. If all of the parts have been checkpointed and is the output layer, then the algorithm halts. Note that additional failures can occur throughout repeating. Also, we stress that although the algorithm describes exchanging messages between any two nodes, whenever it attempts to send (receive) a message to (from) a failed node, such a message is not delivered.
The complexity of this step is equal to the complexity of rounds for steps (i)-(iii), plus an additive overhead of rounds which corresponds to the rounds needed to decode the information corresponding to the node that is being simulated. In case (b), since the size of a batch is , this introduces an overhead of over that round complexity, for a total of at most rounds per attempt. The number of attempts is bounded in what follows.
-
a.
-
i.
Correctness and complexity of the algorithm despite faults.
It is immediate from the construction that the algorithm produces the output of the circuit. Further, it is straightforward that the number of quiet rounds is .
We prove that -decodability holds by induction, with for all epochs except the last, and for the last. The base case is straightforward because the computation takes place through quiet rounds: at the end of step (1), each node holds the inputs to its gates. In step (2), each node encodes its input using the code in Lemma 14, and thus -decodability holds with . For the the inductive hypothesis, assume that epoch has been correctly checkpointed as at most codewords of an -code for each node. Then, by the inductive hypothesis, we have that a node can, in rounds, obtain all of the checkpointed data it needs and then perform its local computations, and simulate any failed nodes. Thus, at the end of step 3(iv), which we show below that it indeed checkpoints the computation of all nodes (also faulty nodes), we have that epoch is correctly checkpointed as at most codewords of an -code for each node. Thus, -decodability holds with . For the last epoch, we only need to encode the output and therefore we get -decodability with .
It remains to bound the number of attempts needed for step 3(iv), which will also prove that indeed it checkpoints the computation of all nodes (also faulty nodes). For an attempt, recall that we denote by the number of nodes that failed so far (and thus the number of non-faulty nodes is ), and by the number of parts that are yet to be checkpointed. Let be the additional number of nodes that fail throughout this attempt. We consider the two possible cases, depending on how relates to .
In the first case, recall that if then each of the non-faulty nodes is assigned to one failed node whose part has not been checkpointed and repeats its computation. Since there are at least non-faulty nodes even despite the additional newly failed ones, we have that at least additional tasks get checkpointed in this attempt. Thus, such an attempt can happen at most times before all parts are checkpointed for this epoch.
In the second case, we have that . Recall that each part that is not yet checkpointed is now attempted to be checkpointed by a multiplicity of or nodes, where . There are two possible sub-cases based on how the value of relates to the remaining number of allowed failures . It holds that either or . The former case can happen at most times before drops to 0.
Thus, suppose that the latter case happens in an attempt. If there is a single batch because , then all of the batch is performed by all of these nodes, and hence must succeed because at least one of them (at least of them) is non-faulty.
Otherwise, since is the remainder of dividing by , we have . Thus, the actual number of nodes that are successful in checkpointing the tasks they are now in charge of is at least . Possibly, every of them are performing the same batch, but even in this worst case, the number of distinct newly checkpointed batches is at least . Note that with the notation of , we have that . Further, it holds that , where the first inequality is since , and the second is since because the number of non-faulty nodes can never go below .
We bound this number of newly checkpointed batches in terms of the total number of remaining batches , as follows. We have that:
Since , and by plugging , we get:
Further simple algebraic manipulations give:
Removing the term from the nominator only decreases the value of the expression, as well as using . We thus have:
Since , we finally have:
This yields that after this subcase, the number of batches to be checkpointed drops from to at most . This implies that this can happen at most times before all parts are checkpointed.
Thus the algorithm has all the parts checkpointed in attempts. Each attempt runs in either or rounds, where the latter number of rounds occurs only in the case of batching, which can happen at most attempts. Hence, we obtain a total of rounds per epoch. In the final epoch, the nodes checkpoint the outputs in rounds. This is done only once, and thus incurs only an additive overhead. In total, since the depth of the circuit is , we get a running time of , where , as claimed.
4 Application: Semi-Ring Matrix Multiplication
Theorem 2 (A algorithm for semi-ring matrix multiplication). [Restated, see original statement.]
Suppose that the inputs on the nodes are matrices , where each node begins with coefficients of and and is a semi-ring, then the value can be computed in the c- with quiet rounds, a round complexity of , and -decodability.
Proof.
We prove the theorem by showing that there is circuit computing this function that satisfies the hypothesis of Theorem 1. To describe our circuit, we define some notation.
Outer Partition.
The matrices are split as follows: is split into block matrices of equal dimension , where the are matrices, and similarly is split into block matrices of equal dimension where the are matrices; i.e.,
Elementary linear algebra gives us that the product satisfies the equation , which can be computed by a total of block (outer) matrix multiplications; indeed, by the definition of an outerproduct we have that , which we use to more efficiently distribute the tasks, and so we have:
| (2) |
Inner Partition.
We define sub-blocks of the blocks , each of size , as follows: , i.e., is implicitly defined by the equation . Similarly, we define subblocks of the blocks , each of size , analogously to the previous construction: , i.e., is implicitly defined by the following equation
In particular, we have that
| (3) |
which by Equation 2 further implies that . For the last layer of our circuit, we will also use the fact that
| (4) |
Construction of the circuit.
We construct every layer of the circuit by considering it as having parts (sets of gates). We associate each part with a 3-tuple of indices .
- First Layer (Input/Shuffle).
-
We make a part responsible for the entries of its 3-tuple over all of the blocks in the very first shuffling layer; in particular, we assume that in the initial shuffle step, the data has been rearranged so that part now has incoming wires corresponding to and for all . We can formalize this as the following: the wires of the gates in layer 0 shuffle data to the parts corresponding to to part in layer 1 as given above; i.e., there are gates in part , which are:
- Second Layer (Communication).
-
We define the next communication round by gates
(5) Each gate has a single input wire from the prior layer. There are at most parts whose indices differ from only on (i.e., for parts ) and they are each connected by exactly wires for a total of wires; therefore, the partition satisfies Definition 11, with:
-
(Communication Locality) Fix a part and consider its gates for all . There are exactly parts , one for each such , which have wires into part in this layer (and each has precisely wires to part in this layer, to its gates for the respective ). For the count is similar. This gives a communication locality of .
-
(Computation Locality) We have that every part can be partitioned into exactly 2 sets and . It is straightforward to see that this satisfies computation locality with (and ).
-
- Third Layer (Computation).
-
In the third layer, part is constructed so that its gates locally compute . By saying that a gate in part locally computes a function, we mean that all of its incoming wires are from part of the previous layer. That is, we define the gates:
one for each element of the matrix. By Equation 3 and the definition of the gates in Equation 5, we get that indeed these are the values computed by the gates in this layer.
- Fourth Layer (Communication).
-
We define the next communication round by
(6) -
(Communication Locality) For there are at most parts that have the information corresponding to and furthermore there are precisely input wires for each one, since have in total a range of .
-
(Computation Locality) The parts in the third layer that have outputs wires are all of size gates, which can each be partitioned perfectly into sets
(one for each of the choices for ). Each set is of size and these sets, , are all of the subparts corresponding to . Thus, we have that .
-
- Fifth Layer (Computation/Output).
-
Now we can have gates of part in the fifth layer that can locally (with incoming wires from the fourth layer only from part ) compute
By Equation 4 and the definition of the gates in Equation 6, we get that indeed these are the values that are computed by the gates in this layer.
This completes the proof that the circuit correctly computes the product of the matrices. The circuit has a constant depth, and an -parallel partition. By Theorem 1, it can be computed in the - model within rounds, with quiet rounds and -decodability.
References
- [1] Hagit Attiya and Jennifer L. Welch. Distributed computing - fundamentals, simulations, and advanced topics (2. ed.). Wiley series on parallel and distributed computing. Wiley, 2004.
- [2] Hong Duc Bui, Shashwat Chandra, Yi-Jun Chang, Michal Dory, and Dean Leitersdorf. Improved all-pairs approximate shortest paths in congested clique. In Ran Gelles, Dennis Olivetti, and Petr Kuznetsov, editors, Proceedings of the 43rd ACM Symposium on Principles of Distributed Computing, PODC 2024, Nantes, France, June 17-21, 2024, pages 391โ400. ACM, 2024. doi:10.1145/3662158.3662804.
- [3] Keren Censor-Hillel, Michal Dory, Janne H. Korhonen, and Dean Leitersdorf. Fast approximate shortest paths in the congested clique. Distributed Comput., 34(6):463โ487, 2021. doi:10.1007/S00446-020-00380-5.
- [4] Keren Censor-Hillel, Orr Fischer, Franรงois Le Gall, Dean Leitersdorf, and Rotem Oshman. Quantum distributed algorithms for detection of cliques. In Mark Braverman, editor, 13th Innovations in Theoretical Computer Science Conference, ITCS 2022, January 31 - February 3, 2022, Berkeley, CA, USA, volume 215 of LIPIcs, pages 35:1โ35:25. Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik, 2022. doi:10.4230/LIPICS.ITCS.2022.35.
- [5] Keren Censor-Hillel, Orr Fischer, Ran Gelles, and Pedro Soto. Two for one, one for all: Deterministic LDC-based robust computation in congested clique. CoRR, abs/2508.08740, 2025. doi:10.48550/arXiv.2508.08740.
- [6] Keren Censor-Hillel, Orr Fischer, Tzlil Gonen, Franรงois Le Gall, Dean Leitersdorf, and Rotem Oshman. Fast distributed algorithms for girth, cycles and small subgraphs. In Hagit Attiya, editor, 34th International Symposium on Distributed Computing, DISC 2020, October 12-16, 2020, Virtual Conference, volume 179 of LIPIcs, pages 33:1โ33:17. Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik, 2020. doi:10.4230/LIPICS.DISC.2020.33.
- [7] Keren Censor-Hillel, Franรงois Le Gall, and Dean Leitersdorf. On distributed listing of cliques. In Yuval Emek and Christian Cachin, editors, PODC โ20: ACM Symposium on Principles of Distributed Computing, Virtual Event, Italy, August 3-7, 2020, pages 474โ482. ACM, 2020. doi:10.1145/3382734.3405742.
- [8] Keren Censor-Hillel, Ran Gelles, and Bernhard Haeupler. Making asynchronous distributed computations robust to noise. Distributed Comput., 32(5):405โ421, 2019. doi:10.1007/S00446-018-0343-5.
- [9] Keren Censor-Hillel, Petteri Kaski, Janne H. Korhonen, Christoph Lenzen, Ami Paz, and Jukka Suomela. Algebraic methods in the congested clique. Distributed Comput., 32(6):461โ478, 2019. doi:10.1007/S00446-016-0270-2.
- [10] Keren Censor-Hillel, Dean Leitersdorf, and Elia Turner. Sparse matrix multiplication and triangle listing in the congested clique model. Theor. Comput. Sci., 809:45โ60, 2020. doi:10.1016/J.TCS.2019.11.006.
- [11] Keren Censor-Hillel, Yannic Maus, and Volodymyr Polosukhin. Near-optimal scheduling in the congested clique. In Tomasz Jurdzinski and Stefan Schmid, editors, Structural Information and Communication Complexity - 28th International Colloquium, SIROCCO 2021, Wrocลaw, Poland, June 28 - July 1, 2021, Proceedings, volume 12810 of Lecture Notes in Computer Science, pages 50โ67. Springer, 2021. doi:10.1007/978-3-030-79527-6_4.
- [12] Keren Censor-Hillel, Merav Parter, and Gregory Schwartzman. Derandomizing local distributed algorithms under bandwidth restrictions. Distributed Comput., 33(3-4):349โ366, 2020. doi:10.1007/S00446-020-00376-1.
- [13] Keren Censor-Hillel and Pedro Soto. Computing in a faulty congested clique. CoRR, abs/2505.11430, 2025. doi:10.48550/arXiv.2505.11430.
- [14] Sam Coy, Artur Czumaj, Peter Davies, and Gopinath Mishra. Optimal (degree+1)-coloring in congested clique. In Kousha Etessami, Uriel Feige, and Gabriele Puppis, editors, 50th International Colloquium on Automata, Languages, and Programming, ICALP 2023, July 10-14, 2023, Paderborn, Germany, volume 261 of LIPIcs, pages 46:1โ46:20. Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik, 2023. doi:10.4230/LIPICS.ICALP.2023.46.
- [15] Artur Czumaj, Peter Davies, and Merav Parter. Simple, deterministic, constant-round coloring in congested clique and MPC. SIAM J. Comput., 50(5):1603โ1626, 2021. doi:10.1137/20M1366502.
- [16] Danny Dolev, Christoph Lenzen, and Shir Peled. "tri, tri again": Finding triangles and small subgraphs in a distributed setting - (extended abstract). In Marcos K. Aguilera, editor, Distributed Computing - 26th International Symposium, DISC 2012, Salvador, Brazil, October 16-18, 2012. Proceedings, volume 7611 of Lecture Notes in Computer Science, pages 195โ209. Springer, 2012. doi:10.1007/978-3-642-33651-5_14.
- [17] Michal Dory, Orr Fischer, Seri Khoury, and Dean Leitersdorf. Constant-round spanners and shortest paths in congested clique and MPC. In Avery Miller, Keren Censor-Hillel, and Janne H. Korhonen, editors, PODC โ21: ACM Symposium on Principles of Distributed Computing, Virtual Event, Italy, July 26-30, 2021, pages 223โ233. ACM, 2021. doi:10.1145/3465084.3467928.
- [18] Michal Dory and Merav Parter. Exponentially faster shortest paths in the congested clique. J. ACM, 69(4):29:1โ29:42, 2022. doi:10.1145/3527213.
- [19] Andrew Drucker, Fabian Kuhn, and Rotem Oshman. On the power of the congested clique model. In Magnรบs M. Halldรณrsson and Shlomi Dolev, editors, ACM Symposium on Principles of Distributed Computing, PODC โ14, Paris, France, July 15-18, 2014, pages 367โ376. ACM, 2014. doi:10.1145/2611462.2611493.
- [20] Orr Fischer, Tzlil Gonen, Fabian Kuhn, and Rotem Oshman. Possibilities and impossibilities for distributed subgraph detection. In Christian Scheideler and Jeremy T. Fineman, editors, Proceedings of the 30th on Symposium on Parallelism in Algorithms and Architectures, SPAA 2018, Vienna, Austria, July 16-18, 2018, pages 153โ162. ACM, 2018. doi:10.1145/3210377.3210401.
- [21] Franรงois Le Gall. Further algebraic algorithms in the congested clique model and applications to graph-theoretic problems. In Cyril Gavoille and David Ilcinkas, editors, Distributed Computing - 30th International Symposium, DISC 2016, Paris, France, September 27-29, 2016. Proceedings, volume 9888 of Lecture Notes in Computer Science, pages 57โ70. Springer, 2016. doi:10.1007/978-3-662-53426-7_5.
- [22] Mohsen Ghaffari. Distributed MIS via all-to-all communication. In Elad Michael Schiller and Alexander A. Schwarzmann, editors, Proceedings of the ACM Symposium on Principles of Distributed Computing, PODC 2017, Washington, DC, USA, July 25-27, 2017, pages 141โ149. ACM, 2017. doi:10.1145/3087801.3087830.
- [23] Mohsen Ghaffari, Themis Gouleakis, Christian Konrad, Slobodan Mitrovic, and Ronitt Rubinfeld. Improved massively parallel computation algorithms for mis, matching, and vertex cover. In Calvin Newport and Idit Keidar, editors, Proceedings of the 2018 ACM Symposium on Principles of Distributed Computing, PODC 2018, Egham, United Kingdom, July 23-27, 2018, pages 129โ138. ACM, 2018. doi:10.1145/3212734.3212743.
- [24] Mohsen Ghaffari, Ce Jin, and Daan Nilis. A massively parallel algorithm for minimum weight vertex cover. In Christian Scheideler and Michael Spear, editors, SPAA โ20: 32nd ACM Symposium on Parallelism in Algorithms and Architectures, Virtual Event, USA, July 15-17, 2020, pages 259โ268. ACM, 2020. doi:10.1145/3350755.3400260.
- [25] Mohsen Ghaffari and Krzysztof Nowicki. Congested clique algorithms for the minimum cut problem. In Calvin Newport and Idit Keidar, editors, Proceedings of the 2018 ACM Symposium on Principles of Distributed Computing, PODC 2018, Egham, United Kingdom, July 23-27, 2018, pages 357โ366. ACM, 2018. URL: https://dl.acm.org/citation.cfm?id=3212750.
- [26] Mohsen Ghaffari and Merav Parter. MST in log-star rounds of congested clique. In George Giakkoupis, editor, Proceedings of the 2016 ACM Symposium on Principles of Distributed Computing, PODC 2016, Chicago, IL, USA, July 25-28, 2016, pages 19โ28. ACM, 2016. doi:10.1145/2933057.2933103.
- [27] James W. Hegeman, Gopal Pandurangan, Sriram V. Pemmaraju, Vivek B. Sardeshmukh, and Michele Scquizzato. Toward optimal bounds in the congested clique: Graph connectivity and MST. In Chryssis Georgiou and Paul G. Spirakis, editors, Proceedings of the 2015 ACM Symposium on Principles of Distributed Computing, PODC 2015, Donostia-San Sebastiรกn, Spain, July 21 - 23, 2015, pages 91โ100. ACM, 2015. doi:10.1145/2767386.2767434.
- [28] James W. Hegeman and Sriram V. Pemmaraju. Lessons from the congested clique applied to mapreduce. Theor. Comput. Sci., 608:268โ281, 2015. doi:10.1016/J.TCS.2015.09.029.
- [29] James W. Hegeman, Sriram V. Pemmaraju, and Vivek Sardeshmukh. Near-constant-time distributed algorithms on a congested clique. In Fabian Kuhn, editor, Distributed Computing - 28th International Symposium, DISC 2014, Austin, TX, USA, October 12-15, 2014. Proceedings, volume 8784 of Lecture Notes in Computer Science, pages 514โ530. Springer, 2014. doi:10.1007/978-3-662-45174-8_35.
- [30] Monika Henzinger, Sebastian Krinninger, and Danupon Nanongkai. A deterministic almost-tight distributed algorithm for approximating single-source shortest paths. In Daniel Wichs and Yishay Mansour, editors, Proceedings of the 48th Annual ACM SIGACT Symposium on Theory of Computing, STOC 2016, Cambridge, MA, USA, June 18-21, 2016, pages 489โ498. ACM, 2016. doi:10.1145/2897518.2897638.
- [31] W. Cary Huffman and Vera Pless. Fundamentals of Error-Correcting Codes. Cambridge University Press, 2003. doi:10.1017/CBO9780511807077.
- [32] Taisuke Izumi and Franรงois Le Gall. Triangle finding and listing in CONGEST networks. In Elad Michael Schiller and Alexander A. Schwarzmann, editors, Proceedings of the ACM Symposium on Principles of Distributed Computing, PODC 2017, Washington, DC, USA, July 25-27, 2017, pages 381โ389. ACM, 2017. doi:10.1145/3087801.3087811.
- [33] Taisuke Izumi and Franรงois Le Gall. Quantum distributed algorithm for the all-pairs shortest path problem in the CONGEST-CLIQUE model. In Peter Robinson and Faith Ellen, editors, Proceedings of the 2019 ACM Symposium on Principles of Distributed Computing, PODC 2019, Toronto, ON, Canada, July 29 - August 2, 2019, pages 84โ93. ACM, 2019. doi:10.1145/3293611.3331628.
- [34] Tomasz Jurdzinski and Krzysztof Nowicki. MST in O(1) rounds of congested clique. In Artur Czumaj, editor, Proceedings of the Twenty-Ninth Annual ACM-SIAM Symposium on Discrete Algorithms, SODA 2018, New Orleans, LA, USA, January 7-10, 2018, pages 2620โ2632. SIAM, 2018. doi:10.1137/1.9781611975031.167.
- [35] Janne H. Korhonen. Deterministic MST sparsification in the congested clique. CoRR, abs/1605.02022, 2016. arXiv:1605.02022.
- [36] Christoph Lenzen. Optimal deterministic routing and sorting on the congested clique. In Panagiota Fatourou and Gadi Taubenfeld, editors, ACM Symposium on Principles of Distributed Computing, PODC โ13, Montreal, QC, Canada, July 22-24, 2013, pages 42โ50. ACM, 2013. doi:10.1145/2484239.2501983.
- [37] J. H. Van Lint. Introduction to Coding Theory. Springer-Verlag, Berlin, Heidelberg, 3rd edition, 1998.
- [38] Zvi Lotker, Boaz Patt-Shamir, Elan Pavlov, and David Peleg. Minimum-weight spanning tree construction in O(log log n) communication rounds. SIAM J. Comput., 35(1):120โ131, 2005. doi:10.1137/S0097539704441848.
- [39] Nancy A. Lynch. Distributed Algorithms. Morgan Kaufmann, 1996.
- [40] Danupon Nanongkai. Distributed approximation algorithms for weighted shortest paths. In David B. Shmoys, editor, Symposium on Theory of Computing, STOC 2014, New York, NY, USA, May 31 - June 03, 2014, pages 565โ573. ACM, 2014. doi:10.1145/2591796.2591850.
- [41] Krzysztof Nowicki. A deterministic algorithm for the MST problem in constant rounds of congested clique. In Samir Khuller and Virginia Vassilevska Williams, editors, STOC โ21: 53rd Annual ACM SIGACT Symposium on Theory of Computing, Virtual Event, Italy, June 21-25, 2021, pages 1154โ1165. ACM, 2021. doi:10.1145/3406325.3451136.
- [42] Gopal Pandurangan, Peter Robinson, and Michele Scquizzato. On the distributed complexity of large-scale graph computations. In Christian Scheideler and Jeremy T. Fineman, editors, Proceedings of the 30th on Symposium on Parallelism in Algorithms and Architectures, SPAA 2018, Vienna, Austria, July 16-18, 2018, pages 405โ414. ACM, 2018. doi:10.1145/3210377.3210409.
- [43] Merav Parter. (delta+1) coloring in the congested clique model. In Ioannis Chatzigiannakis, Christos Kaklamanis, Dรกniel Marx, and Donald Sannella, editors, 45th International Colloquium on Automata, Languages, and Programming, ICALP 2018, July 9-13, 2018, Prague, Czech Republic, volume 107 of LIPIcs, pages 160:1โ160:14. Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik, 2018. doi:10.4230/LIPICS.ICALP.2018.160.
- [44] Merav Parter and Hsin-Hao Su. Randomized (delta+1)-coloring in o(log* delta) congested clique rounds. In Ulrich Schmid and Josef Widder, editors, 32nd International Symposium on Distributed Computing, DISC 2018, New Orleans, LA, USA, October 15-19, 2018, volume 121 of LIPIcs, pages 39:1โ39:18. Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik, 2018. doi:10.4230/LIPICS.DISC.2018.39.
- [45] Merav Parter and Eylon Yogev. Congested clique algorithms for graph spanners. In Ulrich Schmid and Josef Widder, editors, 32nd International Symposium on Distributed Computing, DISC 2018, New Orleans, LA, USA, October 15-19, 2018, volume 121 of LIPIcs, pages 40:1โ40:18. Schloss Dagstuhl โ Leibniz-Zentrum fรผr Informatik, 2018. doi:10.4230/LIPICS.DISC.2018.40.
- [46] Boaz Patt-Shamir and Marat Teplitsky. The round complexity of distributed sorting: extended abstract. In Cyril Gavoille and Pierre Fraigniaud, editors, Proceedings of the 30th Annual ACM Symposium on Principles of Distributed Computing, PODC 2011, San Jose, CA, USA, June 6-8, 2011, pages 249โ256. ACM, 2011. doi:10.1145/1993806.1993851.
- [47] David Peleg. Distributed computing: a locality-sensitive approach. SIAM, 2000.
