UNIT-I Multi-Core Processors Single core to Multi-core architectures - SIMD and MIMD systems - Interconnection networks - Symmetric and Distributed Shared Memory Architectures - Cache coherence - Performance Issues - Parallel program design. UNIT-II Parallel Program Challenges Performance - Scalability - Synchronization and data sharing - Data races - Synchronization primitives (mutexes, locks, semaphores, barriers) - deadlocks and livelocks - communication between threads (condition variables, signals, message queues and pipes). UNIT-III Shared Memory Programming with OpenMP OpenMP Execution Model - Memory Model - OpenMP Directives - Work-sharing Constructs - Library functions - Handling Data and Functional Parallelism - Handling Loops - Performance Considerations. UNIT-IV Distributed Memory Programming with MPI MPI program execution - MPI constructs - libraries - MPI send and receive - Point-to-point and Collective communication - MPI derived datatypes - Performance evaluation UNIT-V Parallel Program Development Case studies - n-Body solvers - Tree Search - OpenMP and MPI implementations and comparison.