Qulacs-Osaka / qulacs-osaka

Development branch of qulacs at Osaka Univ
MIT License
13 stars 6 forks source link

Noevo fast #373

Closed WATLE closed 2 years ago

WATLE commented 2 years ago

NoisyEvolutionの高速バージョンを実装しました

codecov-commenter commented 2 years ago

Codecov Report

Merging #373 (321e482) into dev (24e7aa0) will increase coverage by 1.49%. The diff coverage is 82.53%.

@@            Coverage Diff             @@
##              dev     #373      +/-   ##
==========================================
+ Coverage   70.95%   72.45%   +1.49%     
==========================================
  Files          84       84              
  Lines        5970     6109     +139     
==========================================
+ Hits         4236     4426     +190     
+ Misses       1734     1683      -51     
Impacted Files Coverage Δ
src/cppsim/pauli_operator.cpp 78.82% <ø> (+7.54%) :arrow_up:
src/cppsim/pauli_operator.hpp 95.00% <ø> (ø)
src/cppsim/gate.hpp 65.95% <41.66%> (+9.54%) :arrow_up:
src/cppsim/gate_merge.cpp 86.66% <50.00%> (+4.24%) :arrow_up:
src/cppsim/qubit_info.hpp 76.47% <50.00%> (+3.13%) :arrow_up:
src/cppsim/gate_noisy_evolution.hpp 82.92% <86.48%> (+3.34%) :arrow_up:
src/cppsim/gate_factory.cpp 58.36% <100.00%> (+0.28%) :arrow_up:
src/csim/update_ops_pauli_multi.cpp 65.00% <0.00%> (+0.62%) :arrow_up:
src/csim/update_ops_pauli_single.cpp 91.66% <0.00%> (+6.25%) :arrow_up:
... and 6 more

Help us with your feedback. Take ten seconds to tell us how you rate us.

forest1040 commented 2 years ago

ベンチマークを取ってみました。かなり速くなっています! 9bitでmesolveに勝ってます。 benchmark fast-bench.zip

しかし、以下のグラフでNoisyEvoluitionと比べて変わっている箇所があり、修正が必要かと思います。 qulacs bench.py.zip

特にX0X1で、NoisyEvolution_fastは横線になっています。

WATLE commented 2 years ago

そのグラフ、dt=0.1に問題があり、 _fastのdtは旧版のdtと意味が違うので、 1e-5 ぐらいが推奨されます。 そうしたら正しい値が出るはずです

WATLE commented 2 years ago

dtの意味違うし、いっそdtではなくて別の名前に変更したほうが良いですか?

WATLE commented 2 years ago

それはそうとして、現状のアルゴリズムではdtの調整がシビアすぎて、 場合によってはいい感じのdtがないこともありうるので、 いろいろ考えます

WATLE commented 2 years ago

行列指数関数を理解することによって、誤差が減りました。 dtの調整はもはや不要になりました

WATLE commented 2 years ago

ただし、_effective_hamiltonian が対角化可能でなければならず、 実用上どうなるかがわかりません。 対角化不可能な問題がたくさんあったらどうしましょう

forest1040 commented 2 years ago

よい感じになりました。 前回のグラフのX0Y1/Y0X1/Y0Y1がqutipのグラフが出ていなかったのが、なぜか今回は表示されています。。 NoisyEvolutionと同じ形になったのでよいでしょうか。。

qulacs

速度も更に速くなりましたね! benchmark

ただし、_effective_hamiltonian が対角化可能でなければならず、 実用上どうなるかがわかりません。 対角化不可能な問題がたくさんあったらどうしましょう

_effective_hamiltonian で追加されるのは、PauliOperatorなので、必ず対角化できそうな気がします。

kosukemtr commented 2 years ago

中身は問題ないと思いました。対角化を使っているので高速に動くのは 3, 4 qubit くらいが限界というのも了解です。実際上はメモリが足りる限りは対角化可能だと思うので、普通のノート PC でも 10 qubit 以下は一応動くと思います。そういう意味でハミルトニアンが 10 qubit 以上だったらエラーを出すというのがいいのではないでしょうか?(メモリ足りなくて segfault を出すよりはそっちのほうがいいと思うので)

WATLE commented 2 years ago

手元でもformatが動作しないし、CIも落ちるの助けてください

forest1040 commented 2 years ago

CIが落ちるのは、https://github.com/Qulacs-Osaka/qulacs-docker-images/pull/6 を対応してもらったからです。。 しばらく気にしないでください。。

forest1040 commented 2 years ago

clang-format の CI の修正を ikanagoさんにマージしてもらいましたので、devをマージしました。