*
Quick Links|Home|Worldwide
Microsoft*
Search for


Kiwi: Synthesis of Circuits from Parallel Programs


Project members:

The Kiwi project aims to make reconfigurable computing technology like Field Programmable Gate Arrays (FPGAs) more accessible to mainstream programmers. FPGAs have a huge potential for quickly performing many interesting computations in parallel but their exploitation by computer programmers is limited by the need to think like a hardware engineer and the need to use hardware description languages rather than conventional programming languages. We target audience for our work are people writing computational intensive programs in areas like software scientific computing and executable biology. The Kiwi project is part of a wider project that is researching programming models for heterogeneous many-core architectures.

Our system starts from a parallel description of the computation to be implemented in hardware:

  • We start from a parallel description of a computation expressed in C# using the standard concurrency constructs provided by .NET and the System.Threading library.
  • This description can be debugged, verified and analyzed using conventional software concepts and tools.
  • The same parallel program can now also be compiled into a circuit. Each thread in the program corresponds directly to a distinct sub-circuit and inter-thread communication is mapped into appropriate circuit elements using registers and a hand-shaking protocol.
  • The generated circuit in the Verilog hardware description format which can then be fed into vendor tools to generate a programming bit-stream. This bit-stream can be used to program a real FPGA circuit which can then perform the computation in parallel in hardware.

Kiwi System Overview

 

We do not take arbitrary C# code and convert it into gates. Our system requires the C# parallel program to be a sensible model of a circuit which has to conform to many restrictions that we place to make sure that at compile time we can compute the size of arrays, the number of threads etc.

Once we have a solid implementation of the basic low level concurrency primitives our aim to build higher level parallel programming constructs which provide a more civilized way for users to write parallel programs.

We also have a project that Sutirtha Sanyal is working on that is investigating compiling part of a C# program into a circuit and the rest into software for execution on the same FPGA with the possibility of communication between the hardware and software components expressed as regular static method calls.

Here are some papers about Kiwi:


©2008 Microsoft Corporation. All rights reserved. Terms of Use |Trademarks |Privacy Statement