The course aims to provide basic knowledge and skills in parallel programming of multicore-based systems, which includes laptops and desktop computers as well as supercomputers. The course covers fundamental concepts in parallel computer architecture, parallel programming models, design of parallel algorithms, design patterns for parallel programs, as well as experimental methodology and performance analysis. The course integrates theory with practice to enhance the ability to apply the learned knowledge.