Skip to content

microsoft/AOCoptimizer.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AOCoptimizer.jl

The Analog Optical Computer (AOC) project is building an analog optical computer that has the potential to accelerate AI inference and hard optimization workloads by 100x. To achieve this, we rely on a physical system to embody the computations and step away from several fundamentally limiting aspects of digital computing avoiding the separation of compute from memory, operating on both continuous and binary data and adopting asynchronous operation that allows the computer to operate at the “speed of light.” It is built using commodity optical and electronic technologies that are low cost and scalable, showing the potential of analog optical computing in the post-Moore Law’s era.

A key aspect of AOC is its hardware and abstraction have been co-designed with the target applications, i.e., the families of optimization and ML algorithms, to take advantage of the computer’s strengths while accommodating its shortcoming and non-idealities. As part of the co-design, we are developing a set of algorithms that are tailored to the AOC hardware. We hope that this will enable the community to explore the potential of analog optical computing, to develop new algorithms and applications, and to inform the design of future analog optical computers.

This repository contains the implementation of AOC-inspired algorithms targetting optimization and control problems. The algorithms are implemented in the Julia programming language and use modern computing capabilities (GPU acceleration, vectorization, etc.) to enable the exploration of the potential of analog optical computing for problems of non-trivial size. In their simplest form, they present an idealized (i.e., noise-free), scalable version of the AOC hardware.

To cite this work please use the following BibTeX entry (from the arxiv paper):

@online{kalinin2023aim,
      title={Analog Iterative Machine (AIM): using light to solve quadratic
             optimization problems with mixed variables},
      author={Kirill P. Kalinin and George Mourgias-Alexandris and Hitesh Ballani
              and Natalia G. Berloff and James H. Clegg and Daniel Cletheroe
              and Christos Gkantsidis and Istvan Haller and Vassily Lyutsarev
              and Francesca Parmigiani and Lucinda Pickup and Antony Rowstron},
      year={2023},
      eprint={2304.12594},
      archivePrefix={arXiv},
      primaryClass={cs.ET},
      url={https://arxiv.org/abs/2304.12594},
}

Getting started

Install the package as follows:

] add https://github.com/microsoft/AOCoptimizer.jl
# or
using Pkg
Pkg.add(url="https://github.com/microsoft/AOCoptimizer.jl", rev="main")

After successful installation, the following should work:

# if you want to use CUDA, first uncomment the following line to load CUDA.jl
# using CUDA
using AOCoptimizer
AOCoptimizer.init()

To further check the installation, run the following command (it may take a while to finish):

] test AOCoptimizer
# or
using Pkg
Pkg.test("AOCoptimizer")

More details on installation and basic usage can be found in the docs, in particular in the installation and in the example.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Project structure

The project is structured as follows:

  • src/ - contains the source code of the package.
  • ext/ - source code that gets loaded only when additional packages (for example, CUDA.jl) are used.
  • test/ - contains the tests for the package.
  • scripts/ - auxiliary scripts
  • docs/ - contains the documentation for the package.
  • data/ - sample data used in tests and examples. (In some cases, scripts are provided to download such data from public sources.)
  • notebooks - Contains more detailed testing and example scripts.
  • benchmarks/ - contains scripts to benchmark the performance of the solver.
  • .github/ - contains GitHub-specific files, such as workflows.

Manual testing of package

.\runtests.ps1
cd docs
julia --project .\make.jl
cd ..
cd notebooks
.\compile.ps1  # this may take a while to finish,
               # may even fail for unrelated reasons
cd ..
.\bom.ps1

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

lifecycle

build

Documentation Documentation Aqua QA

About

Optimization solver backend for analog optical computer

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •