EECS 471
Applied Parallel Programming with GPUs is an introductory course to GPU programming at the University
of Michigan. The course covers various common parallel algorithms, introduces students to the CUDA framework and associated libraries, and teaches a variety of concurrency and
synchronization concepts.
Graduate Student Instructor
During the spring of 2023 I was selected to be a Graduate Student Instructor for the EECS 471
course at the University of Michigan. Teaching this course not only challenged my knowledge of GPU programming, but also taught me the importance of being transparent and humble with students.
They say teaching is one of the best ways to learn and I believe that is absolutely the case. In teaching this class I had students frequently ask me questions, which tested my understanding of GPUs and required me to think differently about how to solve problems with GPUs and how to solve GPU problems. From counting the number of aggregated operations in a parallel function call to computing the utilization of a GPU different students learn in different ways, which requires me to teach in different ways, and in turn teaches me to also learn in different ways.
One of the biggest challenges I overcame teaching this course was being willing to admit that I was wrong. I am an imperfect individual, so consequently, I made errors in my explanations and assignments from time to time. However, I found that through transparency and by admitting to the entire class whenever I made a mistake, the students were more understanding of my shortcomings and had a better experience taking the class. It is not easy to admit that you are wrong or that you made a mistake to a group of 60 people but having the humility and transparency to be able to do this, I think, dramatically helped the students. At the end of the day, I need to make sure I am doing what is best for the students no matter how uncomfortable it may be for me.
They say teaching is one of the best ways to learn and I believe that is absolutely the case. In teaching this class I had students frequently ask me questions, which tested my understanding of GPUs and required me to think differently about how to solve problems with GPUs and how to solve GPU problems. From counting the number of aggregated operations in a parallel function call to computing the utilization of a GPU different students learn in different ways, which requires me to teach in different ways, and in turn teaches me to also learn in different ways.
One of the biggest challenges I overcame teaching this course was being willing to admit that I was wrong. I am an imperfect individual, so consequently, I made errors in my explanations and assignments from time to time. However, I found that through transparency and by admitting to the entire class whenever I made a mistake, the students were more understanding of my shortcomings and had a better experience taking the class. It is not easy to admit that you are wrong or that you made a mistake to a group of 60 people but having the humility and transparency to be able to do this, I think, dramatically helped the students. At the end of the day, I need to make sure I am doing what is best for the students no matter how uncomfortable it may be for me.
MICHIGAN MARS ROVER TEAM
The Michigan Mars Rover team is a student organization that constructs a robot to compete in a Mars themed competition. I joined the perception sub-team
in the fall of 2019 and have been a member ever since. The perception sub-team focuses on capturing and processing the environment around the rover to identify
specific objects and avoid obstacles. To learn more about the MROVER team check out their website.
Autonomy Branch Lead
For the 2021-2022 school year I was selected to be the autonomy branch lead of the Michigan Mars Rover team. The autonomy branch consists of 4 sub-teams: Perception,
Localization, Navigation, and Simulation. As the branch lead it is my responsibility to manage the interactions of the various sub-teams and ensure that they are
keeping up with the goals and objectives they set forth. In addition to overseeing the sub-teams I also maintained and developed several integration testing systems which
utilize Docker, Python, and Travis CI. These integration testing systems were designed to minimize the amount of time that we spent physically debugging on the rover, and
the tests and scripts I developed helped reduce the setup time of physical testing on the rover by 75% and nearly eliminated all compilation errors encountered on the rover.
The main challenge that I faced this year, came in the spring of 2022, as we neared various system deadlines and realized we may not reach them. The navigation system was in the process of implementing a completely new navigation algorithm called a behavior tree, which would replace the current state machine implementation. Everyone was optimistic about the completion of this algorithm; however, its implementation was well behind schedule, and it was not even ready to be integration tested. Hopes were set on the implementation of this new system, however, since the current navigation system was nearly unmaintainable and contained fatal non-deterministic bugs that we were unable to identify. It was apparent to me that the new algorithm would not be ready for the competition and that the only way to get the system functional was to revise the old algorithm. Consequently, I did a deep analysis of the navigation system, understood the current system architecture, and created a new system architecture with far cleaner and simpler interfaces. When I suggested this redesign my recommendation was met with great opposition as it would require serious changes to a system that was considered to be close to competition ready. To combat this opposition, I developed an incremental implementation plan, that allowed us to implement parts of the new architecture in various steps, as opposed to changing the entire system all at once. This way, if one part were to be implemented incorrectly or we ran out of time to implement it, we could abandon that revision and the system would still function. The architecture revision proved to be a great success. Implementing the changes was fast, it made debugging the system significantly easier, and it resolved the unknown bug that was causing our system to crash.
The main challenge that I faced this year, came in the spring of 2022, as we neared various system deadlines and realized we may not reach them. The navigation system was in the process of implementing a completely new navigation algorithm called a behavior tree, which would replace the current state machine implementation. Everyone was optimistic about the completion of this algorithm; however, its implementation was well behind schedule, and it was not even ready to be integration tested. Hopes were set on the implementation of this new system, however, since the current navigation system was nearly unmaintainable and contained fatal non-deterministic bugs that we were unable to identify. It was apparent to me that the new algorithm would not be ready for the competition and that the only way to get the system functional was to revise the old algorithm. Consequently, I did a deep analysis of the navigation system, understood the current system architecture, and created a new system architecture with far cleaner and simpler interfaces. When I suggested this redesign my recommendation was met with great opposition as it would require serious changes to a system that was considered to be close to competition ready. To combat this opposition, I developed an incremental implementation plan, that allowed us to implement parts of the new architecture in various steps, as opposed to changing the entire system all at once. This way, if one part were to be implemented incorrectly or we ran out of time to implement it, we could abandon that revision and the system would still function. The architecture revision proved to be a great success. Implementing the changes was fast, it made debugging the system significantly easier, and it resolved the unknown bug that was causing our system to crash.
Perception Sub-Team Lead
For the 2020-2021 term I was selected to be the Perception sub-team Lead. Currently, the sub-team has 13 members, including myself, which
is twice as many as the number of people that were on the sub-team last year. I believe that my philosophy of leading through service, my project management skills,
and my enthusiasm for the team are what has allowed for our sub-team to dramatically grow despite Coronavirus Pandemic.
My leading through service philosophy has led me to spend a lot of time teaching my members and providing them with the tools they need to be successful on the sub-team. During sub-team meetings I primarily spend my time working with the other members of the team, providing them with the background of our code base they need to tackle their projects, helping them setup and maintain their git work environments, and helping them to troubleshoot problems that they are stuck on. I have spent much time working on making our complex and computationally intensive development environment easily accessible to members. I work on my own team projects outside of team meetings to ensure that I have the time to work with my team during meetings. I believe that by investing a lot of time in and serving my team members I have helped them to enhance their coding skills, as well as earned their respect, which makes them more willing to follow my instruction.
My leading through service philosophy has led me to spend a lot of time teaching my members and providing them with the tools they need to be successful on the sub-team. During sub-team meetings I primarily spend my time working with the other members of the team, providing them with the background of our code base they need to tackle their projects, helping them setup and maintain their git work environments, and helping them to troubleshoot problems that they are stuck on. I have spent much time working on making our complex and computationally intensive development environment easily accessible to members. I work on my own team projects outside of team meetings to ensure that I have the time to work with my team during meetings. I believe that by investing a lot of time in and serving my team members I have helped them to enhance their coding skills, as well as earned their respect, which makes them more willing to follow my instruction.
BRAZILIAN JIU JITSU
Brazilian Jiu Jitsu is a combat sport that focuses on grappling from the ground. It is physically and mentally challenging as you must utilize good technique,
so that you can manipulate your opponent effectively without using up too much of your own energy. It is a humbling sport as good technique will overcome great strength
and allows you to get beat up by individuals far smaller than yourself. I have been doing gi Jiu Jitsu when I was younger from 2013-2017 and since going to college in 2019 have
been training in no gi Jiu Jitsu, which I enjoy much more.
Blue Jitsu Vice President
For the 2021 and 2022 school year I was elected to be the Vice President of the Blue Jitsu club at the University of Michigan. As the vice president it is my responsibility to work with
the president and the rest of the leadership team to help train new members, host recruiting events, informational events, and manage club logistics. Throughout the semester
we will coordinate and host training sessions to teach new individuals the fundamentals of grappling, so that they don’t feel overwhelmed when first going to the club. The
members of the club go regularly to the Final Round Training Center where they can get professional Jiu Jitsu instruction from the mentors there. By teaching new members the
fundamentals of Jiu Jitsu I’ve learned to pay close attention to details within the technique and to articulate these details carefully to beginners, so as to minize their mistakes.
SCOUTS BSA
Scouts BSA, formerly called "The Boy Scouts of America", is a program dedicated to instilling core principals in its members
that enable and empower them to be future leaders. I began my scouting journey during 2014 in Troop 777 based in Northville, MI.
Scouting taught me what it means to lead through service and has helped me to become the man I am today.
Eagle Project
For my Eagle Project I organized and led a 5 day FIRST Robotics based summer camp. The camp introduced middle schoolers to high school
level robotics, teaching them basic mechanical, electrical, and programming skills.
Campers were taught these skills by designing and constructing a spray paint machine. The campers, with assistance from the high school staffers, cut, drilled, and riveted an aluminum structure to hold a can of spray paint and a pneumatic piston to activate it. They then wired the pneumatic piston to a solenoid that was controlled by a Raspberry Pi connected to a custom circuit they made using a bread board. They finally programmed the raspberry pi to activate the solenoid when a limit switch was pressed.
It was a complex project, but was extremely rewarding for me as I learned the importance of planning, training volunteers, and being able to improvise when things don't go as planned. For a better view of the completed project check out this video.
Campers were taught these skills by designing and constructing a spray paint machine. The campers, with assistance from the high school staffers, cut, drilled, and riveted an aluminum structure to hold a can of spray paint and a pneumatic piston to activate it. They then wired the pneumatic piston to a solenoid that was controlled by a Raspberry Pi connected to a custom circuit they made using a bread board. They finally programmed the raspberry pi to activate the solenoid when a limit switch was pressed.
It was a complex project, but was extremely rewarding for me as I learned the importance of planning, training volunteers, and being able to improvise when things don't go as planned. For a better view of the completed project check out this video.
Senior Patrol Leader
As Senior Patrol Leader I was responsible for managing the troop. I planned out the weekly meetings, made sure the patrols were properly organizing and preparing for campouts,
and lead the patrols during campouts. Being Senior Patrol Leader was an incredible learning experience for me as I learned to work with adults and how to maintain authority
over the members of the troop, even though I was delegating assignments that many scouts would've preferred not to do.
I practiced leading by serving, by assisting all the patrols whenever possible and in doing so, I was able to earn the respect of the members in the troop. By earning their respect, they were willing to listen to my direction and performed the tasks that I needed them to do. Maintaining this respect was a challenging, and I made many mistakes during my time as Senior Patrol Leader; however, I always made sure that I admitted and apologized for making such mistakes, and the scouts didn't think lesser of me. Leading by serving is a philosophy that I live by since, I was able to experience its effectiveness whilst being the Senior Patrol Leader.
I practiced leading by serving, by assisting all the patrols whenever possible and in doing so, I was able to earn the respect of the members in the troop. By earning their respect, they were willing to listen to my direction and performed the tasks that I needed them to do. Maintaining this respect was a challenging, and I made many mistakes during my time as Senior Patrol Leader; however, I always made sure that I admitted and apologized for making such mistakes, and the scouts didn't think lesser of me. Leading by serving is a philosophy that I live by since, I was able to experience its effectiveness whilst being the Senior Patrol Leader.
FIRST ROBOTICS
FIRST Robotics is a highly competitive high school robotics program. FIRST aims to introduce high schoolers to advanced robotic technology, create a firm foundation for students in
the various fields pertaining to robotics, and encourage them to take a leading role in tackling engineering problems. I was a member from my school's FIRST Robotics team from 2017-2019
and being a part of that team was one of the most rewarding experiences of my life. For more information about FIRST Robotics check out their website.
Team Captain
Being the Team Captain of my High School Robotics Team for the 2019 season was one of the greatest expereiences of my life. Robotics is something I am extremely passionate about and when I was given
the opportunity to lead the team, I was able to fully commit myself to the team. My total committment to the team allowed me to gain the respect of the students and mentors on the team, allowed me
to be an effective leader, and have a ton of fun while doing so. During the 2019 6 weeks build season I spent over 30 hours a week, designing the robot, coordinating the various sub-teams, helping
out the sub-teams when they fell behind, and enforcing or adapting our schedule to ensure deadlines were met.
That year was the first year that we designed and manufactured all the major components of the robot, as opposed to buying a kit with directions, as we had done in previous years. I pushed the team to work harder than ever before that year, scheduling many extra hours of build time to make sure deadlines were met and making sure people were staying on task and getting things done. There were a lot of bumps along the way, I made many mistakes and had many components developed that were not effective or functional. However, I viewed these failures and setbacks as learning experiences and iterations towards developing more effective and functional components. In the end, all our hard work came to fruition when the team won a district competition. It was one of the best days of my life, as I got to see not only my hard work, but the hard work of everyone on the team manifest. The whole team felt pride for what they had accomplished, for many were just as committed as I was, and I was extremely proud of my team.
That year was the first year that we designed and manufactured all the major components of the robot, as opposed to buying a kit with directions, as we had done in previous years. I pushed the team to work harder than ever before that year, scheduling many extra hours of build time to make sure deadlines were met and making sure people were staying on task and getting things done. There were a lot of bumps along the way, I made many mistakes and had many components developed that were not effective or functional. However, I viewed these failures and setbacks as learning experiences and iterations towards developing more effective and functional components. In the end, all our hard work came to fruition when the team won a district competition. It was one of the best days of my life, as I got to see not only my hard work, but the hard work of everyone on the team manifest. The whole team felt pride for what they had accomplished, for many were just as committed as I was, and I was extremely proud of my team.