Skip to main content


I am a PhD candidate in the Computer Systems Lab at Cornell University. I’m advised by Dr. José F. Martínez

I’m interested in smart ways of implementing algorithms in hardware, and re-thinking the hardware-software interface. Presently, I’m working on developing hardware for inference in probabilistic graphical models.

Before joining Cornell, I completed my Bachelor of Technology in Electrical Engineering (with a minor in Physics) at the Indian Institute of Technology, Bombay. My thesis work then related to scheduling users in OFDMA networks.


  • Computer Architecture
  • Machine Learning
  • Probabilistic Graphical Models


  • MS in Electrical and Computer Engineering, 2016

    Cornell University

  • BTech in Electrical Engineering, 2012

    Indian Institute of Technology, Bombay

Recent Publications

  • , , , , , Fast hierarchical implementation of sequential tree-reweighted belief propagation for probabilistic inference, in Field Programmable Logic and Applications.

    Details DOI PDF

  • , , , , , , , , GraphGen: An FPGA framework for vertex-centric graph computation, in Field-programmable custom computing machines.

    Details DOI PDF

Recent Posts

More Posts

I’ve seen a lot of people (I’m looking at you Daniel Lemire) praise newer languages like Go, which makes me sad as a C++ programmer. Well, that’s until I realise that most of the features touted could be easily incorporated in C++ with just a bit of elbow grease. In this post, I’ll show how to add an automated testing system using CTest.


Vim is my favourite text editor, because it is minimalist while also being insanely configurable. While I may describe my ideal Vim setup sometime in the future, I do want to share some tips and tricks that make Vim so damn efficient for certain tasks. Today, I shall focus on macros. Here’s the key idea to keep in mind when discussing about Vim. Vim is not just an editor, it is a text manipulation program.


Some days ago, I became aware of a bug in GCC that has apparently existed since 2015. As this is a bug that deals with memory leaks, it is fairly serious. In this case, I really don’t want to re-post the entire content of the source, so I will only list my experiments with reproducing the bug once I became aware of it. C++ assumes that if a constructor fails, then no memory is allocated for the object at all.


Mark Buckler and I use Docker a lot. Sometimes, we need X11 forwarding to work over SSH. Here’s a summary of the steps involved in case you’re curious.


With the <random> header in C++11 onwards, there really is no reason to use std::rand() to generate random numbers. In fact, using std::rand() could be really harmful.



LDPC decoding using residual BP

A study of the effects of residual belief propagation as applied to LDPC decoding

High-level synthesis of a belief propagation accelerator

Using Vivado-HLS to rapidly prototype and test accelerators


Emotion detection from images

Active noise-cancelling headphones

Low-cost analogue active noise cancelling headphones


Car make and model detection

Text-independent speaker verification

Artificial neural networks to identify users from speech

Text-dependent speaker verification

Matching spoken text to identify users on an Atmel AVR microcontroller


I have been a teaching assistant for the following courses:

  • ECE2300: Digital logic and computer organization (Fall 2014)
  • ECE3140: Embedded systems (Spring 2015)
  • ECE3140: Embedded systems (Spring 2016)


  • @skandhurkat on Keybase.
  • 471C Rhodes Hall