Distributed voting is an important problem in reliable computing. In an N
Modular Redundant (NMR) system, the N computational modules execute identical tasks
and they need to periodically vote on their current states. In this paper, we propose a
deterministic majority voting algorithm for NMR systems. Our voting algorithm uses
error-correcting codes to drastically reduce the average case communication
complexity. In particular, we show that the efficiency of our voting algorithm can be improved
by choosing the parameters of the error correcting code to match the probability of
the computational faults. For example, consider an NMR system with 31 modules,
each with a state of m bits, where each module has an independent computational
error probability of 10 to the power of minus 3. In this NMR system, our algorithm can reduce the average case communication complexity to approximately 1.0825m compared with the
communication complexity of 31m of the naive algorithm in which every module broadcasts
its local result to all other modules. We have also implemented the voting algorithm
over a network of workstations. The experimental performance results match well the
theoretical predictions