Parallel Computing- Theory and Practice