Software Engineering for Multicore Systems. ------------------------------------------ Introduction: Introduction to Multicores and Software Engineering - Review of Multicore Hardware - SISD, SIMD, MISD, MIMD, multiple cpus, homogeneous, heterogeneous, dynamic, shared memory, distributed memory, hybrid, interconnect (read 1) Parallel programming basics - threads, messages, different types of synchronization/barriers, examples (read 2) Performance issues - max speedup, cost factors - from memory overhead to communication overhead, ideal and useful parallelism. (Prog assignment 1) Different types of parallelism - fork-join, SPMD model, task parallel, data parallel, pipe-line parallelism (Prog assignment 2) Memory models - atomic, sequential, strict, relaxed ... Testing and Tuning - issues in parallel programming - race conditions, dead locks, live locks, safety, idle time, locality. Mapping workflow to parallel algorithms - divide and conquer, pipe-line parallelism, understanding schedulers, patterns in parallel programming. Services: Characterization, Identification, Batch to Online translation. Measurement of parallelism. - threads, barriers, cost model (Read 3) New things that will be learnt: Java threads, Eclipse based Debugging, version control system, JUNIT, news group/web notice board.