The Helios paper from @QuantinuumQC is out on arxiv -

It is feat of quantum hardware and software.

If you follow me, you're probably a software nerd. I want take a scenic tour of a software aspect that is very cool.

No quantum knowledge necessary.arxiv.org/abs/2511.05465
Mandatory note: I work at Quantinuum. Opinions are mine. Metaphors mine, inaccuracies mine, bad writing mine.

I'm posting this because we've done something cool, and now it has launched, I want to share it with software folk who aren't exposed to this field.

Hope you like it.
A primer to define terms.

A normal computer has bits and instructions. A quantum computer has qubits and gates.

In terms of computation they're different, but in terms of process it's the same deal.

I won't explain why qubits are different to bits. It's an enormous topic.
On computers, bits may be encoded as charges, voltage differences, etc.

On QCCD ion traps like Helios, qubits are encoded in the state of ions in a trap. Hence the name!

Throughout operation, you move these ions in and out of storage and gating zones, rearrange them, etc. A diagram of Helios. We liked it so we put a ring on it.  The ring is for storing ions while they aren't actively being operated on. It can rotate freely in either direction, so you can pull out specific qubits you want, or push others in. It's really neat.  That junction between the storage ring and the cache is *chefs kiss*
A user submits code (more on this later) that talks in an abstract language of qubits and gates.

They want to run it on your machine and get results.

They don't really care about ions, trap architecture, transport, gating zones. That's implementation detail for low level folk.
When they submit that code, you as a provider need to figure out the best way to map the abstract to reality - assign qubits to ions, transport them around the trap, fire gates, parallelise.

This is a hard thing to do optimally.

Qubits lose information fast, so optimal = good.
The usual solution? Analyse the user's code ahead of time.

This requires user code to be deterministic, or have minimal control flow that can be statically analysed.

Which is kind of okay. Much of the industry thinks in static quantum "circuits" like these: Examples of quantum circuits, taken from  Koh, J.M., Tai, T., Phee, Y.H. et al. Stabilizing multiple topological fermions on a quantum computer. npj Quantum Inf 8, 16 (2022). https://doi.org/10.1038/s41534-022-00527-1
Or, sometimes, basic control flow is allowed - supporting a few if statements (depending on measurement results mid-run). These are called "dynamic" circuits.

If there aren't many branches you can still traverse every possibility and come up with good overall hardware flow.
There's a point that this breaks down.

A major reason that people WANT control flow is that they want to correct quantum errors.

This means frequently making decisions throughout execution. Lots and lots of branching.

The circuit picture blows up. An example QEC flow from https://arxiv.org/abs/2107.07505  Ryan-Anderson, Ciaran, et al. "Realization of real-time fault-tolerant quantum error correction." Physical Review X 11.4 (2021): 041058.
That's low level stuff providers will do themselves one day, but isn't the only control flow puzzle in town.

AI for quantum! Not a buzzword.

In chemistry simulations, classical NNs could dynamically tune live quantum states to mimic arbitrary molecules

arxiv.org/abs/2502.06517…Image
Intermission!

Let's recap.

The prevailing paradigm is one of pure quantum, but with very limited classical control.

Providing more control will create opportunities for users, from low level qubit management, right the way up to scientific applications.

Whatever will we do?
The mentality had to flip entirely.

Applications will want to do arbitrary classical things.

To let them do that, dynamic circuits aren't enough. We need programs.

Full, Turing-complete classical programs that drive a quantum device like you'd drive any normal hardware.
This modality is called "Hybrid quantum computing".

Classical code on a CPU is in control and makes calls out to quantum hardware *while the quantum state is still alive*.

Just like you make calls out to a GPU or network card from code running on your CPU. Same deal.
This needs a runtime.

And Helios provides one, responsible for doing all of that mapping from high level instructions to low level ion stuff.

It has qubit versions of malloc and free, for instance, and an interface for gates and measurements. It has, in short, an API.
This runtime is invoked, on demand, by the user's program in realtime. Again, not circuit, not dynamic circuit - actual program.

This program, written by the user, runs on-device.

For those interested in how it achieves that, the paper goes into some detail about how it works.
So far so good. There exists a kind of program that users can write. It does classical things on a CPU, making calls out to a QPU.

But this is all a bit abstract still. What kind of program?

In quantum information there are some rules to follow.
This is where a PL person would talk about linear types, but I'm not a PL person, so here's a glimpse.

You can't clone qubits. It just doesn't math. There's a theorem and everything.

And when you have strict semantics, you should enforce them.en.wikipedia.org/wiki/No-clonin…
(the specific components I'm going to briefly talk about now are open source, so I'm going to link to them so you can check them out if you want)
To ensure that a program simply wouldn't compile if it violated constraints like this for quantum types, but allowed it for classical ones, an IR for hybrid computing was created: HUGR.

For something to compile to HUGR, it has to obey the rules.

github.com/CQCL/hugr/blob…
If you have some HUGR, you can transform it with the new generation of Tket: .

There are ways to optimise programs on the quantum level, rebase gates, and, compile to LLVM.

Not a gate sequence. Not an LLVM subset. LLVM.

Goodbye circuits. Hello programs!github.com/CQCL/tket2
You don't normally want to write your programs in an intermediate representation.

So a friendly programming language was born - Guppy.

It's a language embedded in python, and compiles to HUGR.

It has arbitrary control flow.

docs.quantinuum.com/guppy/Snippet of some guppy code, using recursion.  There is a bounded number of attempts in the function definition, but this isn't mandatory - while True is valid.  The thing I love about recursion - you can allocate qubits in each stack frame. At some point (well, 98) you run out and the gig is up,  but you can do some crazy things with recursion in guppy if you set your mind to it.  Other control flow exists, of course. It's just my favourite public example.
Users can emulate stuff locally with Selene to try it out* from the same interface so they can see what it'll do when they submit it.



*within limits - UNIVERSALLY simulating 98 qubits would take 5 quettabytes of RAM. I said qubits were different.github.com/CQCL/selene
So users can create arbitrary programs (not just "circuits") with the control flow they need, try it out, then submit it to Helios.

E.g this:

Running a guppy program acting as host, JPMC had *full remote control* of Helios, live. No trickery.arxiv.org/abs/2511.03689
That users can run full hybrid programs on Helios is the result of an enormous effort on every detail, from that incredible little junction right up to guppy UX.

Also the choice of trapped ions. They're long-lived and take time to operate on, so CPU work can fit alongside them.
That comes to the end of the tour.

Thanks for making it to the end! Let me know what you think!

I hope you've enjoyed it, learned something new, and gained an glimpse into one of many streams of work that went into Helios.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Jake Arkinstall, PhD 🏴󠁧󠁢󠁷󠁬󠁳󠁿

Jake Arkinstall, PhD 🏴󠁧󠁢󠁷󠁬󠁳󠁿 Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @JakeArkinstall

Apr 27, 2022
First impressions after using NixOS (and Nix in general). A thread 🧵

(Inspired by @jupitersignal's nix challenge)
First of all, where has this been all of my life? As a user, the experience is incredible. Want to install something? Add a line to your config. Uninstall? Remove a line. Not sure? "nix-shell -p something" and try it out.
Want to configure something? You can always do it in the config file. I added three VPN clients to my machine today with five lines of legible text. And it just worked. Copied the config to my laptop, ran nix build, boom, the connection worked. This is ridiculously nice.
Read 21 tweets
May 17, 2021
We're in the planning stage of a large refactor at the moment. So much of the past and current designs were influenced in some way or another by some conference talks. So I figured it's time for a C++ appreciation thread.

If there's one you haven't seen, give it a watch.

🧵
Using Types Effectively - @ben_deane

When I saw this, we were writing the first formal iteration of what became our most critical component. It shows how to catch edge cases in the type system instead of runtime tests.

... we started again from scratch

"Safe Numerics" - @robertramey1

This is another example of using the type system to catch edge cases - this time in numerics.

The ultimate aim: to "have a chain of responsibility that we can defend". That's vital and *far* too often overlooked.

Read 11 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(