Computer Architecture is an important layer in the computing system that has to be efficient for the whole system to operate efficiently. In the current era of computation, multiple cores are deployed in devices that range from smartphones, laptops, desktops, servers, and cloud-based systems. Microarchitecture innovations play an important role in improving overall system performance. Though system performance has been the primary citizen for a long time, microarchitecture security has become equally important in the last decade; a lot of sensitive data that is stored and processed by modern systems can get leaked through various microarchitecture components, such as branch predictors, caches, Translation look-aside buffers (TLBs), page tables, prefetchers, Dynamic Random Access Memory (DRAM). These components create side- and covert-channels, and become sources of information leakage in the form of side-channel and covert-channel attacks. The course aims to make students understand, code, and appreciate the subtle issues in the modern systems keeping both performance and security (offensive and defensive) aspects in mind. The course will be a fusion of fundamentals and state-of-the-art (recent research papers from top conferences like ISCA, MICRO, HPCA, ASPLOS, USENIX SECURITY, S&P, PACT, and DAC).

Prereq:
UG students: Basics on Computer Architecture and/or OS
Fundamentals on Computer Architecture: Please refer Lecture 28 to 43
Fundamentals on OS: Please refer Lecture 1 to 11
PG students: One of these courses: CS744, CS742, or CS683.
If you do not know anything but you are ready to learn, it is perfectly fine too.