Click the semesters in parentheses for the corresponding course web pages.
CSC780 - Programming Systems for Multi-core and GPU (Fall 2008)
The hardware trend toward many-cores poses many new challenges to software development and programming systems. This research-oriented course focuses on the support by programming systems to maximize the efficiency of future computing. It covers the topics on the principles of parallel programming, the architecture and programming of general purpose GPU, and the techniques in program behavior analysis and optimizations. The course is based on some research papers and include several projects for the students to gain both theoretical and practical insights into the programming for massive parallel architectures.
CSC652 - Advanced Compiler Construction (Spring 2008, Spring 2007)
With the increasing diversity and complexity of computers and their applications, the development of efficient, reliable software has become increasingly dependent on automatic support from compilers and other program analysis and translation tools. This course covers principal topics in understanding and transforming programs at the code block, function, program, and behavior levels. Specific techniques for imperative languages include data flow, dependence, inter-procedural, and profiling analyses, resource allocation, and multi-grained parallelism on both CPUs and GPUs.
CSC442/542 - Compiler Construction (Fall 2007)
This course covers
the basic topics in constructing compilers for programming languages, including the following: Overview of Compilation, Scanning, Parsing, Context-Sensitive Analysis,
Intermediate Representations, Procedure Abstraction, Code Shape, Introduction
to Code Optimization, Code Generation, and Advanced Topics in Dynamic Optimization.
CSC420/520 - Mathematical Foundations of Artificial Intelligence (Fall 2006)
This course introduces basic concepts of artificial intelligence with the focus on statistical learning. We will start from the basic probability and information theory, and cover the theoretical and empirical aspects of various machine learning techniques. The idea is to learn not only what statistical learning is and how various techniques work, but also why they are designed the way they are and how they are likely to evolve in the future. We will draw examples from artificial intelligence, program analysis, and computer network to demonstrate the applications of statistical learning in different areas.