Course Description
    This is a seminar course that will study how recent advances in program synthesis can be exploited to produce efficient programs for heterogeneous parallel computers.

    Modern processors are very diverse and consist of interconnections of multicores, GPUs, DSPs and FPGAs. Multicore designs have themselves become very complex and exhibit great variation in the number of cores, the core organization, the cache hierarchy and inter-core communication. At the same time, the set of problem domains that need to exploit the computational power of these complex processors is becoming more diverse and now includes new areas like machine learning and data analytics in additional to traditional fields like computational science.

    Addressing the problem of effective software development for complex and diverse hardware architectures will likely require partially or completely automating many  aspects of software development that are currently done manually. In this course, we will study recent advances in program synthesis from very high level specifications with the  goals of (i) understanding the state of the art in this area and (ii) determining what problems can be tackled in the near future with reasonable assurance of success.

    This course is intended for graduate students who are looking for dissertation topics at the intersection of programming languages, architecture, and machine learning.
Course work: Students will present papers, participate in discussions, and do a substantial final project.

Prerequisites: Graduate-level courses on computer architecture and compilers

Topics and schedule

Piazza: CS 395T-S


Useful links to similar courses:
Computer-Aided Reasoning for Software
Topics in Programming Languages: Program Synthesis