Principles of Parallel Algorithm Design