Matt Woodhouse

About

Hi, I'm Matt. I have professional experience writing software in the areas of digital subscriber line and machine learning, primarily working with C, C++, Python, and assembly on multi-core embedded platforms. I'm currently working as a Senior Firmware Engineer at Broadcom.

I studied Computer Science at the University of Bristol where I completed my MEng in 2017. My final dissertation project explored real-time hair simulation and rendering on the GPU.

If you'd like to get in contact please reach out to me at [email protected].

Skills

Hardware Modelling

Professional

  • Creation of cycle-approximate behavioural models in C++ from microarchitectural specifications for various hardware components ranging from LRU caches to networking subsystems.
  • Unit and integration testing of behavioural models against specified behaviour, including comparisons against simulated RTL and real silicon.
  • Creation of an encodings generator in Python used to optimally assign opcodes for DSP operations to minimise decoder area and complexity.

Additional

  • Creation of a cycle-accurate pipelined superscalar out-of-order processor simulator in C++ for the Advanced Computer Architecture unit at university.
  • Creation of a Reverse Polish notation calculator and other circuits in Logisim during the first year of university.
  • Simple hobby projects in Verilog.

Firmware Engineering

Professional

  • Design and creation of drivers for various DSL hardware components in C.
  • Testing drivers using C and C++ on cycle-approximate models, RTL simulations (software and FPGA), and silicon.
  • Optimisation of DSL traffic algorithms in VLIW assembly over multiple cores.
  • Analysis of waves from RTL simulation to determine causes of hardware stalls to aid in optimisation work.
  • Performance testing of hardware components to ensure the specification has been achieved.

Additional

Machine Learning

Professional

  • Experience with a variety of frameworks including TensorFlow, PyTorch, and TVM with a focus on inference at the edge on embedded devices. This has been primarily in C++ and Python on the host, and C, C++, and assembly on device.
  • Optimisation of ML operators for vector processors in assembly including activation functions and matrix multiplies. This has also extended to optimising entire networks in the case of e.g. stateful LSTMs.
  • Creation of a variety of browser-based tools to aid with performance and data analysis using HTML, CSS, and JavaScript. This includes an SQLite database viewer for ML operator analysis and a visual profiler for performance analysis.

Additional

Computer Graphics

Professional

  • Creation of a tool for streaming and visualising memory access patterns using JavaScript and WebGL. This was used to aid in the design of a hardware prefetcher for the L2 cache of a vector processor.

Additional

  • Final year university dissertation project exploring real-time hair simulation and rendering in C++ and OpenGL. Proposed a novel approach to hair self-shadowing.
  • Creation of a software rasteriser and raytracer in C++ for the Computer Graphics unit while at university. Performance was improved using Intel SSE intrinsics and OpenCL.
  • Various hobby projects in C++ and Vulkan with a focus on bindless renderer design.
  • Animation and modelling in Blender.

Game Development

Additional

  • Creation of an augmented reality robot battle area game in Unity for a group project at university. The arena was projected onto the floor where two Sphero robots would battle. These were controlled via an Android app and could interact with the projected virtual game world.
  • Game engine development in C++ using OpenGL and Vulkan.
  • Development of 2D and 3D games in C# using XNA.
  • Creation of various game prototypes using the Unreal, Unity, and Godot engines.

Contact

If you feel my skill set matches your requirements and you'd like to discuss working together I'd love to hear from you. You can reach me by email at [email protected]. If you're interested in a copy of my CV please contact me using the email above and I'll send a copy through.

The majority of my professional work has been closed-source, but to get an idea for how I program you can browse through some of my hobby projects on GitHub here.

This website was last updated on the 23rd of November 2022.