Parallel Computing: Theory and Practice (15-897)