Kyle Marino
Electrical Engineering
University of Southern California, 2019 - 2024
About Me
Hi, I'm Kyle!

I'm a student at USC pursuing a Master's in Computer Engineering. I love working on personal projects–ranging from pure programming to math to physical builds as well.

In addition to engineering projects, I have been rock climbing for the last eight years. I love climbing outdoors when I can, and am a captain for the USC climbing team. I also like playing guitar and kendama.

More of my accomplishments can be found on my resume.
ME-ViT: A Single-Load Memory-Efficient FPGA Accelerator for Vision Transformers
Best Paper @ HiPC '23
This work introduces ME-ViT, a Memory Efficient FPGA accelerator for Vision Transformer (ViT) inference, designed to reduce memory traffic and improve efficiency. It proposes a single-load policy, storing model parameters and intermediate results on-chip, and uses a memory-efficient processing element (ME-PE) that handles multiple ViT operations. The ME-PE incorporates Softmax and LayerNorm functions to minimize delays. Tested on systolic array sizes, ME-ViT shows significant improvements in memory bandwidth and throughput over existing ViT accelerators on FPGAs, and also enhances power efficiency compared to GPU and FPGA baselines.
Personal Projects
Here are some of my favorite personal projects I have worked on over the years!

Starting in 2016, I built my own self-stabilizing quadcopter entirely from scratch. It is powered by an Arduino Uno, and communicates with a Raspberry Pi to recieve flight commands. The drone self calibrates each motor via photoelectric encoders to ensure accurate thrust responses. It also uses a kalman filter to clean the IMU data to improve sensor reliability. While this is still an ongoing project, these features create an ultra-smooth final flight.

Physics and Rendering Engine
This project is a 3D rigid-body physics engine written on top of a previous rendering engine that I built in Java. Once again, this is entirely written from scratch apart from the LWJGL API. The GPU accelerated collision engine uses a simple non-differential algorithm to determine point intersections, offering an improved performance over conventional approaches. This engine can model any 3D geometry with an estimated mass and inertia distribution given that the computer has adequate specifications. Here is a demo of some simulations.

EquationSolver is a Java program that can approximate imaginary solutions to almost analytical equation. It uses an approach inspired from the YouTube channel 3blue1brown. I developed my own library to handle complex number operations and designed a compiler that would parse a user-inputted equation into quickly executable instructions. This was an improvement that I thought of after designing a similar system for Somsed. This program generates an image that describes the translation of the input space to the output space of the equation that it's solving.

TerminalSplitter is a GUI library written in C/C++ that splits the traditional command line program output into three separate windows. This was created to monitor and send separate commands to multiple processors for my drone project. Each window is multithreaded and runs independently from the other ones. This is designed to be easily implemented into any C/C++ program where splitting the terminal output is useful.

Pseudo Code is an educational web application whose purpose is to introduce programming to novices in an easy-to-understand way using a English-to-code parser. It won the "Best Web Application" award in San Mateo Hacks hackathon in 2017.

Somsed is a web-based graphing calculator that can graph functions, solve systems of equations, row-reduce matrices, and perform statistical regressions.

Snake Solver
Snake Solver is a brute force algorithm that runs a depth-first search over the solution space of the flash game Snake Slider. This runs a full implementation of the flash game and can solve even the most complex levels in a few minutes.

GameSelect is a python program that selects the next board game to play based on player count, time, game rating, and when the game was last played. It also stores individual preferences from the webiste boardgamegeeks and factors those in as well.
Design Experience
Embedded Software Design
Object Oriented Programming
Digital Logic Design
Version Control
PCB Design
Protocol Layer Design
Data Processing