Algorithms and Architectures for Parallel Processing