CSC 255/455 Software Analysis and Improvement (aka Advanced Compilers)

Organization

Class
CSC 255/455 Software Analysis and Improvement (aka Advanced Compilers) (also ECE 455, TCS 455)
Instructor
Sreepathi Pai
Lecture
MW 10:25-11:40 Gavett Hall Room 301 [Note until Jan 31, we'll only meet remotely on Zoom, see Blackboard]
E-mail
sree@cs.rochester.edu
Office Location
Zoom, check Blackboard
Office Hours
Tuesdays 13:00 to 14:00 on Zoom, or by appointment.
T.A. Office Hours
Paul Ouellette Thursdays 14:00 to 15:00 on Zoom

Final Exam Date
May 4, 2022, 12:30 to 15:30, Gavett 301

Academic Honesty

All assignments and activities associated with this course must be performed in accordance with the University of Rochester's Academic Honesty Policy. More information is available at: http://www.rochester.edu/college/honesty.

Disability Resources

The University of Rochester respects and welcomes students of all backgrounds and abilities. In the event you encounter any barriers(s) to full participation in this course due to the impact of a disability plase contact the Office of Disability Resources. The access coordinators in the Office of Disability Resources can meet with you to discuss the barriers you are experiencing and explain the eligibility process for estabilishing academic accommodations. You can reach the Office of Disability Resources at disability@rochester.edu, (585) 276-5075; Taylor Hall.

Description

(mine) Compiler analysis is a field with deep, beautiful theory and immediate, important real-world applications. Nearly all computation is specified as programs, and this course will teach you to write programs that analyze and transform other programs. Learn the subject that tries to answer the questions that gave birth to Computer Science!

(from CDCS) Programming is the automation of information processing. Program analysis and transformation is the automation of programming itself---how much a program can understand and improve other programs. Because of the diversity and complexity of computer hardware, programmers increasingly depend on automation in compilers and other tools to deliver efficient and reliable software. This course combines fundamental principles and (hands-on) practical applications. Specific topics include data flow and dependence theories; static and dynamic program transformation including parallelization; memory and cache management; type checking and program verification; and performance analysis and modeling. The knowledge and practice will help students to become experts in software performance and correctness. Students taking the graduate level will have additional course requirements and a more difficult project.

Goals

Students who take this course will learn:

  • Methods and frameworks for program analysis
    • Dataflow analysis
    • Abstract Interpretation
    • Model Checking
    • Symbolic Execution
    • Deductive Techniques
  • Development of such analyses in real-world compilers

Pre-requisites

CSC254 (or equivalent basic compilers course) required; CSC252 (or basic computer organization/architecture course) recommended; or instructor's permission.

CSC255, in general, can be taken by a sufficiently motivated and competent sophomore, but check with the instructor.

Grading

  1. Homeworks (15%)
  2. Assignments (70%) (5 to 6)
  3. Project/Exams (15%) [TBD]

If we're back in person, this course will conduct exams. Otherwise, I will use projects. A final decision on this will be taken in the first week of February.

Students taking the 4xx version of this course should expect to read more, and expect to solve different problems, and be graded on different criteria.

Late submissions

Inform the instructor in advance if circumstances beyond your control will make you miss a deadline.

Past offerings of this course

I have also taught this course in Spring 2019, Spring 2020, and in Spring 2021.