Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

polish README #195

Merged
merged 1 commit into from
Jun 9, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 12 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,24 +53,6 @@ For CUDA support, see [CuYao.jl](https://github.com/QuantumBFS/CuYao.jl).

Some quantum algorithms are implemented with Yao in [QuAlgorithmZoo](https://github.com/QuantumBFS/QuAlgorithmZoo.jl).

## Motivation
Comparing with state of art quantum simulators, our package is inspired by variational quantum circuit optimization.
Variational quantum optimization algorithms like quantum circuit Born machine ([QCBM](https://arxiv.org/abs/1804.04168)), quantum approximate optimization algorithm ([QAOA](http://arxiv.org/abs/1411.4028)), variational quantum eigensolver ([VQE](https://doi.org/10.1038/ncomms5213)) and quantum circuit learning ([QCL](http://arxiv.org/abs/1803.00745)) et. al. are promising killer apps on near term quantum devices.
These algorithms require the flexibility to tune parameters and have well defined patterns such as "Arbitrary Rotation Block" and "CNOT Entangler".

In Yao, we call these patterns "blocks". If we treat gate or gate pattern as "block", then the framework can

* be flexible to dispatch parameters,
* cache matrices of blocks to speed up future runs,
* allow hierarchical design of quantum algorithms

Thanks to Julia's duck type and multiple dispatch features, user can

* easily **extend** the block system by overloading specific interfaces
* quantum circuit blocks can be dispatched to some **special method** to improve the performance in specific case (e.g. customized repeat block of H gate).



## Features

Yao is a framework with the following features:
Expand All @@ -86,6 +68,18 @@ Yao is a framework with the following features:
- As a white-box simulator, rather than using a black box, users will be aware of what their simulation are doing right through the interface.
- **Hierarchical APIs** from **low abstraction quantum operators** to **highly abstract** circuit block objects.

## Motivation

The study of variational quantum algorithms is gaining popularity. Variational quantum optimization algorithms like quantum circuit Born machine ([QCBM](https://arxiv.org/abs/1804.04168)), quantum approximate optimization algorithm ([QAOA](http://arxiv.org/abs/1411.4028)), variational quantum eigensolver ([VQE](https://doi.org/10.1038/ncomms5213)) and quantum circuit learning ([QCL](http://arxiv.org/abs/1803.00745)) et. al. are promising for near term quantum devices.
These algorithms require the flexibility to tune parameters and to leverage circuit patterns such as "arbitrary rotation block" and "CNOT entangler". In a departure from traditional simulators and frameworks, we have designed and developed a framework along with an Intermediate Representation (IR) to represent, simulate and manipulate quantum circuits.

Our design enables:

* Hierarchical design of quantum algorithms and greater abstraction for quantum circuits
* Heterogeneous computing
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is exactly heterogeneous computing?

Copy link
Member Author

@Roger-luo Roger-luo Jun 6, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

heterogeneous means it can run on different hardware.

The design of block IR is hardware free. It enables heterogeneous computing.

I could add a link to wiki for this.

Copy link
Member

@GiggleLiu GiggleLiu Jun 6, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not remove it if it requres wiki, it is not the key feature. Do you mean GPU backend? Then just say GPU support.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not only about GPU support, it is about the why is the design hardware free, what does this hardware free capable of. Heterogeneous is conceptually a more powerful and precise description of hardware free.

Copy link
Member Author

@Roger-luo Roger-luo Jun 6, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simply say it is GPU support cannot cover other work in YaoExperiment, YaoGraphs, and other possible direction that other people are interested in (like real hardware support in Regetti). Thus heterogeneous is better, if you think this needs some description, we could add a link. But you can't get rid of this concept if we are still dealing with this arch, and this is a very common feature among many softwares.

This concept has been existing for decades, if people don't understand it, they should read wiki and learn it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most framework supports hardware... I mean this is not a unique feature. Also, YaoExperiment has only basic support.

Copy link
Member Author

@Roger-luo Roger-luo Jun 6, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, but I mean even it is basic, we have it, and we also have RBNF for QASM. The design of quantum block IR itself is mature to support heterogeneous computing already. And since some companies are interested in using it, heterogeneous shows the ability of Yao that can be extended to their own hardware, and if the Harvard group is going to use it, we (or at least you, you are the guy got hired) need to support their hardware at least.

So what would you suggest here? a link? or?

Copy link
Member

@GiggleLiu GiggleLiu Jun 7, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So far, we do not have reliable support to QASM. So let's just remove it?

Copy link
Member Author

@Roger-luo Roger-luo Jun 7, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You misunderstand what I meant here. Heterogeneous computing is a feature for quantum block IR (note there is "our design enables" as the condition), it's not about QASM and other features of Yao, we didn't say "our design supports"

The whole point of getting rid of T and MatrixBlock is to make it a better design for heterogeneous computing (or it can be hardware related). This feature means you can extend Yao easily to your desired hardware, which doesn't have to be supported by ourselves.

Without this feature of quantum block IR, you can't extend Yao to QASM/CUDA/etc without dealing with the hardware abstraction (like the precision of blocks).

Even you think heterogeneous computing is a hard word to understand for non-CS background people, we can change the language, but it is a very important feature of quantum block IR. I believe this is something deserve to be mentioned in README.

* Flexibility in dispatch parameters
* Caching matrix forms to speed up simulation

## Architecture

Yao is a meta package based on several component packages in order to provide a highly modularized architecture, researchers and developers can extend the framework with different component packages for different purposes with minimal effort. The component packages includes:
Expand Down