In prior posts to this blog, we’ve certainly aired our grievances with the prior IR release (v1, whereas we’re now at v2).
You may want to go back and skim the previous retrospective and our BOLT fast interpreter.
But if you don’t want to review those, IR1’s (IR1 was the old IR’s code name) memory layout was completely disorganized, and some of its higher level features proved difficult (@switch) or slow (@for) to implement.
We spent a bit of time developing the BOLT interpreter with a few tricks for greatly accelerating how loops could be processed.
During development of the IR, the SIEVE Program sort of decided that circuits are not expressive enough to express certain functionality.
For example, the comparison and division operations previously described on this blog cannot be encoded with the IR because they require plaintext computations to be performed and passed into the circuit.
Certainly the frontend could do that, but so could the backend — and many already can, with further tricks that a frontend can’t reliably expect to exist.
Hence, we created the plugin system to enable backends to implement certain functionalities on their own and provide an interface through the IR.
The SIEVE IR’s function gates will encapsulate a subcircuit so it may be reused many times over.
Doing this can drastically reduce the size of a circuit.
This may seem unimportant, considering how an interactive proof is likely to have communication proportional to the number of gates, however IO of the relation has proved to be a bottleneck in the past, and some relations have taken terabytes of space.
So, its worth it to attempt to compress the circuit as much as possible.
In this series, we are examining the new SIEVE Circuit-IR.
This installment will examine its type system and how it enables multiple types to be combined within the same relation.
The DARPA SIEVE Program has been developing the SIEVE Intermediate Representation for about three years, and we recently achieved our second public release: the Circuit Intermediate Representation.
As one of the primary developers of it, team Wizkit will again blog about its development and workings.
Today we’ll start a series overviewing the SIEVE Circuit Intermediate Representation (Circuit-IR) language and semantics, and of course our own WizToolKit library for this revision of the Circuit-IR.