Coursework from my Electrical & Computer Engineering degree — systems programming, concurrency, GPU computing, operating systems and algorithms, mostly in C, with a Java course and some CUDA.
These were written between 2018 and 2021. They are archived here as a single repository rather than nine separate ones. Each course keeps its own directory, and most subprojects have their own README covering the assignment and how to build it.
| Course | Projects | Language |
|---|---|---|
| artificial-intelligence | Breadth-first search over a maze, a forward-chaining inference engine, the knight's tour, and a labyrinth solver | C, C++ |
| c-programming | A basic shell, file encryption, a flight booking service over sockets, Minesweeper, and a flat-file database — covering processes, pipes, signals, shared memory, sockets and I/O multiplexing | C |
| concurrent-programming | The same three problems — a master/worker prime finder, a one-lane bridge, and a roller-coaster — solved four ways: active waiting, semaphores, monitors and critical regions. Plus user-level threads and a coroutine scheduler | C, pthreads |
| data-structures | Binary search trees, linked lists, stacks and FIFOs, and a set of sorting algorithms built on them | C |
| high-performance-computing | A CUDA histogram and a CUDA convolution, each benchmarked against a sequential CPU version using constant memory, shared memory and streams; plus an OpenMP k-means profiled with Intel VTune | CUDA, OpenMP, C |
| mobile-pervasive-computing | A k-dominating set algorithm for energy conservation in sensor networks, implemented from the Pemmaraju & Pirwani paper on domatic partitions | C |
| object-oriented-programming | An arithmetic calculator, a gift shop management system, and an image processing tool that equalises and averages astronomical image sequences | Java |
| operating-systems | A FUSE filesystem, a best-fit memory allocator patched into the Linux kernel, an SJF scheduler, and a process-tree syscall implemented three ways — as a syscall, a kernel module and through sysfs | C |
There is no top-level build. Each project is self-contained and most ship a Makefile:
cd concurrent-programming/Semaphores/Competitive_threads
make
./train 5 33The CUDA projects need the NVIDIA toolkit (nvcc), the OpenMP k-means expects Intel's icc via
its run.sh, and the kernel projects need matching kernel headers to build against.
high-performance-computing/k-means_northwestern_Optimized is not my code. It was provided by
Northwestern University and used to get familiar with OpenMP and the VTune profiler. The only file
I modified is kmeans.c. The original project's own README is kept in that directory.
mobile-pervasive-computing implements an algorithm from
Pemmaraju & Pirwani (2006); the paper is theirs,
the implementation is mine.
This is student work, kept as it was written. The approaches are not always the best ones available and the style has moved on since — it is here as a record of the ground covered, not as a demonstration of how I write code today. For current work, see my pinned repositories.