This repository showcases a collection of projects and assignments spanning core areas of computer science, from low-level hardware interactions to high-level algorithmic problem-solving, machine learning, and artificial intelligence. It reflects a strong foundation in computer systems, algorithms, and data-driven computing.
This repository is organized into six main areas:
-
Assembly Language
- Low-level programming using assembly language, focusing on direct interaction with hardware components.
- Demonstrates understanding of CPU architecture, memory management, and instruction sets.
-
Computer Architecture
- Explores how computers are structured and operate at the hardware level.
- Includes topics such as logic gates, processor design, memory hierarchy, and performance optimization.
-
Data Structures and Algorithms
- Contains implementations of fundamental data structures (e.g., arrays, linked lists, trees, graphs) and algorithms (e.g., sorting, searching, dynamic programming).
- Emphasizes algorithm design, complexity analysis, and real-world application.
-
Numerical Methods
- Focuses on solving mathematical problems computationally, using techniques such as interpolation, root finding, and solving systems of equations.
- Includes iterative methods, matrix operations, and polynomial manipulation.
-
GPU Computing
- Practical experience with massively parallel programming using CUDA C, executed on the NCSA Delta supercomputer node.
- Custom CUDA kernels for:
- Matrix Multiplication: Multiple versions optimized for performance benchmarking.
- Vector Multiplication: High-performance implementations.
- Convolution Operations: Designed to measure and compare performance under varying conditions.
- Focuses on performance measurements and optimizations for parallel computation.
-
Machine Learning & AI
- Practical experience with machine learning techniques and theory.
- Supervised Learning: Implementations of regression, classification, and neural networks.
- Unsupervised Learning: Clustering techniques and dimensionality reduction.
This repository follows a progression from understanding low-level hardware interactions in Assembly Language and Computer Architecture to mastering high-level algorithmic thinking in Data Structures and Algorithms. By working through these areas, I have built a robust foundation in both computer system fundamentals and the design of efficient software solutions.
- Assembly Language gives insight into how software interacts directly with hardware, allowing for efficient resource management.
- Computer Architecture bridges the gap between software and hardware, providing a deeper understanding of how code executes on real machines.
- Data Structures and Algorithms take the lessons from lower levels and apply them to build scalable and optimized solutions for complex computational problems.
- Numerical Methods showcases the application of computational techniques to solve scientific and engineering problems.
- GPU Computing demonstrates the power of parallel processing to accelerate data-intensive computations and highlights the importance of performance optimization in modern computing.
- AI & ML Harnessing data-driven intelligence for predictive modeling and decision-making.
Each directory corresponds to one of the five focus areas. Inside each directory, you'll find code implementations and detailed explanations.
- AssemblyLanguage/: Contains assembly programs demonstrating fundamental hardware interactions.
- ComputerArchitecture/: Projects exploring the design and performance of computer systems.
- DataStructuresAlgorithms/: Implementations of common data structures and algorithms.
- NumericalMethods/: Numerical computation projects tackling mathematical problems.
- GPUComputing/: CUDA C programs focusing on parallel computing techniques, with performance measurements and custom kernel implementations.
- MachineLearningAI/: Machine learning models, deep learning experiments, and AI algorithms. (In Progress)