Projects

Projector Controller 9000

Devised a virtual misc (HDMI) device as a kernel module that generates an appropriate uevent when a HDMI connector is inserted by reading the state of the Hot Plug Detect (HPD) pin through the VCOS (VideoCore Operating System) in RaspberryPi 2B. A matching rule with the said uevent further triggers an action which sends a POWER signal to the CASIO projector through an IR Transmitter.

Drone Simulation and Control

A naive quadcopter simulator equipped with the mathematical model of the drone and its non-linear dynamics in the environment. Control methods (PID, MPC) are employed to fly the drone with the desired goals (hovering, trajectory tracking) given the initial conditions. Helpful in learning quadcopter dynamics, understand the process of PID tuning, effects of the initial conditions and controller parameters, etc.

This is an extension of @gibiansky’s codebase. The dynamics were studied from Teppo Luukkonen’s technical paper on ‘Modelling and control of quadcopter’.

Global vs Local Branch Predictors and Cache-Oblivious Algorithms on SimpleScalar simulator

SimpleScalar has the capability to simulate the execution of programs on various configurations of modern processors (even OoO processors). The objective of this project was to prove:

  • how dynamic global predictors should outperform dynamic local predictors on correlated branch conditionals with a random pattern; randomness was embedded because only then one can point out the exploitation, by the global predictor, of the auxiliary information about other branch conditionals that global branch history possesses, instead of simply “learning” the pattern itself. This global view lacks in the local predictors ergo their presumed failure in comparison with global predictors.

  • how cache-oblivious algorithms exploit the functioning and structure of caches in order to attain superior asymptotic time complexity without being aware of the underlying memory hierarchy. This was achieved by a trivial example of performing row-major order traversals rather than column-major order traversals to access elements in a matrix.