Parallel programming : techniques and applications using networked workstations and parallel computers (Pearson Education, 2005)