ngnrsaa / qflex

Flexible Quantum Circuit Simulator (qFlex) implements an efficient tensor network, CPU-based simulator of large quantum circuits.
Apache License 2.0
97 stars 24 forks source link

Improve creation of initial set of tensors. #258

Closed s-mandra closed 4 years ago

s-mandra commented 4 years ago

At the moment, creating the initial set of tensors (while reading the circuit) has a comparable time with the actual contraction for large circuits:

./src/qflex.x -c config/circuits/rochester_53_20_0_pABC.txt \
    -g config/grid/rochester_53.txt \
    -o config/ordering/rochester_53.txt \
    -v 1 -t 1 -m 5GB

Maximum allowed memory: 5 GB
Time spent making contraction ordering: 0.000502558s
Time spent creating 3D grid of tensors from file: 0.011849174s
Time spent allocating scratch space for 2D grid: 0.00654037s
[Wed Jan 22 17:23:24 2020] Memory usage: 36.26 MB (Peak: 36.26 MB)
[Wed Jan 22 17:23:25 2020] Memory usage: 202.27 MB (Peak: 202.27 MB)
[Wed Jan 22 17:23:26 2020] Memory usage: 258.7 MB (Peak: 274.56 MB)
[Wed Jan 22 17:23:27 2020] Memory usage: 290.58 MB (Peak: 314.6 MB)
[Wed Jan 22 17:23:28 2020] Memory usage: 330.62 MB (Peak: 338.65 MB)
[Wed Jan 22 17:23:29 2020] Memory usage: 370.65 MB (Peak: 370.65 MB)
[Wed Jan 22 17:23:30 2020] Memory usage: 322.93 MB (Peak: 394.65 MB)
[Wed Jan 22 17:23:31 2020] Memory usage: 394.58 MB (Peak: 418.65 MB)
[Wed Jan 22 17:23:32 2020] Memory usage: 418.58 MB (Peak: 442.65 MB)
[Wed Jan 22 17:23:33 2020] Memory usage: 410.77 MB (Peak: 466.65 MB)
[Wed Jan 22 17:23:34 2020] Memory usage: 466.58 MB (Peak: 490.65 MB)
[Wed Jan 22 17:23:35 2020] Memory usage: 434.93 MB (Peak: 506.65 MB)
Time spent creating 2D grid of tensors from 3D one: 11.965901322s
Allocating 2.41 GB for this simulation.
[Wed Jan 22 17:23:36 2020] Memory usage: 1.11 GB (Peak: 1.11 GB)
[Wed Jan 22 17:23:37 2020] Memory usage: 1.86 GB (Peak: 1.86 GB)
[Wed Jan 22 17:23:38 2020] Memory usage: 2.79 GB (Peak: 2.79 GB)
[Wed Jan 22 17:23:39 2020] Memory usage: 2.86 GB (Peak: 2.86 GB)
[Wed Jan 22 17:23:40 2020] Memory usage: 1.11 GB (Peak: 2.86 GB)
Total time: 16.311942795s
[Wed Jan 22 17:23:40 2020] Memory usage: 630.6 MB (Peak: 2.86 GB)
00000000000000000000000000000000000000000000000000000 --> 00000000000000000000000000000000000000000000000000000: 3.35139e-09 9.2191e-09

We should definitely improve that part.

s-mandra commented 4 years ago

See #265.

s-mandra commented 4 years ago

With the improvements in #265, loading time has been reduced from ~11s --> ~3s. This improvement is mainly given by avoiding the creation/copy of temporary objects:

./src/qflex.x -c config/circuits/rochester_53_20_0_pABC.txt \
    -g config/grid/rochester_53.txt \
    -o config/ordering/rochester_53.txt \
    -v 1 -t 1 -m 5GB

Maximum allowed memory: 5 GB
Time spent making contraction ordering: 0.000626667s
Time spent creating 3D grid of tensors from file: 0.014222552s
Time spent allocating scratch space for 2D grid: 0.008419234s
[Mon Jan 27 15:32:38 2020] Memory usage: 45.21 MB (Peak: 45.21 MB)
[Mon Jan 27 15:32:39 2020] Memory usage: 212.93 MB (Peak: 212.93 MB)
[Mon Jan 27 15:32:40 2020] Memory usage: 309.1 MB (Peak: 309.1 MB)
[Mon Jan 27 15:32:41 2020] Memory usage: 389.02 MB (Peak: 389.02 MB)
Time spent creating 2D grid of tensors from 3D one: 3.564721787s
Allocating 2.41 GB for this simulation.
[Mon Jan 27 15:32:42 2020] Memory usage: 1.12 GB (Peak: 1.12 GB)
[Mon Jan 27 15:32:43 2020] Memory usage: 2.68 GB (Peak: 2.68 GB)
[Mon Jan 27 15:32:44 2020] Memory usage: 2.76 GB (Peak: 2.76 GB)
[Mon Jan 27 15:32:45 2020] Memory usage: 2.77 GB (Peak: 2.77 GB)
[Mon Jan 27 15:32:46 2020] Memory usage: 2.78 GB (Peak: 2.78 GB)
[Mon Jan 27 15:32:47 2020] Memory usage: 2.78 GB (Peak: 2.78 GB)
[Mon Jan 27 15:32:48 2020] Memory usage: 2.78 GB (Peak: 2.78 GB)
[Mon Jan 27 15:32:49 2020] Memory usage: 2.78 GB (Peak: 2.78 GB)
Total time: 11.281375501s
[Mon Jan 27 15:32:50 2020] Memory usage: 531.12 MB (Peak: 2.78 GB)
00000000000000000000000000000000000000000000000000000 --> 00000000000000000000000000000000000000000000000000000: 3.3514e-09 9.21908e-09