I work at the intersection of systems software and distributed computing theory, and most of my work is tied together by the twin themes of nonvolatile memory technologies and parallel programming. On the systems side, I have built run-time libraries for ensuring consistent state on machines with new nonvolatile memory technologies, concurrent and persistent data structures, and novel consensus protocols. On the theory side, I have proven my systems work correct and developed formal tools for reasoning about programs in nonvolatile memory. In general, I build practical systems with formal guarantees
keywords
computer systems, systems software, nonvolatile memory, distributed systems, concurrent programming
CSCI 4313 - Concurrent Programming
Primary Instructor
-
Fall 2022 / Fall 2023 / Fall 2024
Introduces the theory and practice of multicore programming. The first part of the course presents foundations of concurrent programming: mutual exclusion, wait-free and lock-free synchronization, spin locks, monitors, memory consistency models. The second part presents a sequence of concurrent data structures and techniques used in their implementations (coarse-grained, fine-grained, optimistic and lock-free synchronization). Recommended prerequisite: ECEN 3593. Same as ECEN 4313 and ECEN 5313 and CSCI 5313.
CSCI 4555 - Compiler Construction
Primary Instructor
-
Spring 2022 / Spring 2023 / Spring 2024
Introduces the principles and techniques for compiling high-level programming languages to assembly code. Topics include parsing, instruction selection, register allocation, and compiling high-level features such as polymorphism, first-class functions, and objects. Students build a complete compiler for a simple language. Same as ECEN 5523 and ECEN 4553 and CSCI 5525.
CSCI 4830 - Special Topics in Computer Science
Primary Instructor
-
Fall 2019 / Fall 2020
Covers topics of interest in computer science at the senior undergraduate level. Content varies from semester to semester. Only 9 credit hours from CSCI 4830 and/or CSCI 4831 can count toward Computer Science BS or BA.
CSCI 5313 - Concurrent Programming
Primary Instructor
-
Fall 2023 / Fall 2024
Introduces the theory and practice of multicore programming. The first part of the course presents foundations of concurrent programming: mutual exclusion, wait-free and lock-free synchronization, spin locks, monitors, memory consistency models. The second part presents a sequence of concurrent data structures and techniques used in their implementations (coarse-grained, fine-grained, optimistic and lock-free synchronization). Recommended prerequisite: ECEN 3593. Same as ECEN 5313 and ECEN 4313 and CSCI 4313.
CSCI 5525 - Compiler Construction
Primary Instructor
-
Spring 2022 / Spring 2023 / Spring 2024
Introduces the principles and techniques for compiling high-level programming languages to assembly code. Topics include parsing, instruction selection, register allocation, and compiling high-level features such as polymorphism, first-class functions, and objects. Students build a complete compiler for a simple language. Recommended prerequisites: CSCI 3155 and CSCI 2400 or ECEN 3350. Same as CSCI 4555 and ECEN 4553 and ECEN 5523.
CSCI 7000 - Current Topics in Computer Science
Primary Instructor
-
Fall 2020 / Fall 2022 / Spring 2023 / Spring 2024
Covers research topics of current interest in computer science that do not fall into a standard subarea. May be repeated up to 18 total credit hours.
ECEN 1310 - Introduction to C Programming
Primary Instructor
-
Spring 2020 / Spring 2021 / Fall 2024
This introductory programming course teaches fundamental concepts using the C programming language. The class generally meets programming requirements for majors within the engineering school and assumes no prior programming experience. Includes a weekly computer lab session. Covered topics include pointers, control flow, dynamic memory, and abstract data types. Recommended co-requisite: APPM 1350 or equivalent. Degree credit not granted for this course and CSCI 1300 or CSPB 1300.
ECEN 4313 - Concurrent Programming
Primary Instructor
-
Fall 2019 / Fall 2020 / Fall 2022 / Fall 2023 / Fall 2024
Introduces the theory and practice of multicore programming. The first part of the course presents foundations of concurrent programming: mutual exclusion, wait-free and lock-free synchronization, spin locks, monitors, memory consistency models. The second part presents a sequence of concurrent data structures and techniques used in their implementations (coarse-grained, fine-grained, optimistic and lock-free synchronization). Recommended prerequisite: ECEN 3593. Same as CSCI 4313 and ECEN 5313 and CSCI 5313.
ECEN 4553 - Compiler Construction
Primary Instructor
-
Spring 2022 / Spring 2023 / Spring 2024
Introduces the principles and techniques for compiling high-level programming languages to assembly code. Topics include parsing, instruction selection, register allocation, and compiling high-level features such as polymorphism, first-class functions, and objects. Students build a complete compiler for a simple language. Same as ECEN 5523 and CSCI 4555 and CSCI 5525.
ECEN 5033 - Special Topics
Primary Instructor
-
Fall 2019 / Fall 2020 / Spring 2023 / Spring 2024
Examines a special topic in Electrical, Computer and Energy Engineering. May be repeated up to 9 total credit hours.
ECEN 5313 - Concurrent Programming
Primary Instructor
-
Fall 2022 / Fall 2023 / Fall 2024
Introduces the theory and practice of multicore programming. The first part of the course presents foundations of concurrent programming: mutual exclusion, wait-free and lock-free synchronization, spin locks, monitors, memory consistency models. The second part presents a sequence of concurrent data structures and techniques used in their implementations (coarse-grained, fine-grained, optimistic and lock-free synchronization). Recommended prerequisite: ECEN 3593. Same as CSCI 5313 and ECEN 4313 and CSCI 4313.
ECEN 5523 - Compiler Construction
Primary Instructor
-
Spring 2022 / Spring 2023 / Spring 2024
Introduces the principles and techniques for compiling high-level programming languages to assembly code. Topics include parsing, instruction selection, register allocation, and compiling high-level features such as polymorphism, first-class functions, and objects. Students build a complete compiler for a simple language. Same as ECEN 4553 and CSCI 4555 and CSCI 5525.