Courses
These are courses taught at IIT by DataSys faculty members. These courses are part of various specializations at IIT in the CS Department:
-
Master Of Computer Science With a Specialization in Distributed and Cloud Computing
-
Computer Science Undergraduate Specialization in Distributed and Cloud Computing
-
Master Of Computer Science With a Specialization in Cyber-Physical Systems
-
Master Of Computer Science With a Specialization in Data Analytics
-
Computer Science Undergraduate Specialization in Data Science
If you are considering doing a Master of Computer Science with a Specialization in Distributed and Cloud Computing, please see the following page for a list of recommended coursework.
Each course title is followed by the names of the faculty members who usually teach these courses, and the next semester each course is likely to be offered (F## denotes the Fall semester and S## denotes the Spring semester).
CS451: Introduction to Parallel and Distributed Computing
(Ioan Raicu, Zhiling Lan)
This course covers general
introductory concepts in the design and implementation of distributed
systems, covering all the major branches such as Cloud Computing, Grid
Computing, Cluster Computing, Supercomputing, and Many-core Computing.
The specific topics that this course will cover are:
asynchronous/synchronous computation/communication, concurrency
control, fault tolerance, GPU architecture and
programming, heterogeneity, interconnection topologies, load balancing,
memory consistency model, memory hierarchies, Message passing interface
(MPI), MIMD/SIMD, multithreaded programming, parallel algorithms &
architectures, parallel I/O, performance analysis and
tuning, power, programming models (data parallel, task parallel,
process-centric, shared/distributed memory), scalability and performance
studies, scheduling, storage systems, and synchronization.
Some of these topics are covered in
more depth in the graduate courses focusing on specific sub-domains of
distributed systems, such
CS546,
CS550,
CS553,
CS554, CS570,
and CS595. While
this CS451 course is not a pre-requisite to any of the graduate level
courses in distributed systems, both undergraduate and graduate students
who wish to be better prepared for these courses could take this
CS451
course. This course involves lectures, programming assignments, and
exams. This course was offered as
CS495 in the past. Prerequsites: CS351 or CS450.
CS550: Advanced Operating Systems (Ioan Raicu, Zhiling Lan)
This course covers general issues
of design and implementation of advanced modern operating systems. The
focus is on issues that are critical to the applications of distributed
systems and computer networks, which include interprocess communication,
distributed processing, sharing and replication of data and files.
Approximately two third of the course will be devoted to basic concepts
and techniques, and the remaining third will be on assorted current
topics in modern operating systems and distributed systems.
Prerequsites: CS450.
CS553: Cloud Computing (Ioan Raicu)
This course will cover a new distributed computing paradigm
called Cloud Computing. Topics include distributed system models and
enabling eechnologies, computer clusters for scalable Computing, virtual
machines and virtualization of clusters and datacenters, design of cloud
computing platforms, cloud programming and software environments
(Workflow Systems, MapReduce, Google App Engine, Amazon AWS, Microsoft
Azure, and emerging cloud software stacks), grid computing and resource
management, P2P computing with overlay networks, ubiquitous computing
with clouds and the Internet of things, and dta-intensive distributed
computing. The course involves lectures, homeworks, programming
assignments, and exams. Prerequsites: CS450 or CS495.
CS554: Data-Intensive Computing (Ioan Raicu)
This course is a tour through various research topics in
distributed data-intensive computing, covering topics in cluster
computing, grid computing, supercomputing, and cloud computing. We will
explore solutions and learn design principles for building large
network-based computational systems to support data intensive computing.
This course is geared for junior/senior level undergraduates and
graduate students in computer science. Prerequsites: CS495 (Intro to
Distributed Systems) or CS495 or CS546 or CS550 or CS553 or CS570.
CS695: Doctoral Seminar (Ioan Raicu)
This course is required for all PhD students in computer science, and
will expose the students to presentations from senior people in computer
science from industry, government labs, and academia. The course will
involve outside invited speakers, written summaries of presentations,
and short oral presentations by the students. Prerequsites: PhD student.
Other Relevant Courses
CS546: Parallel and Distributed Processing (Xian-He Sun, Zhiling Lan)
This course covers general issues of parallel processing, which include system, architectures, programming, performance evaluation, and applications. Approximately two third of the course will be devoted to basic concepts and techniques, and the remaining third will be on programming and assorted current topics in parallel computing. Four textbooks are recommended as the general guideline of the lecture. Both undergrads and grads are welcome to the class. Prerequisites: CS450 and CS470
CS570: Advanced Computer Architecture (Xian-He Sun)
This course is about advanced computer architecture. It teaches the science and art of selecting and interconnecting hardware components to create a computer that meets functional, performance and cost goals, and teaches the qualitative and quantitative examination of computer design tradeoffs. We cover the system architecture, processor technology, advanced memory hierarchy and I/O organization, power and energy management, and reliability, and conver the new development in multicore, data center design, and parallel I/O. We will learn, for example, how uniprocessors execute many instructions concurrently and why state-of-the-art memory systems are nearly as complex as processors, and etc. We will follow the text by Patterson and Hennessy, with additional material pulling from other recources. Assignments will include problems from the end of the chapters as will as some selected exercises. For the last part of the course we will read an assortment of papers and work on different term projects.
CS562: Virtual Machines (Kyle Hale)
This course will draw back the curtains and expose the magic that makes various types of VMs work. By the end of the course, you will have a deep understanding of hypervisors, system virtualization, machine emulation, language virtual machines, binary translators, virtual resource management, and more. You will gain exposure to a real-world hypervisor code-base. Furthermore, you will actually build a virtual machine and develop an intuition for using VMs to solve problems. The course will involve lectures, written assignments, involved programming projects, and discussions of foundational research papers.
CS595: OS and Runtime System Design for Supercomputing (Kyle Hale)
This is a seminar course that will expose you to current research at the intersection of several areas within computer systems, including Operating Systems, Computer Architecture, High-performance Computing, Parallel Programming, and Programming Languages. Students will apply what they learn to complete a course project in the design of OS internals for a specific runtime system, parallel language, or parallel algorithm.
CS595: Fault Tolerance Computing (Zhiling Lan)
This is a research-oriented course that will cover challenges and opportunities in fault tolerance computing. There are no required textbooks. Instead, research publications will be used as reference materials. Each lecture will have 1-2 assigned papers to read. Students should read the papers before coming to class, participate in class discussions, present at least one research topic during the course, and do a term project individually or in a two-member team. and be prepared to discuss them. Major topics that will be covered include fautl measurement and modeling, fault detection and diagnosis, fault avoidance/prevention techniques, and FT applications. Prerequisites: CS450 and CS470