Parallel computer architecture and Programming