Adithya · Quantum Resource Estimation and my Intern Experience

This past summer, I worked on the Quantum Systems Team at Microsoft. Every December the group puts together a Q# Advent Calendar filled with great blog posts. I thought I’d share my work on the Quantum Systems Team, as well as my general experience being a Microsoft Intern.

Quantum Resource Estimation


Resource estimation is an important concept in quantum programs. As the name implies, resource estimation allows a quantum researcher to understand the simulated resources required to run a particular algorithm, usually measured in logical qubits. But resource estimation can provide much more than that. We can track the number and types of gates required to run a program. And, by continuously evaluating a quantum program against a common set of metrics, we can understand the improvement of our theoretical approaches.

Toy Example

To be more concrete, we can look at the outputs of the QDK Resource Estimation tool on various Q# implementations of quantum programs that implement the following function, where $n=3$. (known as the majority of three ) This example is taken from a great presentation given by the QDK Team at IEEE Quantum Week 2020.


p1,,pn=Majority(p1,,pn)=12+((i=1npi)1/2n\begin{split} \langle p_1,\dots, p_n \rangle &= \rm Majority (p_1, \dots, p_n) \\ \\ &= \left \lfloor \frac{1}{2} + \frac{((\sum^n_{i=1} p_i) - 1/2}{n} \right \rfloor \end{split}


namespace Majority {
    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Convert;
    open Microsoft.Quantum.Intrinsic;
    open Microsoft.Quantum.Synthesis;

    operation ApplyMajorityUsingInts(x1 : Qubit, x2: Qubit, x3 : Qubit,
    y : Qubit) : Unit is Adj + Ctl {

    operation ApplyMajorityUsingCCNOTs(x1 : Qubit, x2: Qubit, x3 : Qubit,
    y : Qubit) : Unit is Adj + Ctl {

    operation ApplyMajorityUsingTruthTable(x1 : Qubit, x2: Qubit, x3 : Qubit,
    y : Qubit) : Unit is Adj + Ctl {

    operation ApplyMajorityUsingCNOTTransformation(x1 : Qubit, x2: Qubit,
    x3 : Qubit, y : Qubit) : Unit is Adj + Ctl {


We won’t dive into the implementation details of each of these functions since that is not the focus of this blog post. (and, they were already covered in the talk linked above ) What is important, though, is that they do produce significantly different qubit usage counts and gate counts as noted in the table below.

Implementation CNOT Clifford T T Depth Qubits
Ints 120 30 84 56 5
CCNOTs 30 6 21 15 4
Truth Table 14 3 8 6 4
CCNOT Transformation 15 2 7 5 4

Now imagine you are a researcher trying to iteratively improve upon your algorithm’s performance. Often times, performance in one of these metrics comes at the cost of another area. (known as a Pareto front ) And after speaking with quantum researchers, I noted that they all mention the tedium and sometimes error filled process of tracking experiment results.


Enter the resource estimation dashboard, an all-in-one tool to both measure and track the performance of different quantum programs. The idea here is to track experiment results using a consistent format and upload the results to a central platform. As you iteratively improve on your algorithm–or run your algorithm with a different set of parameters, you will see plots that result in points along a Pareto curve.

The screenshot below is taken from the MVP that I built over the summer. It digitizes the main plots showing the tradeoffs suggested in the work to reduce the T-Depth of quantum circuits. One could imagine a website with this page, along with others pages, for specific quantum applications covered in the Quantum Algorithm Zoo. In fact, you get a two for one, since both the results and code are collated together, you get reproducibility of results for free. (that is, if the project was run using a public CI service like GitHub Actions)

Pareto Plots

In fact, this concept is not all that new and has been put to great effect in the ML community and a number of startups and projects are working on problems in that space. Papers with Code, most notably, has become the go-to source for ML researchers to get a rough sense of the progression of the state of the art in any particular problem area. The work I implemented over the summer put together an MVP for a hosted runner that executed Q# programs against the open source QDK Resource Estimator. For those curious, the stack was a Next.js frontend with a .NET API backend server. The above is just a sample of the overall project vision, and I hope gives you an idea of the types of exciting work the Quantum Systems team is working on.

The Microsoft Intern Experience

Besides my core work on the Quantum Systems Team, I also enjoyed my time as a Microsoft Intern! Although there were a number of fantastic intern events, two in particular, stand out in my memory: the Microsoft Intern Game and serving as a moderator for a “pool-side” chat with a Microsoft Researcher.

For the intern game, we paired up into groups and competed in an “Amazing Race” style virtual event with a Casino Heist theme. The Microsoft team behind the event had developed a custom virtual platform with mini-games that had real world puzzles that were mailed out to us along with actors, to boot. It was a great time. For my moderation panel, I got a chance to chat with Kevin Yang a senior researcher working on bioinformatics in Microsoft’s Cambridge office. We chatted about his past as a PhD student and his current work at Microsoft along with why he’s excited about protein engineering. Besides the events, the intern team was very kind to send the interns a lot of swag–some of which I wear all the time like my quantum team sweatshirt.

Overall, I cannot speak more highly about my experience as an intern on the Quantum Team and– I hear they are looking for more interns, so I would definitely recommend you check them out.